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()
|
|
|
|
}
|