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.
		
		
		
		
		
			
		
			
				
					
					
						
							77 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							77 lines
						
					
					
						
							1.9 KiB
						
					
					
				
								package memory
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"context"
							 | 
						|
									"fmt"
							 | 
						|
								
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/s3api/policy_engine"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								// GetPolicies retrieves all IAM policies from memory
							 | 
						|
								func (store *MemoryStore) GetPolicies(ctx context.Context) (map[string]policy_engine.PolicyDocument, error) {
							 | 
						|
									store.mu.RLock()
							 | 
						|
									defer store.mu.RUnlock()
							 | 
						|
								
							 | 
						|
									if !store.initialized {
							 | 
						|
										return nil, fmt.Errorf("store not initialized")
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									// Create a copy of the policies map to avoid mutation issues
							 | 
						|
									policies := make(map[string]policy_engine.PolicyDocument)
							 | 
						|
									for name, doc := range store.policies {
							 | 
						|
										policies[name] = doc
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									return policies, nil
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// GetPolicy retrieves a specific IAM policy by name from memory
							 | 
						|
								func (store *MemoryStore) GetPolicy(ctx context.Context, name string) (*policy_engine.PolicyDocument, error) {
							 | 
						|
									store.mu.RLock()
							 | 
						|
									defer store.mu.RUnlock()
							 | 
						|
								
							 | 
						|
									if policy, exists := store.policies[name]; exists {
							 | 
						|
										return &policy, nil
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									return nil, nil // Policy not found
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// CreatePolicy creates a new IAM policy in memory
							 | 
						|
								func (store *MemoryStore) CreatePolicy(ctx context.Context, name string, document policy_engine.PolicyDocument) error {
							 | 
						|
									store.mu.Lock()
							 | 
						|
									defer store.mu.Unlock()
							 | 
						|
								
							 | 
						|
									if !store.initialized {
							 | 
						|
										return fmt.Errorf("store not initialized")
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									store.policies[name] = document
							 | 
						|
									return nil
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// UpdatePolicy updates an existing IAM policy in memory
							 | 
						|
								func (store *MemoryStore) UpdatePolicy(ctx context.Context, name string, document policy_engine.PolicyDocument) error {
							 | 
						|
									store.mu.Lock()
							 | 
						|
									defer store.mu.Unlock()
							 | 
						|
								
							 | 
						|
									if !store.initialized {
							 | 
						|
										return fmt.Errorf("store not initialized")
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									store.policies[name] = document
							 | 
						|
									return nil
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// DeletePolicy deletes an IAM policy from memory
							 | 
						|
								func (store *MemoryStore) DeletePolicy(ctx context.Context, name string) error {
							 | 
						|
									store.mu.Lock()
							 | 
						|
									defer store.mu.Unlock()
							 | 
						|
								
							 | 
						|
									if !store.initialized {
							 | 
						|
										return fmt.Errorf("store not initialized")
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									delete(store.policies, name)
							 | 
						|
									return nil
							 | 
						|
								}
							 |