Files
2025-07-19 17:54:34 -04:00

87 lines
2.1 KiB
Go

package contextutil
//Helpers for injecting and extracting data from request context
//TODO : Make a bit more generic when a contextKey is added and magically there are functions for it
import "context"
type contextKey string
const IsAuthenticatedCtxKey = contextKey("isAuthenticated")
const IsAdminCtxKey = contextKey("isAdmin")
const AuthenticateUserIDCtxKey = contextKey("authenticatedUserID")
const AuthenticatedUserNameCtxKey = contextKey("authenticatedUserName")
const CSRFTokenCtxKey = contextKey("CSRFToken")
func IsAuth(ctx context.Context) bool {
isAuthenticate, ok := ctx.Value(IsAuthenticatedCtxKey).(bool)
if !ok {
return false
}
return isAuthenticate
}
func IsAdmin(ctx context.Context) bool {
isAdmin, ok := ctx.Value(IsAdminCtxKey).(bool)
if !ok {
return false
}
return isAdmin
}
// Extract userName from ctx
func UserName(ctx context.Context) string {
userName, ok := ctx.Value(AuthenticatedUserNameCtxKey).(string)
if !ok {
return ""
}
return userName
}
// Extract userID from ctx
func UserID(ctx context.Context) int {
userID, ok := ctx.Value(AuthenticateUserIDCtxKey).(int)
if !ok {
return 0
}
return userID
}
func CSRFToken(ctx context.Context) string {
csrfToken, ok := ctx.Value(CSRFTokenCtxKey).(string)
if !ok {
return ""
}
return csrfToken
}
// Add isAuth to ctx and return
func WithIsAuth(ctx context.Context, isAuth bool) context.Context {
return context.WithValue(ctx, IsAuthenticatedCtxKey, isAuth)
}
// Add isAdmin to ctx and return
func WithIsAdmin(ctx context.Context, isAdmin bool) context.Context {
return context.WithValue(ctx, IsAdminCtxKey, isAdmin)
}
// Add CSRFTokent to ctx and return
func WithCSRFToken(ctx context.Context, token string) context.Context {
return context.WithValue(ctx, CSRFTokenCtxKey, token)
}
// Add AuthUserName to ctx and return
func WithAuthUserName(ctx context.Context, userName string) context.Context {
return context.WithValue(ctx, AuthenticatedUserNameCtxKey, userName)
}
// Add AuthUserID to ctx and return
func WithAuthUserID(ctx context.Context, userID int) context.Context {
return context.WithValue(ctx, AuthenticateUserIDCtxKey, userID)
}