Better session handling
This commit is contained in:
@ -23,12 +23,19 @@ type UserGetter interface {
|
||||
}
|
||||
|
||||
type Request struct {
|
||||
Ctx *fiber.Ctx
|
||||
Session *session.Session
|
||||
Ctx *fiber.Ctx
|
||||
Session *session.Session
|
||||
UpdateSession bool
|
||||
|
||||
User *types.User
|
||||
userGetter UserGetter
|
||||
}
|
||||
|
||||
func updateSessionCookieExp(request *Request) {
|
||||
request.Session.SetExpiry(SESSION_EXPIRES)
|
||||
request.UpdateSession = true
|
||||
}
|
||||
|
||||
func NewRequest(ctx *fiber.Ctx, userGetter UserGetter) *Request {
|
||||
session, err := sessionStore.Get(ctx)
|
||||
if err != nil {
|
||||
@ -36,20 +43,29 @@ func NewRequest(ctx *fiber.Ctx, userGetter UserGetter) *Request {
|
||||
}
|
||||
|
||||
var user *types.User = nil
|
||||
var updateSession bool = false
|
||||
|
||||
if !session.Fresh() {
|
||||
userId := session.Get("userId")
|
||||
if userId != nil {
|
||||
user = userGetter.GetUserById(userId.(string))
|
||||
updateSession = true
|
||||
}
|
||||
}
|
||||
|
||||
return &Request{
|
||||
Ctx: ctx,
|
||||
Session: session,
|
||||
userGetter: userGetter,
|
||||
User: user,
|
||||
request := &Request{
|
||||
Ctx: ctx,
|
||||
Session: session,
|
||||
userGetter: userGetter,
|
||||
User: user,
|
||||
UpdateSession: updateSession,
|
||||
}
|
||||
|
||||
if updateSession {
|
||||
updateSessionCookieExp(request)
|
||||
}
|
||||
|
||||
return request
|
||||
}
|
||||
|
||||
func (r *Request) LoginUser(username string, password string) error {
|
||||
@ -61,10 +77,7 @@ func (r *Request) LoginUser(username string, password string) error {
|
||||
r.User = user
|
||||
|
||||
r.Session.Set("userId", r.User.Id)
|
||||
r.Session.SetExpiry(SESSION_EXPIRES)
|
||||
if err := r.Session.Save(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
updateSessionCookieExp(r)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -58,7 +58,15 @@ func requestMaker(handler handlers.RequestHandler) fiber.Handler {
|
||||
// wrap standard fiber handler and create request object
|
||||
return func(ctx *fiber.Ctx) error {
|
||||
request := requests.NewRequest(ctx, data.UsersStorage)
|
||||
return handler(request)
|
||||
response := handler(request)
|
||||
|
||||
if request.UpdateSession {
|
||||
if err := request.Session.Save(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
return response
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user