feat: 实现管理鉴权、API 令牌与操作日志
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user