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.
112 lines
3.9 KiB
112 lines
3.9 KiB
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"
|
|
)
|
|
|
|
// 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"`
|
|
}
|
|
|
|
// PolicyStatement represents a single policy statement in an IAM policy
|
|
type PolicyStatement struct {
|
|
Effect string `json:"Effect"`
|
|
Action []string `json:"Action"`
|
|
Resource []string `json:"Resource"`
|
|
}
|
|
|
|
// PolicyDocument represents an IAM policy document
|
|
type PolicyDocument struct {
|
|
Version string `json:"Version"`
|
|
Statement []*PolicyStatement `json:"Statement"`
|
|
}
|
|
|
|
// PolicyManager interface for managing IAM policies
|
|
type PolicyManager interface {
|
|
GetPolicies(ctx context.Context) (map[string]PolicyDocument, error)
|
|
CreatePolicy(ctx context.Context, name string, document PolicyDocument) error
|
|
UpdatePolicy(ctx context.Context, name string, document PolicyDocument) error
|
|
DeletePolicy(ctx context.Context, name string) error
|
|
GetPolicy(ctx context.Context, name string) (*PolicyDocument, error)
|
|
}
|
|
|
|
// Stores holds all available credential store implementations
|
|
var Stores []CredentialStore
|