You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							83 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							83 lines
						
					
					
						
							1.8 KiB
						
					
					
				| 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...")
 | |
| }
 | |
| 
 |