tavern/web/handler_auth.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
}