87 lines
2.1 KiB
Go
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)
|
|
}
|