49 lines
990 B
Go
49 lines
990 B
Go
// Package contexts provides utilities for loading and extracting structs from contexts
|
|
package contexts
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.haelnorr.com/h/oslstats/internal/permissions"
|
|
"git.haelnorr.com/h/oslstats/internal/roles"
|
|
)
|
|
|
|
type Key string
|
|
|
|
func (c Key) String() string {
|
|
return "oslstats context key " + string(c)
|
|
}
|
|
|
|
var (
|
|
DevModeKey Key = Key("devmode")
|
|
PermissionCacheKey Key = Key("permissions")
|
|
)
|
|
|
|
func DevMode(ctx context.Context) DevInfo {
|
|
devmode, ok := ctx.Value(DevModeKey).(DevInfo)
|
|
if !ok {
|
|
return DevInfo{}
|
|
}
|
|
return devmode
|
|
}
|
|
|
|
type DevInfo struct {
|
|
WebsocketBase string
|
|
HTMXLog bool
|
|
}
|
|
|
|
// Permissions retrieves the permission cache from context (type-safe)
|
|
func Permissions(ctx context.Context) *PermissionCache {
|
|
cache, ok := ctx.Value(PermissionCacheKey).(*PermissionCache)
|
|
if !ok {
|
|
return nil
|
|
}
|
|
return cache
|
|
}
|
|
|
|
type PermissionCache struct {
|
|
Permissions map[permissions.Permission]bool
|
|
Roles map[roles.Role]bool
|
|
HasWildcard bool
|
|
}
|