package admin import ( "context" "crypto/rand" "crypto/sha256" "encoding/base64" "strings" "git.asio.asia/nixevol/NixMsg/internal/auth" ) // RandomAPITokens 生成真实 nxm_ 令牌(P3 合入前供 A1 使用)。 // 哈希为 SHA-256 原始字节,与 DEVELOPMENT 一致。 type RandomAPITokens struct{} // NewRandomAPITokens 返回可注入的 APITokens 实现。 func NewRandomAPITokens() *RandomAPITokens { return &RandomAPITokens{} } func (RandomAPITokens) Issue(_ context.Context) (string, []byte, error) { buf := make([]byte, 32) if _, err := rand.Read(buf); err != nil { return "", nil, err } tok := "nxm_" + base64.RawURLEncoding.EncodeToString(buf) sum := sha256.Sum256([]byte(tok)) return tok, sum[:], nil } func (RandomAPITokens) HashToken(token string) []byte { sum := sha256.Sum256([]byte(token)) return sum[:] } func (RandomAPITokens) LooksLikeAPIToken(credential string) bool { return strings.HasPrefix(credential, "nxm_") } var _ auth.APITokens = (*RandomAPITokens)(nil)