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"
"zedshaw.games/webapp/data"
. "zedshaw.games/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 )
app . Get ( "/feed/" , Page ( "feed" ) )
app . Get ( "/post/view/:id/" , Page ( "post/view" ) )
app . Get ( "/post/new/" , Page ( "post/new" ) )
app . Get ( "/settings/" , Page ( "settings" ) )
app . Get ( "/u/:user_id" , Page ( "profile" ) )
}
func Shutdown ( ) {
log . Println ( "Shutting down controllers..." )
}