Request object

This commit is contained in:
Eden Kirin
2024-02-06 16:21:00 +01:00
parent 75cded4054
commit 4d9759c093
17 changed files with 194 additions and 1210 deletions

View File

@ -0,0 +1,81 @@
package requests
import (
"errors"
"fiber-sessions/app/types"
"time"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/session"
"github.com/gofiber/storage/memory/v2"
)
var sessionStorage = memory.New()
var sessionStore = session.New(session.Config{
Storage: sessionStorage,
})
const SESSION_EXPIRES = time.Minute * 30
type UserGetter interface {
GetUserById(id string) *types.User
AuthUser(username string, password string) *types.User
}
type Request struct {
ctx *fiber.Ctx
session *session.Session
User *types.User
userGetter UserGetter
}
func NewRequest(ctx *fiber.Ctx, userGetter UserGetter) *Request {
session, err := sessionStore.Get(ctx)
if err != nil {
panic(err)
}
var user *types.User = nil
userId := session.Get("userId")
if userId != nil {
user = userGetter.GetUserById(userId.(string))
}
return &Request{
ctx: ctx,
session: session,
userGetter: userGetter,
User: user,
}
}
func (r *Request) LoginUser(username string, password string) error {
user := r.userGetter.AuthUser(username, password)
if user == nil {
return errors.New("invalid username or password")
}
r.User = user
r.session.Set("userId", r.User.Id)
r.session.SetExpiry(SESSION_EXPIRES)
if err := r.session.Save(); err != nil {
panic(err)
}
return nil
}
func (r *Request) UserAuthenticated() bool {
return r.User != nil
}
func (r *Request) Logout() error {
if !r.UserAuthenticated() {
return errors.New("user not authenticated")
}
r.session.Destroy()
r.User = nil
return nil
}

View File

@ -58,14 +58,6 @@ func initRouter(app *fiber.App) {
app.Post("/login", handlers.LoginSubmit)
app.Get("/logout", handlers.Logout)
interactiveGroup := app.Group("/interactive")
{
interactiveGroup.Get("", handlers.Interactive)
interactiveGroup.Get("/swap-content", handlers.InteractiveSwapContent)
interactiveGroup.Get("/filter-cat-breeds", handlers.FilterCatBreeds)
interactiveGroup.Post("/validate-form", handlers.ValidateForm)
}
app.Static("/static", STATIC_PATH)
}