mirror of https://gitlab.com/ngerakines/tavern.git
54 lines
1.5 KiB
Go
54 lines
1.5 KiB
Go
package web
|
|
|
|
import (
|
|
"github.com/gin-contrib/sessions"
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"github.com/ngerakines/tavern/errors"
|
|
"github.com/ngerakines/tavern/storage"
|
|
)
|
|
|
|
func (h handler) loggedIn(c *gin.Context, requireUser bool) (gin.H, *storage.User, sessions.Session, bool) {
|
|
session := sessions.Default(c)
|
|
ctx := c.Request.Context()
|
|
trans, transOK := c.Get("trans")
|
|
if !transOK {
|
|
panic(errors.NewTranslatorNotFoundError(nil))
|
|
}
|
|
data := gin.H{
|
|
"flashes": getFlashes(session),
|
|
"Trans": trans,
|
|
}
|
|
|
|
user, err := h.storage.GetUserBySession(ctx, session)
|
|
if requireUser && err != nil && errors.Is(err, errors.UserSessionNotFoundError{}) {
|
|
h.flashErrorOrFail(c, h.url(), errors.NewAuthenticationRequiredError(err))
|
|
return nil, nil, nil, false
|
|
} else if err != nil && !errors.Is(err, errors.UserSessionNotFoundError{}) {
|
|
h.hardFail(c, err)
|
|
return nil, nil, nil, false
|
|
}
|
|
|
|
if user != nil {
|
|
data["user"] = user
|
|
data["authenticated"] = true
|
|
}
|
|
|
|
return data, user, session, true
|
|
}
|
|
|
|
func (h handler) loggedInAPI(c *gin.Context, requireUser bool) (*storage.User, sessions.Session, bool) {
|
|
session := sessions.Default(c)
|
|
ctx := c.Request.Context()
|
|
|
|
user, err := h.storage.GetUserBySession(ctx, session)
|
|
if requireUser && err != nil && errors.Is(err, errors.UserSessionNotFoundError{}) {
|
|
h.flashErrorOrFail(c, h.url(), errors.NewAuthenticationRequiredError(err))
|
|
return nil, nil, false
|
|
} else if err != nil && !errors.Is(err, errors.UserSessionNotFoundError{}) {
|
|
h.hardFail(c, err)
|
|
return nil, nil, false
|
|
}
|
|
return user, session, true
|
|
}
|