Ctrl K
ComunidadGuías…

internal/auth/claims.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package auth

import (
	"slices"
	"strings"
)

func usernameFrom(claims claimSet, keys []string) string {
	for _, key := range keys {
		text, ok := claims[key].(string)
		if ok && text != "" {
			return text
		}
	}
	return ""
}

func groupsFrom(claims claimSet, key string) []string {
	held, present := claims[key]
	if !present {
		return nil
	}
	switch value := held.(type) {
	case string:
		return ParseList(value)
	case []string:
		return slices.Clone(value)
	case []any:
		return stringsIn(value)
	default:
		return nil
	}
}

func stringsIn(values []any) []string {
	out := make([]string, 0, len(values))
	for _, one := range values {
		text, ok := one.(string)
		if !ok {
			continue
		}
		trimmed := strings.TrimSpace(text)
		if trimmed == "" {
			continue
		}
		out = append(out, trimmed)
	}
	return out
}

func prefixed(values []string, prefix string) []string {
	if prefix == "" {
		return values
	}
	out := make([]string, 0, len(values))
	for _, one := range values {
		out = append(out, prefix+one)
	}
	return out
}

func sessionIDFrom(claims claimSet) string {
	held, ok := claims["sid"].(string)
	if ok && held != "" {
		return held
	}
	return newSessionID()
}