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.
		
		
		
		
		
			
		
			
				
					
					
						
							100 lines
						
					
					
						
							3.6 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							100 lines
						
					
					
						
							3.6 KiB
						
					
					
				
								package credential
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"context"
							 | 
						|
									"errors"
							 | 
						|
									"time"
							 | 
						|
								
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/pb/iam_pb"
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/s3api/policy_engine"
							 | 
						|
									"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"`
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// PolicyManager interface for managing IAM policies
							 | 
						|
								type PolicyManager interface {
							 | 
						|
									GetPolicies(ctx context.Context) (map[string]policy_engine.PolicyDocument, error)
							 | 
						|
									CreatePolicy(ctx context.Context, name string, document policy_engine.PolicyDocument) error
							 | 
						|
									UpdatePolicy(ctx context.Context, name string, document policy_engine.PolicyDocument) error
							 | 
						|
									DeletePolicy(ctx context.Context, name string) error
							 | 
						|
									GetPolicy(ctx context.Context, name string) (*policy_engine.PolicyDocument, error)
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// Stores holds all available credential store implementations
							 | 
						|
								var Stores []CredentialStore
							 |