|  |  |  | package api
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import (
 | 
					
						
							|  |  |  |   "log"
 | 
					
						
							|  |  |  |   "time"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   "github.com/gofiber/fiber/v2"
 | 
					
						
							|  |  |  |   _ "github.com/mattn/go-sqlite3"
 | 
					
						
							|  |  |  |   sq "github.com/Masterminds/squirrel"
 | 
					
						
							|  |  |  |   "github.com/gofiber/fiber/v2/middleware/session"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   "MY/webapp/data"
 | 
					
						
							|  |  |  |   . "MY/webapp/common"
 | 
					
						
							|  |  |  | )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var STORE *session.Store
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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) }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // BUG: THIS IS A BIG NO NO, just for getting going
 | 
					
						
							|  |  |  |     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) {
 | 
					
						
							|  |  |  |   STORE = session.New()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   app.Static("/", "./public", fiber.Static{
 | 
					
						
							|  |  |  |     Compress: false,
 | 
					
						
							|  |  |  |     CacheDuration: 1 * time.Nanosecond,
 | 
					
						
							|  |  |  |   })
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   app.Get("/api/logout", GetApiLogout)
 | 
					
						
							|  |  |  |   app.Post("/api/login", PostApiLogin)
 | 
					
						
							|  |  |  |   app.Post("/api/register", PostApiRegister)
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func Shutdown() {
 | 
					
						
							|  |  |  |   log.Println("Shutting down controllers...")
 | 
					
						
							|  |  |  | }
 |