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.
		
		
		
		
		
			
		
			
				
					
					
						
							53 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							53 lines
						
					
					
						
							1.8 KiB
						
					
					
				| package sts | |
| 
 | |
| import ( | |
| 	"context" | |
| 	"fmt" | |
| 	"strings" | |
| 
 | |
| 	"github.com/seaweedfs/seaweedfs/weed/iam/providers" | |
| ) | |
| 
 | |
| // MockTrustPolicyValidator is a simple mock for testing STS functionality | |
| type MockTrustPolicyValidator struct{} | |
| 
 | |
| // ValidateTrustPolicyForWebIdentity allows valid JWT test tokens for STS testing | |
| func (m *MockTrustPolicyValidator) ValidateTrustPolicyForWebIdentity(ctx context.Context, roleArn string, webIdentityToken string) error { | |
| 	// Reject non-existent roles for testing | |
| 	if strings.Contains(roleArn, "NonExistentRole") { | |
| 		return fmt.Errorf("trust policy validation failed: role does not exist") | |
| 	} | |
| 
 | |
| 	// For STS unit tests, allow JWT tokens that look valid (contain dots for JWT structure) | |
| 	// In real implementation, this would validate against actual trust policies | |
| 	if len(webIdentityToken) > 20 && strings.Count(webIdentityToken, ".") >= 2 { | |
| 		// This appears to be a JWT token - allow it for testing | |
| 		return nil | |
| 	} | |
| 
 | |
| 	// Legacy support for specific test tokens during migration | |
| 	if webIdentityToken == "valid_test_token" || webIdentityToken == "valid-oidc-token" { | |
| 		return nil | |
| 	} | |
| 
 | |
| 	// Reject invalid tokens | |
| 	if webIdentityToken == "invalid_token" || webIdentityToken == "expired_token" || webIdentityToken == "invalid-token" { | |
| 		return fmt.Errorf("trust policy denies token") | |
| 	} | |
| 
 | |
| 	return nil | |
| } | |
| 
 | |
| // ValidateTrustPolicyForCredentials allows valid test identities for STS testing | |
| func (m *MockTrustPolicyValidator) ValidateTrustPolicyForCredentials(ctx context.Context, roleArn string, identity *providers.ExternalIdentity) error { | |
| 	// Reject non-existent roles for testing | |
| 	if strings.Contains(roleArn, "NonExistentRole") { | |
| 		return fmt.Errorf("trust policy validation failed: role does not exist") | |
| 	} | |
| 
 | |
| 	// For STS unit tests, allow test identities | |
| 	if identity != nil && identity.UserID != "" { | |
| 		return nil | |
| 	} | |
| 	return fmt.Errorf("invalid identity for role assumption") | |
| }
 |