mirror of
https://github.com/lukaszraczylo/gohoarder.git
synced 2026-06-05 22:53:53 +00:00
39 lines
1.1 KiB
Go
39 lines
1.1 KiB
Go
package auth
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"encoding/hex"
|
|
"fmt"
|
|
)
|
|
|
|
// CredentialHasher generates hashes of credentials for cache keys
|
|
type CredentialHasher struct{}
|
|
|
|
// NewCredentialHasher creates a new credential hasher
|
|
func NewCredentialHasher() *CredentialHasher {
|
|
return &CredentialHasher{}
|
|
}
|
|
|
|
// Hash generates a short hash of credentials for use in cache keys
|
|
// Returns "public" if no credentials provided
|
|
func (h *CredentialHasher) Hash(credentials string) string {
|
|
if credentials == "" {
|
|
return "public"
|
|
}
|
|
|
|
// Use SHA256 and take first 16 characters (8 bytes)
|
|
hash := sha256.Sum256([]byte(credentials))
|
|
return hex.EncodeToString(hash[:8])
|
|
}
|
|
|
|
// GenerateCacheKey generates a cache key that includes credential hash
|
|
func (h *CredentialHasher) GenerateCacheKey(registry, packageName, version, credentials string) string {
|
|
credHash := h.Hash(credentials)
|
|
return fmt.Sprintf("%s:%s:%s:%s", registry, packageName, version, credHash)
|
|
}
|
|
|
|
// IsPublicKey checks if a cache key is for public packages (no credentials)
|
|
func (h *CredentialHasher) IsPublicKey(cacheKey string) bool {
|
|
return len(cacheKey) > 0 && cacheKey[len(cacheKey)-6:] == "public"
|
|
}
|