Request object
This commit is contained in:
81
app/router/requests/requests.go
Normal file
81
app/router/requests/requests.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user