Files
Prism/internal/auth/apikey.go
T
renjue 9dfa7aa7c5
CI / docker (push) Successful in 4m28s
feat: Prism HTTP/SOCKS5 代理网关及管理台
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-23 15:37:02 +08:00

52 lines
1.0 KiB
Go

package auth
import (
"crypto/rand"
"crypto/sha256"
"encoding/hex"
"fmt"
"strings"
)
const APIKeyPrefix = "prism_"
func GenerateAPIKey() (string, error) {
var b [16]byte
if _, err := rand.Read(b[:]); err != nil {
return "", err
}
return APIKeyPrefix + hex.EncodeToString(b[:]), nil
}
func HashAPIKey(key string) string {
sum := sha256.Sum256([]byte(key))
return hex.EncodeToString(sum[:])
}
func APIKeyDisplayPrefix(key string) string {
key = strings.TrimSpace(key)
if len(key) <= 12 {
return key
}
return key[:12] + "…"
}
func IsAPIKeyFormat(key string) bool {
return strings.HasPrefix(strings.TrimSpace(key), APIKeyPrefix)
}
func ValidateAPIKeyFormat(key string) error {
key = strings.TrimSpace(key)
if !strings.HasPrefix(key, APIKeyPrefix) {
return fmt.Errorf("invalid api key format")
}
raw := strings.TrimPrefix(key, APIKeyPrefix)
if len(raw) != 32 {
return fmt.Errorf("invalid api key length")
}
if _, err := hex.DecodeString(raw); err != nil {
return fmt.Errorf("invalid api key encoding")
}
return nil
}