package routes import ( "fmt" "github.com/aziis98/lupus-lite/handlers" "github.com/aziis98/lupus-lite/model" "github.com/gofiber/fiber/v2" ) const UserKey = "github.com/aziis98/lupus-lite/user" func requestUser(c *fiber.Ctx) *model.User { user, ok := c.Locals(UserKey).(*model.User) // TODO: Check semantics of casting "nil" to pointer to struct if !ok { return nil } return user } func RequireLogged(server handlers.Handler) fiber.Handler { return func(c *fiber.Ctx) error { token := c.Cookies("sid") if token == "" { return fmt.Errorf(`request has no session token`) } user, err := server.UserForSession(token) if err != nil { return err } // this is wrapped in a pointer to let "nil" mean no user logged in when calling "requestUser()" c.Locals(UserKey, &user) return c.Next() } }