package auth import ( "github.com/gofiber/fiber/v2" _ "github.com/mattn/go-sqlite3" sq "github.com/Masterminds/squirrel" "MY/webapp/data" . "MY/webapp/common" ) func GetApiAuthCheck(c *fiber.Ctx) error { _, err := Check(c, false) // auth failure or not authed is determined by err, with nil meaning YES AUTHED return c.JSON(fiber.Map{"is_authed": err == nil}) } func GetApiLogout(c *fiber.Ctx) error { err := LogoutUser(c) if err != nil { return IfErrNil(err, c) } return c.Redirect("/") } func PostApiRegister(c *fiber.Ctx) error { user, err := ReceivePost[data.User](c) if err != nil { return IfErrNil(err, c) } err = SetUserPassword(user) if err != nil { return IfErrNil(err, c) } sql, args, err := sq.Insert("user"). Columns("username", "email", "password"). Values(user.Username, user.Email, user.Password).ToSql() _, err = data.Exec(err, sql, args...) if err != nil { return IfErrNil(err, c) } return c.Redirect("/login/") } func PostApiLogin(c *fiber.Ctx) error { var user data.User login, err := ReceivePost[data.Login](c) if(err != nil) { return IfErrNil(err, c) } pass_good, err := LoginUser(&user, login) if err != nil { return IfErrNil(err, c) } if pass_good { sess, err := STORE.Get(c) if err != nil { return IfErrNil(err, c) } sess.Set("user_id", user.Id) sess.Set("authenticated", true) sess.Set("admin", IsAdmin(&user)) err = sess.Save() if err != nil { return IfErrNil(err, c) } return c.Redirect("/") } else { return c.Redirect("/login/") } } func Setup(app *fiber.App) { app.Get("/api/authcheck", GetApiAuthCheck) app.Get("/api/logout", GetApiLogout) app.Post("/api/register", PostApiRegister) app.Post("/api/login", PostApiLogin) }