You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.8 KiB
74 lines
1.8 KiB
package keyset |
|
|
|
// Store is the interface for persisting keysets. |
|
// Implement this interface for your database backend. |
|
type Store interface { |
|
// SaveKeyset persists a keyset. |
|
SaveKeyset(k *Keyset) error |
|
|
|
// LoadKeyset loads a keyset by ID. |
|
LoadKeyset(id string) (*Keyset, error) |
|
|
|
// ListActiveKeysets returns all keysets that can be used for signing. |
|
ListActiveKeysets() ([]*Keyset, error) |
|
|
|
// ListVerificationKeysets returns all keysets that can be used for verification. |
|
ListVerificationKeysets() ([]*Keyset, error) |
|
|
|
// DeleteKeyset removes a keyset from storage. |
|
DeleteKeyset(id string) error |
|
} |
|
|
|
// MemoryStore is an in-memory implementation of Store for testing. |
|
type MemoryStore struct { |
|
keysets map[string]*Keyset |
|
} |
|
|
|
// NewMemoryStore creates a new in-memory store. |
|
func NewMemoryStore() *MemoryStore { |
|
return &MemoryStore{ |
|
keysets: make(map[string]*Keyset), |
|
} |
|
} |
|
|
|
// SaveKeyset saves a keyset to memory. |
|
func (s *MemoryStore) SaveKeyset(k *Keyset) error { |
|
s.keysets[k.ID] = k |
|
return nil |
|
} |
|
|
|
// LoadKeyset loads a keyset by ID. |
|
func (s *MemoryStore) LoadKeyset(id string) (*Keyset, error) { |
|
if k, ok := s.keysets[id]; ok { |
|
return k, nil |
|
} |
|
return nil, nil |
|
} |
|
|
|
// ListActiveKeysets returns all active keysets. |
|
func (s *MemoryStore) ListActiveKeysets() ([]*Keyset, error) { |
|
result := make([]*Keyset, 0) |
|
for _, k := range s.keysets { |
|
if k.IsActiveForSigning() { |
|
result = append(result, k) |
|
} |
|
} |
|
return result, nil |
|
} |
|
|
|
// ListVerificationKeysets returns all keysets valid for verification. |
|
func (s *MemoryStore) ListVerificationKeysets() ([]*Keyset, error) { |
|
result := make([]*Keyset, 0) |
|
for _, k := range s.keysets { |
|
if k.IsValidForVerification() { |
|
result = append(result, k) |
|
} |
|
} |
|
return result, nil |
|
} |
|
|
|
// DeleteKeyset removes a keyset. |
|
func (s *MemoryStore) DeleteKeyset(id string) error { |
|
delete(s.keysets, id) |
|
return nil |
|
}
|
|
|