feat: add basic workings
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"orbits-server/internal/server/api/assets"
|
||||
"orbits-server/internal/server/database"
|
||||
"orbits-server/internal/shared/security"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
@@ -23,20 +24,6 @@ func NewKeyService(db *gorm.DB) *KeyService {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *KeyService) ListValidKeyHashes() ([]string, error) {
|
||||
keyRecords, err := database.ListKeys(s.db)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
hashList := make([]string, 0, len(keyRecords))
|
||||
for _, k := range keyRecords {
|
||||
hashList = append(hashList, k.KeyHash)
|
||||
}
|
||||
|
||||
return hashList, nil
|
||||
}
|
||||
|
||||
func (s *KeyService) Create(name string, expiresAt time.Time) (assets.KeyResponse, error) {
|
||||
keyContent := security.GenerateChars(accessKeyLen)
|
||||
|
||||
@@ -45,27 +32,55 @@ func (s *KeyService) Create(name string, expiresAt time.Time) (assets.KeyRespons
|
||||
return assets.KeyResponse{}, err
|
||||
}
|
||||
|
||||
keyRecord := database.BuildKeyRecord(hash, name, expiresAt)
|
||||
keyRecord, err := database.BuildKeyRecord(hash, name, expiresAt)
|
||||
if err != nil {
|
||||
return assets.KeyResponse{}, err
|
||||
}
|
||||
|
||||
if err := database.CreateKey(s.db, &keyRecord); err != nil {
|
||||
return assets.KeyResponse{}, err
|
||||
}
|
||||
|
||||
keyResponse := assets.KeyResponse{
|
||||
ID: keyRecord.ID,
|
||||
MetaName: keyRecord.MetaName,
|
||||
KeyName: keyRecord.KeyName,
|
||||
KeyContent: keyContent,
|
||||
CreatedAt: keyRecord.CreatedAt,
|
||||
UpdatedAt: keyRecord.UpdatedAt,
|
||||
ExpiresAt: keyRecord.ExpiresAt,
|
||||
ID: keyRecord.ID,
|
||||
MetaName: keyRecord.MetaName,
|
||||
KeyID: keyRecord.KeyID,
|
||||
KeySecret: keyContent,
|
||||
CreatedAt: keyRecord.CreatedAt,
|
||||
UpdatedAt: keyRecord.UpdatedAt,
|
||||
ExpiresAt: keyRecord.ExpiresAt,
|
||||
}
|
||||
|
||||
return keyResponse, nil
|
||||
}
|
||||
|
||||
func (s *KeyService) Validate(token string) bool {
|
||||
parts := strings.SplitN(token, ".", 2)
|
||||
if len(parts) != 2 {
|
||||
return false
|
||||
}
|
||||
|
||||
keyID := parts[0]
|
||||
secret := parts[1]
|
||||
|
||||
key, err := database.FindKeyByKeyID(s.db, keyID)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
if key.Revoked || time.Now().After(key.ExpiresAt) {
|
||||
return false
|
||||
}
|
||||
|
||||
if !security.CompareKey(key.KeyHash, secret) {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func (s *KeyService) DeleteByName(name string) error {
|
||||
keyRecord, err := database.FindKeyByName(s.db, name)
|
||||
keyRecord, err := database.FindKeyByKeyID(s.db, name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user