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.
80 lines
2.0 KiB
80 lines
2.0 KiB
package memory
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/credential"
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/iam_pb"
|
|
"github.com/seaweedfs/seaweedfs/weed/util"
|
|
)
|
|
|
|
func init() {
|
|
credential.Stores = append(credential.Stores, &MemoryStore{})
|
|
}
|
|
|
|
// MemoryStore implements CredentialStore using in-memory storage
|
|
// This is primarily intended for testing purposes
|
|
type MemoryStore struct {
|
|
mu sync.RWMutex
|
|
users map[string]*iam_pb.Identity // username -> identity
|
|
accessKeys map[string]string // access_key -> username
|
|
policies map[string]credential.PolicyDocument // policy_name -> policy_document
|
|
initialized bool
|
|
}
|
|
|
|
func (store *MemoryStore) GetName() credential.CredentialStoreTypeName {
|
|
return credential.StoreTypeMemory
|
|
}
|
|
|
|
func (store *MemoryStore) Initialize(configuration util.Configuration, prefix string) error {
|
|
store.mu.Lock()
|
|
defer store.mu.Unlock()
|
|
|
|
if store.initialized {
|
|
return nil
|
|
}
|
|
|
|
store.users = make(map[string]*iam_pb.Identity)
|
|
store.accessKeys = make(map[string]string)
|
|
store.policies = make(map[string]credential.PolicyDocument)
|
|
store.initialized = true
|
|
|
|
return nil
|
|
}
|
|
|
|
func (store *MemoryStore) Shutdown() {
|
|
store.mu.Lock()
|
|
defer store.mu.Unlock()
|
|
|
|
store.users = nil
|
|
store.accessKeys = nil
|
|
store.policies = nil
|
|
store.initialized = false
|
|
}
|
|
|
|
// Reset clears all data in the store (useful for testing)
|
|
func (store *MemoryStore) Reset() {
|
|
store.mu.Lock()
|
|
defer store.mu.Unlock()
|
|
|
|
if store.initialized {
|
|
store.users = make(map[string]*iam_pb.Identity)
|
|
store.accessKeys = make(map[string]string)
|
|
}
|
|
}
|
|
|
|
// GetUserCount returns the number of users in the store (useful for testing)
|
|
func (store *MemoryStore) GetUserCount() int {
|
|
store.mu.RLock()
|
|
defer store.mu.RUnlock()
|
|
|
|
return len(store.users)
|
|
}
|
|
|
|
// GetAccessKeyCount returns the number of access keys in the store (useful for testing)
|
|
func (store *MemoryStore) GetAccessKeyCount() int {
|
|
store.mu.RLock()
|
|
defer store.mu.RUnlock()
|
|
|
|
return len(store.accessKeys)
|
|
}
|