vibe-proxy/backend/sdk/cliproxy/auth/weight.go
2026-08-24 00:10:41 +02:00

49 lines
1.3 KiB
Go

package auth
import (
"fmt"
"strconv"
"github.com/router-for-me/CLIProxyAPI/v7/internal/credentialweight"
)
// ValidateAuthWeight validates every explicit credential weight source.
func ValidateAuthWeight(auth *Auth) error {
if auth == nil {
return nil
}
if rawWeight, ok := auth.Attributes[AttributeWeight]; ok {
if _, errParse := credentialweight.ParseString(rawWeight); errParse != nil {
return fmt.Errorf("invalid attributes weight: %w", errParse)
}
}
if rawWeight, ok := auth.Metadata[AttributeWeight]; ok {
if _, errParse := credentialweight.ParseValue(rawWeight); errParse != nil {
return fmt.Errorf("invalid metadata weight: %w", errParse)
}
}
return nil
}
// ApplyAuthWeightMetadata validates the auth and applies a source metadata weight.
func ApplyAuthWeightMetadata(auth *Auth, metadata map[string]any) error {
if errWeight := ValidateAuthWeight(auth); errWeight != nil {
return errWeight
}
if auth == nil || metadata == nil {
return nil
}
rawWeight, ok := metadata[AttributeWeight]
if !ok {
return nil
}
weight, errParse := credentialweight.ParseValue(rawWeight)
if errParse != nil {
return fmt.Errorf("invalid metadata weight: %w", errParse)
}
if auth.Attributes == nil {
auth.Attributes = make(map[string]string)
}
auth.Attributes[AttributeWeight] = strconv.FormatInt(weight, 10)
return nil
}