75 lines
1.3 KiB
Go
Raw Normal View History

2023-02-12 23:13:04 +01:00
package domain
import (
"context"
2023-07-24 23:26:22 +02:00
"fmt"
2023-02-12 23:13:04 +01:00
"github.com/gin-gonic/gin"
)
const CtxUserInfo = "userInfo"
2023-07-24 21:00:45 +02:00
const (
CtxSystemAdminId = "_WG_SYS_ADMIN_"
CtxUnknownUserId = "_WG_SYS_UNKNOWN_"
)
2023-02-12 23:13:04 +01:00
type ContextUserInfo struct {
Id UserIdentifier
IsAdmin bool
}
2023-07-24 23:26:22 +02:00
func (u *ContextUserInfo) String() string {
return fmt.Sprintf("%s|%t", u.Id, u.IsAdmin)
}
func (u *ContextUserInfo) UserId() string {
return string(u.Id)
}
2023-02-12 23:13:04 +01:00
func DefaultContextUserInfo() *ContextUserInfo {
return &ContextUserInfo{
2023-07-24 21:00:45 +02:00
Id: CtxUnknownUserId,
2023-02-12 23:13:04 +01:00
IsAdmin: false,
}
}
2023-06-21 22:04:20 +02:00
func SystemAdminContextUserInfo() *ContextUserInfo {
return &ContextUserInfo{
2023-07-24 21:00:45 +02:00
Id: CtxSystemAdminId,
2023-06-21 22:04:20 +02:00
IsAdmin: true,
}
}
2023-02-12 23:13:04 +01:00
func SetUserInfoFromGin(c *gin.Context) context.Context {
ginUserInfo, exists := c.Get(CtxUserInfo)
info := DefaultContextUserInfo()
if exists {
if ginInfo, ok := ginUserInfo.(*ContextUserInfo); ok {
info = ginInfo
}
}
2023-06-21 22:04:20 +02:00
ctx := SetUserInfo(c.Request.Context(), info)
2023-02-12 23:13:04 +01:00
return ctx
}
func SetUserInfo(ctx context.Context, info *ContextUserInfo) context.Context {
ctx = context.WithValue(ctx, CtxUserInfo, info)
return ctx
}
func GetUserInfo(ctx context.Context) *ContextUserInfo {
rawInfo := ctx.Value(CtxUserInfo)
if rawInfo == nil {
return DefaultContextUserInfo()
}
if info, ok := rawInfo.(*ContextUserInfo); ok {
return info
}
return DefaultContextUserInfo()
}