diff options
| author | Chris Lu <chrislusf@users.noreply.github.com> | 2025-07-02 18:03:17 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-02 18:03:17 -0700 |
| commit | 1db7c2b8aad59177f9ccb32f156908faf0c13eca (patch) | |
| tree | b1ea2df918591ab01822e3bd3ce08277825c47fb /weed/credential/credential_store.go | |
| parent | 6b706f9ccdf46046133c867c4240c4e8594da5b3 (diff) | |
| download | seaweedfs-1db7c2b8aad59177f9ccb32f156908faf0c13eca.tar.xz seaweedfs-1db7c2b8aad59177f9ccb32f156908faf0c13eca.zip | |
Add credential storage (#6938)
* add credential store interface
* load credential.toml
* lint
* create credentialManager with explicit store type
* add type name
* InitializeCredentialManager
* remove unused functions
* fix missing import
* fix import
* fix nil configuration
Diffstat (limited to 'weed/credential/credential_store.go')
| -rw-r--r-- | weed/credential/credential_store.go | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/weed/credential/credential_store.go b/weed/credential/credential_store.go new file mode 100644 index 000000000..60a86cfda --- /dev/null +++ b/weed/credential/credential_store.go @@ -0,0 +1,91 @@ +package credential + +import ( + "context" + "errors" + "time" + + "github.com/seaweedfs/seaweedfs/weed/pb/iam_pb" + "github.com/seaweedfs/seaweedfs/weed/util" +) + +var ( + ErrUserNotFound = errors.New("user not found") + ErrUserAlreadyExists = errors.New("user already exists") + ErrAccessKeyNotFound = errors.New("access key not found") +) + +// CredentialStoreTypeName represents the type name of a credential store +type CredentialStoreTypeName string + +// Credential store name constants +const ( + StoreTypeMemory CredentialStoreTypeName = "memory" + StoreTypeFilerEtc CredentialStoreTypeName = "filer_etc" + StoreTypePostgres CredentialStoreTypeName = "postgres" + StoreTypeSQLite CredentialStoreTypeName = "sqlite" +) + +// CredentialStore defines the interface for user credential storage and retrieval +type CredentialStore interface { + // GetName returns the name of the credential store implementation + GetName() CredentialStoreTypeName + + // Initialize initializes the credential store with configuration + Initialize(configuration util.Configuration, prefix string) error + + // LoadConfiguration loads the entire S3 API configuration + LoadConfiguration(ctx context.Context) (*iam_pb.S3ApiConfiguration, error) + + // SaveConfiguration saves the entire S3 API configuration + SaveConfiguration(ctx context.Context, config *iam_pb.S3ApiConfiguration) error + + // CreateUser creates a new user with the given identity + CreateUser(ctx context.Context, identity *iam_pb.Identity) error + + // GetUser retrieves a user by username + GetUser(ctx context.Context, username string) (*iam_pb.Identity, error) + + // UpdateUser updates an existing user + UpdateUser(ctx context.Context, username string, identity *iam_pb.Identity) error + + // DeleteUser removes a user by username + DeleteUser(ctx context.Context, username string) error + + // ListUsers returns all usernames + ListUsers(ctx context.Context) ([]string, error) + + // GetUserByAccessKey retrieves a user by access key + GetUserByAccessKey(ctx context.Context, accessKey string) (*iam_pb.Identity, error) + + // CreateAccessKey creates a new access key for a user + CreateAccessKey(ctx context.Context, username string, credential *iam_pb.Credential) error + + // DeleteAccessKey removes an access key for a user + DeleteAccessKey(ctx context.Context, username string, accessKey string) error + + // Shutdown performs cleanup when the store is being shut down + Shutdown() +} + +// AccessKeyInfo represents access key information with metadata +type AccessKeyInfo struct { + AccessKey string `json:"accessKey"` + SecretKey string `json:"secretKey"` + Username string `json:"username"` + CreatedAt time.Time `json:"createdAt"` +} + +// UserCredentials represents a user's credentials and metadata +type UserCredentials struct { + Username string `json:"username"` + Email string `json:"email"` + Account *iam_pb.Account `json:"account,omitempty"` + Credentials []*iam_pb.Credential `json:"credentials"` + Actions []string `json:"actions"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt time.Time `json:"updatedAt"` +} + +// Stores holds all available credential store implementations +var Stores []CredentialStore |
