up
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				Build Test Deploy / docs (push) Has been cancelled
				
			
		
			
				
	
				Build Test Deploy / deploy (push) Has been cancelled
				
			
		
			
				
	
				Build Test Deploy / build-test (push) Has been cancelled
				
			
		
			
				
	
				Build Test Deploy / authority-container (push) Has been cancelled
				
			
		
			
				
	
				Docs CI / lint-and-preview (push) Has been cancelled
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	Build Test Deploy / docs (push) Has been cancelled
				
			Build Test Deploy / deploy (push) Has been cancelled
				
			Build Test Deploy / build-test (push) Has been cancelled
				
			Build Test Deploy / authority-container (push) Has been cancelled
				
			Docs CI / lint-and-preview (push) Has been cancelled
				
			This commit is contained in:
		| @@ -17,6 +17,8 @@ using StellaOps.Authority.Storage.Mongo.Extensions; | ||||
| using StellaOps.Authority.Storage.Mongo.Initialization; | ||||
| using StellaOps.Authority.Storage.Mongo.Stores; | ||||
| using StellaOps.Feedser.Testing; | ||||
| using StellaOps.Authority.RateLimiting; | ||||
| using StellaOps.Cryptography.Audit; | ||||
| using Xunit; | ||||
|  | ||||
| namespace StellaOps.Authority.Tests.OpenIddict; | ||||
| @@ -55,7 +57,10 @@ public sealed class TokenPersistenceIntegrationTests | ||||
|             clientDescriptor: TestHelpers.CreateDescriptor(clientDocument)); | ||||
|  | ||||
|         var validateHandler = new ValidateClientCredentialsHandler(clientStore, registry, TestActivitySource, NullLogger<ValidateClientCredentialsHandler>.Instance); | ||||
|         var handleHandler = new HandleClientCredentialsHandler(registry, tokenStore, clock, TestActivitySource, NullLogger<HandleClientCredentialsHandler>.Instance); | ||||
|         var authSink = new TestAuthEventSink(); | ||||
|         var metadataAccessor = new TestRateLimiterMetadataAccessor(); | ||||
|         var handleHandler = new HandleClientCredentialsHandler(registry, TestActivitySource, authSink, metadataAccessor, clock, NullLogger<HandleClientCredentialsHandler>.Instance); | ||||
|         var persistHandler = new PersistTokensHandler(tokenStore, clock, TestActivitySource, NullLogger<PersistTokensHandler>.Instance); | ||||
|  | ||||
|         var transaction = TestHelpers.CreateTokenTransaction(clientDocument.ClientId, "s3cr3t!", scope: "jobs:trigger"); | ||||
|         transaction.Options.AccessTokenLifetime = TimeSpan.FromMinutes(15); | ||||
| @@ -72,6 +77,14 @@ public sealed class TokenPersistenceIntegrationTests | ||||
|         var tokenId = principal.GetClaim(OpenIddictConstants.Claims.JwtId); | ||||
|         Assert.False(string.IsNullOrWhiteSpace(tokenId)); | ||||
|  | ||||
|         var signInContext = new OpenIddictServerEvents.ProcessSignInContext(transaction) | ||||
|         { | ||||
|             Principal = principal, | ||||
|             AccessTokenPrincipal = principal | ||||
|         }; | ||||
|  | ||||
|         await persistHandler.HandleAsync(signInContext); | ||||
|  | ||||
|         var stored = await tokenStore.FindByTokenIdAsync(tokenId!, CancellationToken.None); | ||||
|         Assert.NotNull(stored); | ||||
|         Assert.Equal(clientDocument.ClientId, stored!.ClientId); | ||||
| @@ -133,7 +146,7 @@ public sealed class TokenPersistenceIntegrationTests | ||||
|         await tokenStore.InsertAsync(refreshToken, CancellationToken.None); | ||||
|  | ||||
|         var revokedAt = now.AddMinutes(1); | ||||
|         await tokenStore.UpdateStatusAsync(revokedTokenId, "revoked", revokedAt, CancellationToken.None); | ||||
|         await tokenStore.UpdateStatusAsync(revokedTokenId, "revoked", revokedAt, "manual", null, null, CancellationToken.None); | ||||
|  | ||||
|         var handler = new ValidateAccessTokenHandler( | ||||
|             tokenStore, | ||||
| @@ -173,7 +186,8 @@ public sealed class TokenPersistenceIntegrationTests | ||||
|         var stored = await tokenStore.FindByTokenIdAsync(revokedTokenId, CancellationToken.None); | ||||
|         Assert.NotNull(stored); | ||||
|         Assert.Equal("revoked", stored!.Status); | ||||
|        Assert.Equal(revokedAt, stored.RevokedAt); | ||||
|         Assert.Equal(revokedAt, stored.RevokedAt); | ||||
|         Assert.Equal("manual", stored.RevokedReason); | ||||
|     } | ||||
|  | ||||
|     private async Task ResetCollectionsAsync() | ||||
| @@ -206,3 +220,27 @@ public sealed class TokenPersistenceIntegrationTests | ||||
|         return provider; | ||||
|     } | ||||
| } | ||||
|  | ||||
| internal sealed class TestAuthEventSink : IAuthEventSink | ||||
| { | ||||
|     public List<AuthEventRecord> Records { get; } = new(); | ||||
|  | ||||
|     public ValueTask WriteAsync(AuthEventRecord record, CancellationToken cancellationToken) | ||||
|     { | ||||
|         Records.Add(record); | ||||
|         return ValueTask.CompletedTask; | ||||
|     } | ||||
| } | ||||
|  | ||||
| internal sealed class TestRateLimiterMetadataAccessor : IAuthorityRateLimiterMetadataAccessor | ||||
| { | ||||
|     private readonly AuthorityRateLimiterMetadata metadata = new(); | ||||
|  | ||||
|     public AuthorityRateLimiterMetadata? GetMetadata() => metadata; | ||||
|  | ||||
|     public void SetClientId(string? clientId) => metadata.ClientId = string.IsNullOrWhiteSpace(clientId) ? null : clientId; | ||||
|  | ||||
|     public void SetSubjectId(string? subjectId) => metadata.SubjectId = string.IsNullOrWhiteSpace(subjectId) ? null : subjectId; | ||||
|  | ||||
|     public void SetTag(string name, string? value) => metadata.SetTag(name, value); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user