package token import ( "context" ) type ContextKey string func (c ContextKey) String() string { return string(c) } const ( KeyRole ContextKey = "role" KeyDeviceID ContextKey = "device_id" KeyScope ContextKey = "scope" KeyUID ContextKey = "uid" KeyLoginID ContextKey = "login_id" ) func UID(ctx context.Context) string { return getString(ctx, KeyUID) } func Scope(ctx context.Context) string { return getString(ctx, KeyScope) } func Role(ctx context.Context) string { return getString(ctx, KeyRole) } func DeviceID(ctx context.Context) string { return getString(ctx, KeyDeviceID) } func LoginID(ctx context.Context) string { return getString(ctx, KeyLoginID) } func WithUID(ctx context.Context, uid string) context.Context { return context.WithValue(ctx, KeyUID, uid) } func WithScope(ctx context.Context, scope string) context.Context { return context.WithValue(ctx, KeyScope, scope) } func WithRole(ctx context.Context, role string) context.Context { return context.WithValue(ctx, KeyRole, role) } func WithDeviceID(ctx context.Context, id string) context.Context { return context.WithValue(ctx, KeyDeviceID, id) } func WithLoginID(ctx context.Context, login string) context.Context { return context.WithValue(ctx, KeyLoginID, login) } // --- Internal helper --- func getString(ctx context.Context, key ContextKey) string { if v, ok := ctx.Value(key).(string); ok { return v } return "" }