diff --git a/NuGet.AzDO.config b/NuGet.AzDO.config
index c9581ab..95e879e 100644
--- a/NuGet.AzDO.config
+++ b/NuGet.AzDO.config
@@ -1,8 +1,6 @@
-
+
-
-
-
\ No newline at end of file
+
diff --git a/RSK.IdentityServer4.AuditEventSink.sln b/RSK.IdentityServer4.AuditEventSink.sln
index 8cd2259..2a4c179 100644
--- a/RSK.IdentityServer4.AuditEventSink.sln
+++ b/RSK.IdentityServer4.AuditEventSink.sln
@@ -3,12 +3,8 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28306.52
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Rsk.IdentityServer4.AuditEventSink", "src\RSK.IdentityServer4.AuditEventSink\RSK.IdentityServer4.AuditEventSink.csproj", "{E752B37B-6562-4DC5-8657-620FE569905A}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{4AD87BDC-20A4-4426-80E4-0706AA9D8294}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RSK.IdentityServer4.AuditEventSink.Tests", "tests\Rsk.IdentityServer4.AuditEventSink.Tests\RSK.IdentityServer4.AuditEventSink.Tests.csproj", "{90720013-B304-4B49-A174-0C840E218A26}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{0F18CE73-394B-4E63-8791-E6FDD93581AC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rsk.DuendeIdentityServer.AuditEventSink", "src\Rsk.DuendeIdentityServer.AuditEventSink\Rsk.DuendeIdentityServer.AuditEventSink.csproj", "{28F49BF0-75B5-40D1-91D8-E701072F17CA}"
@@ -31,14 +27,6 @@ Global
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {E752B37B-6562-4DC5-8657-620FE569905A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E752B37B-6562-4DC5-8657-620FE569905A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E752B37B-6562-4DC5-8657-620FE569905A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E752B37B-6562-4DC5-8657-620FE569905A}.Release|Any CPU.Build.0 = Release|Any CPU
- {90720013-B304-4B49-A174-0C840E218A26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {90720013-B304-4B49-A174-0C840E218A26}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {90720013-B304-4B49-A174-0C840E218A26}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {90720013-B304-4B49-A174-0C840E218A26}.Release|Any CPU.Build.0 = Release|Any CPU
{28F49BF0-75B5-40D1-91D8-E701072F17CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{28F49BF0-75B5-40D1-91D8-E701072F17CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{28F49BF0-75B5-40D1-91D8-E701072F17CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -72,8 +60,6 @@ Global
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
- {90720013-B304-4B49-A174-0C840E218A26} = {4AD87BDC-20A4-4426-80E4-0706AA9D8294}
- {E752B37B-6562-4DC5-8657-620FE569905A} = {0F18CE73-394B-4E63-8791-E6FDD93581AC}
{28F49BF0-75B5-40D1-91D8-E701072F17CA} = {0F18CE73-394B-4E63-8791-E6FDD93581AC}
{84B20BBC-743D-47CB-A8E2-5B642005C7B4} = {4AD87BDC-20A4-4426-80E4-0706AA9D8294}
{7E77BD90-9720-449D-95C9-74F52ED47CFD} = {0F18CE73-394B-4E63-8791-E6FDD93581AC}
diff --git a/azure-pipelines.duende-identity-server.yml b/azure-pipelines.duende-identity-server.yml
new file mode 100644
index 0000000..c48df68
--- /dev/null
+++ b/azure-pipelines.duende-identity-server.yml
@@ -0,0 +1,83 @@
+variables:
+- name: buildConfiguration
+ value: 'Release'
+- name: identityPackageVersion
+ value: '5.0.0.0'
+
+stages:
+- stage: Build
+ jobs:
+ - job: BuildDuendeIdentityServer
+ strategy:
+ matrix:
+ linux:
+ imageName: 'ubuntu-latest'
+ shouldPack: true
+ mac:
+ imageName: 'macOS-latest'
+ shouldPack: true
+ windows:
+ imageName: 'windows-latest'
+ shouldPack: true
+ pool:
+ vmImage: $(imageName)
+ steps:
+ - task: UseDotNet@2
+ displayName: Install .NET Core sdk version 10.x
+ inputs:
+ packageType: sdk
+ version: 10.x
+ installationPath: $(Agent.ToolsDirectory)/dotnet
+ - task: NuGetToolInstaller@0
+ inputs:
+ versionSpec: 5.4.0
+ - task: DotNetCoreCLI@2
+ displayName: 'Dotnet restore'
+ inputs:
+ command: 'restore'
+ projects: 'src/Rsk.DuendeIdentityServer.AuditEventSink/Rsk.DuendeIdentityServer.AuditEventSink.csproj'
+ feedsToUse: 'config'
+ nugetConfigPath: $(System.DefaultWorkingDirectory)/NuGet.AzDO.config
+ - task: DotNetCoreCLI@2
+ displayName: dotnet build src/Rsk.DuendeIdentityServer.AuditEventSink/Rsk.DuendeIdentityServer.AuditEventSink.csproj
+ inputs:
+ command: 'build'
+ projects: 'src/Rsk.DuendeIdentityServer.AuditEventSink/Rsk.DuendeIdentityServer.AuditEventSink.csproj'
+ arguments: -c $(buildConfiguration) --no-restore /p:Version="$(identityPackageVersion)"
+ - task: DotNetCoreCLI@2
+ displayName: dotnet test - Run Duende IdentityServer Tests
+ inputs:
+ command: 'test'
+ projects: 'tests/Rsk.DuendeIdentityServer.AuditEventSink.Tests/Rsk.DuendeIdentityServer.AuditEventSink.Tests.csproj'
+ arguments: -c $(buildConfiguration) --no-restore
+ - task: DotNetCoreCLI@2
+ displayName: Package Rsk.DuendeIdentityServer.AuditEventSink.csproj for Nuget
+ inputs:
+ command: 'pack'
+ packagesToPack: 'src/Rsk.DuendeIdentityServer.AuditEventSink/Rsk.DuendeIdentityServer.AuditEventSink.csproj'
+ nobuild: true
+ includesymbols: true
+ versionEnvVar: identityPackageVersion
+ versioningScheme: 'byEnvVar'
+ verbosityPack: 'Normal'
+ outputDir: '$(Build.ArtifactStagingDirectory)'
+ - task: PublishBuildArtifacts@1
+ condition: and(succeeded(), eq(variables['shouldPack'], true))
+ displayName: Publish Duende IdentityServer artifacts
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)'
+ ArtifactName: 'Rsk.DuendeIdentityServer.AuditEventSink nupkg'
+ publishLocation: 'Container'
+
+- stage: Publish
+ dependsOn: Build
+ condition: succeeded()
+ jobs:
+ - job: PublishNuGet
+ pool:
+ vmImage: 'ubuntu-latest'
+ steps:
+ - template: templates/publish-nuget.yml
+ parameters:
+ artifact: 'Rsk.DuendeIdentityServer.AuditEventSink nupkg'
+ packageToPublish: '$(Pipeline.Workspace)/Rsk.DuendeIdentityServer.AuditEventSink nupkg/*.nupkg'
diff --git a/azure-pipelines.rsk-audit-ef.yml b/azure-pipelines.rsk-audit-ef.yml
new file mode 100644
index 0000000..c2cd2bd
--- /dev/null
+++ b/azure-pipelines.rsk-audit-ef.yml
@@ -0,0 +1,83 @@
+variables:
+- name: buildConfiguration
+ value: 'Release'
+- name: efPackageVersion
+ value: '4.0.0.0'
+
+stages:
+- stage: Build
+ jobs:
+ - job: BuildRskAuditEF
+ strategy:
+ matrix:
+ linux:
+ imageName: 'ubuntu-latest'
+ shouldPack: true
+ mac:
+ imageName: 'macOS-latest'
+ shouldPack: true
+ windows:
+ imageName: 'windows-latest'
+ shouldPack: true
+ pool:
+ vmImage: $(imageName)
+ steps:
+ - task: UseDotNet@2
+ displayName: Install .NET Core sdk version 10.x
+ inputs:
+ packageType: sdk
+ version: 10.x
+ installationPath: $(Agent.ToolsDirectory)/dotnet
+ - task: NuGetToolInstaller@0
+ inputs:
+ versionSpec: 5.4.0
+ - task: DotNetCoreCLI@2
+ displayName: 'Dotnet restore'
+ inputs:
+ command: 'restore'
+ projects: 'src/Rsk.Audit.EF/Rsk.Audit.EF.csproj'
+ feedsToUse: 'config'
+ nugetConfigPath: $(System.DefaultWorkingDirectory)/NuGet.AzDO.config
+ - task: DotNetCoreCLI@2
+ displayName: dotnet build src/Rsk.Audit.EF/Rsk.Audit.EF.csproj
+ inputs:
+ command: 'build'
+ projects: 'src/Rsk.Audit.EF/Rsk.Audit.EF.csproj'
+ arguments: -c $(buildConfiguration) --no-restore /p:Version="$(efPackageVersion)"
+ - task: DotNetCoreCLI@2
+ displayName: dotnet test - Run Rsk.Audit.EF Tests
+ inputs:
+ command: 'test'
+ projects: 'tests/Rsk.Audit.Tests.Integration/Rsk.Audit.Tests.Integration.csproj'
+ arguments: -c $(buildConfiguration) --no-restore
+ - task: DotNetCoreCLI@2
+ displayName: Package Rsk.Audit.EF.csproj for Nuget
+ inputs:
+ command: 'pack'
+ packagesToPack: 'src/Rsk.Audit.EF/Rsk.Audit.EF.csproj'
+ nobuild: true
+ includesymbols: true
+ versionEnvVar: efPackageVersion
+ versioningScheme: 'byEnvVar'
+ verbosityPack: 'Normal'
+ outputDir: '$(Build.ArtifactStagingDirectory)'
+ - task: PublishBuildArtifacts@1
+ condition: and(succeeded(), eq(variables['shouldPack'], true))
+ displayName: Publish Rsk.Audit.EF artifacts
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)'
+ ArtifactName: 'Rsk.Audit.EF nupkg'
+ publishLocation: 'Container'
+
+- stage: Publish
+ dependsOn: Build
+ condition: succeeded()
+ jobs:
+ - job: PublishNuGet
+ pool:
+ vmImage: 'ubuntu-latest'
+ steps:
+ - template: templates/publish-nuget.yml
+ parameters:
+ artifact: 'Rsk.Audit.EF nupkg'
+ packageToPublish: '$(Pipeline.Workspace)/Rsk.Audit.EF nupkg/*.nupkg'
diff --git a/azure-pipelines.rsk-audit.yml b/azure-pipelines.rsk-audit.yml
new file mode 100644
index 0000000..ee61ab5
--- /dev/null
+++ b/azure-pipelines.rsk-audit.yml
@@ -0,0 +1,83 @@
+variables:
+- name: buildConfiguration
+ value: 'Release'
+- name: packageVersion
+ value: '4.0.0.0'
+
+stages:
+- stage: Build
+ jobs:
+ - job: BuildRskAudit
+ strategy:
+ matrix:
+ linux:
+ imageName: 'ubuntu-latest'
+ shouldPack: true
+ mac:
+ imageName: 'macOS-latest'
+ shouldPack: true
+ windows:
+ imageName: 'windows-latest'
+ shouldPack: true
+ pool:
+ vmImage: $(imageName)
+ steps:
+ - task: UseDotNet@2
+ displayName: Install .NET Core sdk version 10.x
+ inputs:
+ packageType: sdk
+ version: 10.x
+ installationPath: $(Agent.ToolsDirectory)/dotnet
+ - task: NuGetToolInstaller@0
+ inputs:
+ versionSpec: 5.4.0
+ - task: DotNetCoreCLI@2
+ displayName: 'Dotnet restore'
+ inputs:
+ command: 'restore'
+ projects: 'src/Rsk.Audit/Rsk.Audit.csproj'
+ feedsToUse: 'config'
+ nugetConfigPath: $(System.DefaultWorkingDirectory)/NuGet.AzDO.config
+ - task: DotNetCoreCLI@2
+ displayName: dotnet build src/Rsk.Audit/Rsk.Audit.csproj
+ inputs:
+ command: 'build'
+ projects: 'src/Rsk.Audit/Rsk.Audit.csproj'
+ arguments: -c $(buildConfiguration) --no-restore /p:Version="$(packageVersion)"
+ - task: DotNetCoreCLI@2
+ displayName: dotnet test - Run Rsk.Audit Tests
+ inputs:
+ command: 'test'
+ projects: 'tests/Rsk.Audit.Tests/Rsk.Audit.Tests.csproj'
+ arguments: -c $(buildConfiguration) --no-restore
+ - task: DotNetCoreCLI@2
+ displayName: Package Rsk.Audit.csproj for Nuget
+ inputs:
+ command: 'pack'
+ packagesToPack: 'src/Rsk.Audit/Rsk.Audit.csproj'
+ nobuild: true
+ includesymbols: true
+ versionEnvVar: packageVersion
+ versioningScheme: 'byEnvVar'
+ verbosityPack: 'Normal'
+ outputDir: '$(Build.ArtifactStagingDirectory)'
+ - task: PublishBuildArtifacts@1
+ condition: and(succeeded(), eq(variables['shouldPack'], true))
+ displayName: Publish Rsk.Audit artifacts
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)'
+ ArtifactName: 'Rsk.Audit nupkg'
+ publishLocation: 'Container'
+
+- stage: Publish
+ dependsOn: Build
+ condition: succeeded()
+ jobs:
+ - job: PublishNuGet
+ pool:
+ vmImage: 'ubuntu-latest'
+ steps:
+ - template: templates/publish-nuget.yml
+ parameters:
+ artifact: 'Rsk.Audit nupkg'
+ packageToPublish: '$(Pipeline.Workspace)/Rsk.Audit nupkg/*.nupkg'
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index bf97994..f8c4dee 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -7,50 +7,27 @@ variables:
- name: buildConfiguration
value: 'Release'
- name: packageVersion
- value: '3.0.0.0'
+ value: '4.0.0.0'
- name: efPackageVersion
- value: '3.0.0.0'
+ value: '4.0.0.0'
- name: identityPackageVersion
- value: '4.1.0.0'
-- name: RunSqlServerTest
- value: 'true'
+ value: '5.0.0.0'
+
stages:
-- stage: __default
+- stage: Build
jobs:
- - job: ''
+ - job: BuildAllProjects
strategy:
matrix:
linux:
imageName: 'ubuntu-latest'
- shouldPack: true
mac:
imageName: 'macOS-latest'
- shouldPack: true
windows:
imageName: 'windows-latest'
- shouldPack: true
pool:
vmImage: $(imageName)
steps:
- - task: Bash@3
- displayName: Create LocalNuget folder
- inputs:
- targetType: inline
- script: |
- mkdir LocalNuget
- workingDirectory: $(Build.SourcesDirectory)
- - task: UseDotNet@2
- displayName: Install .NET Core sdk version 8.x
- inputs:
- packageType: sdk
- version: 8.x
- installationPath: $(Agent.ToolsDirectory)/dotnet
- - task: UseDotNet@2
- displayName: Install .NET Core sdk version 9.x
- inputs:
- packageType: sdk
- version: 9.x
- installationPath: $(Agent.ToolsDirectory)/dotnet
- task: UseDotNet@2
displayName: Install .NET Core sdk version 10.x
inputs:
@@ -68,80 +45,26 @@ stages:
feedsToUse: 'config'
nugetConfigPath: $(System.DefaultWorkingDirectory)/NuGet.AzDO.config
- task: DotNetCoreCLI@2
- displayName: dotnet build **/Rsk.Audit.csproj
+ displayName: dotnet build Rsk.Audit.csproj
inputs:
command: 'build'
projects: '**/Rsk.Audit.csproj'
arguments: -c $(buildConfiguration) --no-restore /p:Version="$(packageVersion)"
- task: DotNetCoreCLI@2
- displayName: dotnet build **/Rsk.Audit.EF.csproj
+ displayName: dotnet build Rsk.Audit.EF.csproj
inputs:
command: 'build'
projects: '**/Rsk.Audit.EF.csproj'
arguments: -c $(buildConfiguration) --no-restore /p:Version="$(efPackageVersion)"
- task: DotNetCoreCLI@2
- displayName: dotnet build **/Rsk.DuendeIdentityServer.AuditEventSink.csproj
+ displayName: dotnet build Rsk.DuendeIdentityServer.AuditEventSink.csproj
inputs:
command: 'build'
projects: '**/Rsk.DuendeIdentityServer.AuditEventSink.csproj'
arguments: -c $(buildConfiguration) --no-restore /p:Version="$(identityPackageVersion)"
- - task: DotNetCoreCLI@2
- displayName: dotnet build **/RSK.IdentityServer4.AuditEventSink.csproj
- inputs:
- command: 'build'
- projects: '**/RSK.IdentityServer4.AuditEventSink.csproj'
- arguments: -c $(buildConfiguration) --no-restore"
- task: DotNetCoreCLI@2
displayName: dotnet test - Run All Tests
inputs:
command: 'test'
projects: '**/*Tests*.csproj'
- arguments: -c $(buildConfiguration) --no-restore"
- - task: DotNetCoreCLI@2
- displayName: Package **/Rsk.Audit.csproj for Nuget
- inputs:
- command: 'pack'
- packagesToPack: '**/Rsk.Audit.csproj'
- nobuild: true
- includesymbols: true
- versionEnvVar: packageVersion
- versioningScheme: 'byEnvVar'
- verbosityPack: 'Normal'
- outputDir: LocalNuget
- - task: DotNetCoreCLI@2
- displayName: Package **/Rsk.Audit.EF.csproj for Nuget
- inputs:
- command: 'pack'
- packagesToPack: '**/Rsk.Audit.EF.csproj'
- nobuild: true
- includesymbols: true
- versionEnvVar: efPackageVersion
- versioningScheme: 'byEnvVar'
- verbosityPack: 'Normal'
- outputDir: LocalNuget
- - task: DotNetCoreCLI@2
- displayName: Package **/Rsk.DuendeIdentityServer.AuditEventSink.csproj for Nuget
- inputs:
- command: 'pack'
- packagesToPack: '**/Rsk.DuendeIdentityServer.AuditEventSink.csproj'
- nobuild: true
- includesymbols: true
- versionEnvVar: identityPackageVersion
- versioningScheme: 'byEnvVar'
- verbosityPack: 'Normal'
- outputDir: LocalNuget
- - task: CopyFiles@2
- condition: and(succeeded(), eq(variables['shouldPack'], true))
- displayName: 'Copy nupkg to artifact directory'
- inputs:
- Contents: 'LocalNuget/*.nupkg'
- TargetFolder: '$(Build.ArtifactStagingDirectory)'
- CleanTargetFolder: true
- flattenFolders: true
- - task: PublishBuildArtifacts@1
- condition: and(succeeded(), eq(variables['shouldPack'], true))
- displayName: Publish Audit artifacts
- inputs:
- PathtoPublish: '$(Build.ArtifactStagingDirectory)'
- ArtifactName: Audit nupkg
- publishLocation: 'Container'
\ No newline at end of file
+ arguments: -c $(buildConfiguration) --no-restore
\ No newline at end of file
diff --git a/src/RSK.IdentityServer4.AuditEventSink/AdapterFactory.cs b/src/RSK.IdentityServer4.AuditEventSink/AdapterFactory.cs
deleted file mode 100644
index 6c0b487..0000000
--- a/src/RSK.IdentityServer4.AuditEventSink/AdapterFactory.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using IdentityServer4.Events;
-using RSK.Audit;
-using RSK.IdentityServer4.AuditEventSink.Adapters;
-
-namespace RSK.IdentityServer4.AuditEventSink
-{
- public class AdapterFactory : IAdapterFactory
- {
- public IAuditEventArguments Create(Event evt)
- {
- if (evt != null)
- {
- switch (evt)
- {
- case TokenIssuedSuccessEvent tokenIssuedSuccessEvent:
- return new TokenIssuedSuccessEventAdapter(tokenIssuedSuccessEvent);
- case UserLoginSuccessEvent userLoginSuccess:
- return new UserLoginSuccessEventAdapter(userLoginSuccess);
- case UserLoginFailureEvent userLoginFailure:
- return new UserLoginFailureEventAdapter(userLoginFailure);
- case UserLogoutSuccessEvent userLogoutSuccess:
- return new UserLogoutSuccessEventAdapter(userLogoutSuccess);
- case ConsentGrantedEvent consentGranted:
- return new ConsentGrantedEventAdapter(consentGranted);
- case ConsentDeniedEvent consentDenied:
- return new ConsentDeniedEventAdapter(consentDenied);
- case TokenIssuedFailureEvent tokenIssuedFailure:
- return new TokenIssuedFailureEventAdapter(tokenIssuedFailure);
- case GrantsRevokedEvent grantsRevoked:
- return new GrantsRevokedEventAdapter(grantsRevoked);
- }
- }
-
- return null;
- }
- }
-}
diff --git a/src/RSK.IdentityServer4.AuditEventSink/Adapters/ConsentDeniedEventAdapter.cs b/src/RSK.IdentityServer4.AuditEventSink/Adapters/ConsentDeniedEventAdapter.cs
deleted file mode 100644
index 79b338d..0000000
--- a/src/RSK.IdentityServer4.AuditEventSink/Adapters/ConsentDeniedEventAdapter.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System;
-using IdentityServer4.Events;
-using RSK.Audit;
-
-namespace RSK.IdentityServer4.AuditEventSink.Adapters
-{
- public class ConsentDeniedEventAdapter : IAuditEventArguments
- {
- private readonly ConsentDeniedEvent evt;
-
- public ConsentDeniedEventAdapter(ConsentDeniedEvent evt)
- {
- this.evt = evt ?? throw new ArgumentNullException(nameof(evt));
- }
-
- public ResourceActor Actor => new ResourceActor(ResourceActor.UserSubjectType, evt.SubjectId, evt.SubjectId);
- public string Action => evt.Name;
- public AuditableResource Resource => new AuditableResource("Client", evt.ClientId);
- public FormattedString Description => evt.ToString().SafeForFormatted();
- }
-}
diff --git a/src/RSK.IdentityServer4.AuditEventSink/Adapters/ConsentGrantedEventAdapter.cs b/src/RSK.IdentityServer4.AuditEventSink/Adapters/ConsentGrantedEventAdapter.cs
deleted file mode 100644
index e1e2e72..0000000
--- a/src/RSK.IdentityServer4.AuditEventSink/Adapters/ConsentGrantedEventAdapter.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using IdentityServer4.Events;
-using RSK.Audit;
-
-namespace RSK.IdentityServer4.AuditEventSink.Adapters
-{
- public class ConsentGrantedEventAdapter : IAuditEventArguments
- {
- private readonly ConsentGrantedEvent evt;
-
- public ConsentGrantedEventAdapter(ConsentGrantedEvent evt)
- {
- this.evt = evt;
- }
-
- public ResourceActor Actor => new ResourceActor(ResourceActor.UserSubjectType, evt.SubjectId, evt.SubjectId);
- public string Action => evt.Name;
- public AuditableResource Resource => new AuditableResource("Client", evt.ClientId);
- public FormattedString Description => evt.ToString().SafeForFormatted();
- }
-}
diff --git a/src/RSK.IdentityServer4.AuditEventSink/Adapters/GrantsRevokedEventAdapter.cs b/src/RSK.IdentityServer4.AuditEventSink/Adapters/GrantsRevokedEventAdapter.cs
deleted file mode 100644
index ef33308..0000000
--- a/src/RSK.IdentityServer4.AuditEventSink/Adapters/GrantsRevokedEventAdapter.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System;
-using IdentityServer4.Events;
-using RSK.Audit;
-
-namespace RSK.IdentityServer4.AuditEventSink.Adapters
-{
- public class GrantsRevokedEventAdapter : IAuditEventArguments
- {
- private readonly GrantsRevokedEvent evt;
-
- public GrantsRevokedEventAdapter(GrantsRevokedEvent evt)
- {
- this.evt = evt ?? throw new ArgumentNullException(nameof(evt));
- }
-
- public ResourceActor Actor => new ResourceActor(ResourceActor.UserSubjectType, evt.SubjectId, evt.SubjectId);
- public string Action => evt.Name;
- public AuditableResource Resource => new AuditableResource("Client", evt.ClientId);
- public FormattedString Description => evt.ToString().SafeForFormatted();
- }
-}
diff --git a/src/RSK.IdentityServer4.AuditEventSink/Adapters/TokenIssuedFailureEventAdapter.cs b/src/RSK.IdentityServer4.AuditEventSink/Adapters/TokenIssuedFailureEventAdapter.cs
deleted file mode 100644
index a18482a..0000000
--- a/src/RSK.IdentityServer4.AuditEventSink/Adapters/TokenIssuedFailureEventAdapter.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System;
-using IdentityServer4.Events;
-using RSK.Audit;
-
-namespace RSK.IdentityServer4.AuditEventSink.Adapters
-{
- public class TokenIssuedFailureEventAdapter : IAuditEventArguments
- {
- private readonly TokenIssuedFailureEvent evt;
-
- public TokenIssuedFailureEventAdapter(TokenIssuedFailureEvent evt)
- {
- this.evt = evt ?? throw new ArgumentNullException(nameof(evt));
- }
-
- public ResourceActor Actor => new ResourceActor(ResourceActor.MachineSubjectType, evt.ClientId, evt.ClientName);
- public string Action => evt.Name;
- public AuditableResource Resource => new AuditableResource("IdentityServer", evt.Endpoint);
- public FormattedString Description => evt.ToString().SafeForFormatted();
- }
-}
diff --git a/src/RSK.IdentityServer4.AuditEventSink/Adapters/TokenIssuedSuccessEventAdapter.cs b/src/RSK.IdentityServer4.AuditEventSink/Adapters/TokenIssuedSuccessEventAdapter.cs
deleted file mode 100644
index eb77e74..0000000
--- a/src/RSK.IdentityServer4.AuditEventSink/Adapters/TokenIssuedSuccessEventAdapter.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System;
-using IdentityServer4.Events;
-using RSK.Audit;
-
-namespace RSK.IdentityServer4.AuditEventSink.Adapters
-{
- public class TokenIssuedSuccessEventAdapter : IAuditEventArguments
- {
- private readonly TokenIssuedSuccessEvent evt;
-
- public TokenIssuedSuccessEventAdapter(TokenIssuedSuccessEvent evt)
- {
- this.evt = evt ?? throw new ArgumentNullException(nameof(evt));
- }
-
- public ResourceActor Actor => new ResourceActor(ResourceActor.MachineSubjectType, evt.ClientId, evt.ClientName);
- public string Action => evt.Name;
- public AuditableResource Resource => new AuditableResource("IdentityServer", evt.Endpoint);
- public FormattedString Description => evt.ToString().SafeForFormatted();
- }
-}
diff --git a/src/RSK.IdentityServer4.AuditEventSink/Adapters/UserLoginFailureEventAdapter.cs b/src/RSK.IdentityServer4.AuditEventSink/Adapters/UserLoginFailureEventAdapter.cs
deleted file mode 100644
index f65058a..0000000
--- a/src/RSK.IdentityServer4.AuditEventSink/Adapters/UserLoginFailureEventAdapter.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System;
-using IdentityServer4.Events;
-using RSK.Audit;
-
-namespace RSK.IdentityServer4.AuditEventSink.Adapters
-{
- public class UserLoginFailureEventAdapter : IAuditEventArguments
- {
- private readonly UserLoginFailureEvent evt;
-
- public UserLoginFailureEventAdapter(UserLoginFailureEvent evt)
- {
- this.evt = evt ?? throw new ArgumentNullException(nameof(evt));
- }
-
- public ResourceActor Actor => new ResourceActor(ResourceActor.UserSubjectType, evt.Username, evt.Username);
- public string Action => evt.Name;
- public AuditableResource Resource => new AuditableResource("IdentityServer", evt.Endpoint);
- public FormattedString Description => evt.ToString().SafeForFormatted();
- }
-}
diff --git a/src/RSK.IdentityServer4.AuditEventSink/Adapters/UserLoginSuccessEventAdapter.cs b/src/RSK.IdentityServer4.AuditEventSink/Adapters/UserLoginSuccessEventAdapter.cs
deleted file mode 100644
index 369ff5a..0000000
--- a/src/RSK.IdentityServer4.AuditEventSink/Adapters/UserLoginSuccessEventAdapter.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System;
-using IdentityServer4.Events;
-using RSK.Audit;
-
-namespace RSK.IdentityServer4.AuditEventSink.Adapters
-{
- public class UserLoginSuccessEventAdapter : IAuditEventArguments
- {
- private readonly UserLoginSuccessEvent evt;
-
- public UserLoginSuccessEventAdapter(UserLoginSuccessEvent evt)
- {
- this.evt = evt ?? throw new ArgumentNullException(nameof(evt));
- }
-
- public ResourceActor Actor => new ResourceActor(ResourceActor.UserSubjectType, evt.SubjectId, evt.DisplayName);
- public string Action => evt.Name;
- public AuditableResource Resource => new AuditableResource("IdentityServer", evt.Endpoint);
- public FormattedString Description => evt.ToString().SafeForFormatted();
- }
-}
diff --git a/src/RSK.IdentityServer4.AuditEventSink/Adapters/UserLogoutSuccessEventAdapter.cs b/src/RSK.IdentityServer4.AuditEventSink/Adapters/UserLogoutSuccessEventAdapter.cs
deleted file mode 100644
index d7bf8b9..0000000
--- a/src/RSK.IdentityServer4.AuditEventSink/Adapters/UserLogoutSuccessEventAdapter.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using IdentityServer4.Events;
-using RSK.Audit;
-
-namespace RSK.IdentityServer4.AuditEventSink.Adapters
-{
- public class UserLogoutSuccessEventAdapter : IAuditEventArguments
- {
- private readonly UserLogoutSuccessEvent evt;
-
- public UserLogoutSuccessEventAdapter(UserLogoutSuccessEvent evt)
- {
- this.evt = evt;
- }
-
- public ResourceActor Actor => new ResourceActor(ResourceActor.UserSubjectType, evt.SubjectId, evt.DisplayName);
- public string Action => evt.Name;
- public AuditableResource Resource => new AuditableResource("IdentityServer", string.Empty);
- public FormattedString Description => evt.ToString().SafeForFormatted();
- }
-}
diff --git a/src/RSK.IdentityServer4.AuditEventSink/AuditSink.cs b/src/RSK.IdentityServer4.AuditEventSink/AuditSink.cs
deleted file mode 100644
index 608db13..0000000
--- a/src/RSK.IdentityServer4.AuditEventSink/AuditSink.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using System;
-using System.Runtime.CompilerServices;
-using System.Threading.Tasks;
-using IdentityServer4.Events;
-using IdentityServer4.Services;
-using RSK.Audit;
-
-[assembly:InternalsVisibleTo("RSK.IdentityServer4.AuditEventSink.Tests")]
-
-namespace RSK.IdentityServer4.AuditEventSink
-{
- public class AuditSink : IEventSink
- {
- private readonly IRecordAuditableActions auditRecorder;
-
- internal IAdapterFactory Factory { get; set; } = new AdapterFactory();
-
- public AuditSink(IRecordAuditableActions auditRecorder)
- {
- this.auditRecorder = auditRecorder ?? throw new ArgumentNullException();
- }
-
- public Task PersistAsync(Event evt)
- {
- var auditArgument = Factory.Create(evt);
-
- if (auditArgument != null)
- {
- if (evt.EventType == EventTypes.Success || evt.EventType == EventTypes.Information)
- {
- return auditRecorder.RecordSuccess(auditArgument);
- }
-
- return auditRecorder.RecordFailure(auditArgument);
- }
-
- return Task.CompletedTask;
- }
- }
-}
diff --git a/src/RSK.IdentityServer4.AuditEventSink/EventSinkAgregator.cs b/src/RSK.IdentityServer4.AuditEventSink/EventSinkAgregator.cs
deleted file mode 100644
index ed35dbd..0000000
--- a/src/RSK.IdentityServer4.AuditEventSink/EventSinkAgregator.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-using IdentityServer4.Events;
-using IdentityServer4.Services;
-using Microsoft.Extensions.Logging;
-
-namespace RSK.IdentityServer4.AuditEventSink
-{
- public class EventSinkAggregator : IEventSink
- {
- private readonly ILogger logger;
- public List EventSinks { get; set; } = new List();
-
- public EventSinkAggregator(ILogger logger)
- {
- this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
- }
-
- public Task PersistAsync(Event evt)
- {
- var eventSinkTasks = new List();
-
- foreach (var eventSink in EventSinks)
- {
- eventSinkTasks.Add(ProtectedExecution(() => eventSink.PersistAsync(evt)));
- }
-
- return Task.WhenAll(eventSinkTasks);
- }
-
- private async Task ProtectedExecution(Func persistAsync)
- {
- try
- {
- await persistAsync();
- }
- catch (Exception e)
- {
- logger.Log(LogLevel.Error, e.Message);
- }
- }
- }
-}
diff --git a/src/RSK.IdentityServer4.AuditEventSink/IAdapterFactory.cs b/src/RSK.IdentityServer4.AuditEventSink/IAdapterFactory.cs
deleted file mode 100644
index 05ff2aa..0000000
--- a/src/RSK.IdentityServer4.AuditEventSink/IAdapterFactory.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using IdentityServer4.Events;
-using RSK.Audit;
-
-namespace RSK.IdentityServer4.AuditEventSink
-{
- public interface IAdapterFactory
- {
- IAuditEventArguments Create(Event evt);
- }
-}
\ No newline at end of file
diff --git a/src/RSK.IdentityServer4.AuditEventSink/RSK.IdentityServer4.AuditEventSink.csproj b/src/RSK.IdentityServer4.AuditEventSink/RSK.IdentityServer4.AuditEventSink.csproj
deleted file mode 100644
index b5e3581..0000000
--- a/src/RSK.IdentityServer4.AuditEventSink/RSK.IdentityServer4.AuditEventSink.csproj
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
- net8.0;net9.0;net10.0
- Rock Solid Knowledge Ltd
- IdentityServer4 event sink to add audit records into AdminUI auditing
- https://github.com/RockSolidKnowledge/RSK.IdentityServer4.AuditEventSink
- Upgrade to .NET 10
- Copyright 2021 (c) Rock Solid Knowledge Ltd. All rights reserved
- Audit AdminUI IdentityServer Events
- true
- icon.png
- Apache-2.0
- 2.0.0
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/RSK.IdentityServer4.AuditEventSink/StringExtention.cs b/src/RSK.IdentityServer4.AuditEventSink/StringExtention.cs
deleted file mode 100644
index ff09f81..0000000
--- a/src/RSK.IdentityServer4.AuditEventSink/StringExtention.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-namespace RSK.IdentityServer4.AuditEventSink
-{
- public static class StringExtension
- {
- public static string SafeForFormatted(this string value)
- {
- return value.Replace("{", "{{").Replace("}", "}}");
- }
- }
-}
diff --git a/src/Rsk.Audit.EF/Rsk.Audit.EF.csproj b/src/Rsk.Audit.EF/Rsk.Audit.EF.csproj
index 2ab896f..530aa85 100644
--- a/src/Rsk.Audit.EF/Rsk.Audit.EF.csproj
+++ b/src/Rsk.Audit.EF/Rsk.Audit.EF.csproj
@@ -1,20 +1,19 @@
-
+
- net8.0;net9.0;net10.0
+ net10.0
RSK.Audit.EF
Rock Solid Knowledge Ltd
Provides audting API to record audit records and query api to find audit records with EntityFramework Core
- https://www.identityserver.com/products/adminui
- https://www.identityserver.com/downloads/adminui
- Copyright 2022 (c) Rock Solid Knowledge Ltd. All rights reserved.
+ https://github.com/RockSolidKnowledge/Audit
+ Copyright 2026 (c) Rock Solid Knowledge Ltd. All rights reserved.
Audit AdminUI IdentityServer EntityFramework
true
true
icon.png
Apache-2.0
RSK.Audit.EF
- 3.0.0
+ 4.0.0
@@ -22,16 +21,8 @@
1591
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/src/Rsk.Audit/Rsk.Audit.csproj b/src/Rsk.Audit/Rsk.Audit.csproj
index b7596d2..14a8612 100644
--- a/src/Rsk.Audit/Rsk.Audit.csproj
+++ b/src/Rsk.Audit/Rsk.Audit.csproj
@@ -1,38 +1,29 @@
-
+
- net8.0;net9.0;net10.0
+ net10.0
RSK.Audit
Rock Solid Knowledge Ltd
RSK.Audit
Provides audting API to record audit records and query api to find audit records
- https://www.identityserver.com/products/adminui
- https://www.identityserver.com/downloads/adminui
- Copyright 2022 (c) Rock Solid Knowledge Ltd. All rights reserved.
+ https://github.com/RockSolidKnowledge/Audit
+ Copyright 2026 (c) Rock Solid Knowledge Ltd. All rights reserved.
Audit AdminUI IdentityServer
true
true
icon.png
Apache-2.0
RSK.Audit
- 3.0.0
+ 4.0.0
1591
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/src/Rsk.DuendeIdentityServer.AuditEventSink/Rsk.DuendeIdentityServer.AuditEventSink.csproj b/src/Rsk.DuendeIdentityServer.AuditEventSink/Rsk.DuendeIdentityServer.AuditEventSink.csproj
index d0d49b1..8924bd9 100644
--- a/src/Rsk.DuendeIdentityServer.AuditEventSink/Rsk.DuendeIdentityServer.AuditEventSink.csproj
+++ b/src/Rsk.DuendeIdentityServer.AuditEventSink/Rsk.DuendeIdentityServer.AuditEventSink.csproj
@@ -1,22 +1,23 @@
- net8.0;net9.0;net10.0
+ net10.0
Rock Solid Knowledge Ltd
Duende IdentityServer event sink to add audit records into AdminUI auditing
- https://github.com/RockSolidKnowledge/RSK.IdentityServer4.AuditEventSink
- Add event extensibility
+ https://github.com/RockSolidKnowledge/Audit
Copyright 2026 (c) Rock Solid Knowledge Ltd. All rights reserved
Audit AdminUI IdentityServer Events
true
icon.png
Apache-2.0
- 4.1.0
+ 5.0.0
-
-
+
+
+
+
diff --git a/templates/publish-nuget.yml b/templates/publish-nuget.yml
new file mode 100644
index 0000000..7407bf2
--- /dev/null
+++ b/templates/publish-nuget.yml
@@ -0,0 +1,34 @@
+parameters:
+ - name: toLive
+ type: boolean
+ default: false
+ - name: artifact
+ type: string
+ default: 'Nupkg'
+ - name: packageToPublish
+ type: string
+
+steps:
+ - task: UseDotNet@2
+ inputs:
+ packageType: 'sdk'
+ version: '10.0.x'
+
+ - download: current
+ displayName: 'Download NuGet Artifact'
+ artifact: '${{ parameters.artifact }}'
+
+ - ${{ if eq(parameters.toLive, true) }}:
+ - bash: |
+ dotnet nuget push ${{ parameters.packageToPublish }} --source https://api.nuget.org/v3/index.json --api-key $(NuGetPackagePushKey)
+ displayName: 'Publish Release Nuget Package'
+
+ - ${{ if eq(parameters.toLive, false) }}:
+ - task: DotNetCoreCLI@2
+ displayName: 'Publish NuGet to RSKTools'
+ inputs:
+ command: 'push'
+ arguments: '--skip-duplicate'
+ packagesToPush: '${{ parameters.packageToPublish }}'
+ nuGetFeedType: 'internal'
+ publishVstsFeed: '75d50f4c-8a7b-4618-b9de-bae4820efa8f'
\ No newline at end of file
diff --git a/tests/Rsk.Audit.Tests.Common/Rsk.Audit.Tests.Common.csproj b/tests/Rsk.Audit.Tests.Common/Rsk.Audit.Tests.Common.csproj
index 7b37d1b..8cf9e68 100644
--- a/tests/Rsk.Audit.Tests.Common/Rsk.Audit.Tests.Common.csproj
+++ b/tests/Rsk.Audit.Tests.Common/Rsk.Audit.Tests.Common.csproj
@@ -1,7 +1,7 @@
- net8.0;net9.0;net10.0
+ net10.0
diff --git a/tests/Rsk.Audit.Tests.Integration/Rsk.Audit.Tests.Integration.csproj b/tests/Rsk.Audit.Tests.Integration/Rsk.Audit.Tests.Integration.csproj
index 6ea67ea..7f36c45 100644
--- a/tests/Rsk.Audit.Tests.Integration/Rsk.Audit.Tests.Integration.csproj
+++ b/tests/Rsk.Audit.Tests.Integration/Rsk.Audit.Tests.Integration.csproj
@@ -1,16 +1,16 @@
- net8.0;net9.0;net10.0
+ net10.0
false
-
+
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
@@ -21,15 +21,15 @@
-
+
-
+
-
+
diff --git a/tests/Rsk.Audit.Tests/Rsk.Audit.Tests.csproj b/tests/Rsk.Audit.Tests/Rsk.Audit.Tests.csproj
index 1d34b74..6ab1849 100644
--- a/tests/Rsk.Audit.Tests/Rsk.Audit.Tests.csproj
+++ b/tests/Rsk.Audit.Tests/Rsk.Audit.Tests.csproj
@@ -1,29 +1,29 @@
-
- net8.0;net9.0;net10.0
- false
-
+
+ net10.0
+ false
+
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
-
-
-
-
-
+
+
+
+
+
diff --git a/tests/Rsk.DuendeIdentityServer.AuditEventSink.Tests/AdapterFactoryTests.cs b/tests/Rsk.DuendeIdentityServer.AuditEventSink.Tests/AdapterFactoryTests.cs
index 7c9de0d..c94ce5e 100644
--- a/tests/Rsk.DuendeIdentityServer.AuditEventSink.Tests/AdapterFactoryTests.cs
+++ b/tests/Rsk.DuendeIdentityServer.AuditEventSink.Tests/AdapterFactoryTests.cs
@@ -4,7 +4,7 @@
using Duende.IdentityServer.Models;
using Duende.IdentityServer.ResponseHandling;
using Duende.IdentityServer.Validation;
-using IdentityModel;
+using Duende.IdentityModel;
using Rsk.DuendeIdentityServer.AuditEventSink.Adapters;
using Xunit;
diff --git a/tests/Rsk.DuendeIdentityServer.AuditEventSink.Tests/Rsk.DuendeIdentityServer.AuditEventSink.Tests.csproj b/tests/Rsk.DuendeIdentityServer.AuditEventSink.Tests/Rsk.DuendeIdentityServer.AuditEventSink.Tests.csproj
index 52125b9..0fb495a 100644
--- a/tests/Rsk.DuendeIdentityServer.AuditEventSink.Tests/Rsk.DuendeIdentityServer.AuditEventSink.Tests.csproj
+++ b/tests/Rsk.DuendeIdentityServer.AuditEventSink.Tests/Rsk.DuendeIdentityServer.AuditEventSink.Tests.csproj
@@ -1,15 +1,18 @@
- net8.0;net9.0;net10.0
+ net10.0
false
-
-
-
-
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
diff --git a/tests/Rsk.IdentityServer4.AuditEventSink.Tests/AdapterFactoryTests.cs b/tests/Rsk.IdentityServer4.AuditEventSink.Tests/AdapterFactoryTests.cs
deleted file mode 100644
index 2210e2a..0000000
--- a/tests/Rsk.IdentityServer4.AuditEventSink.Tests/AdapterFactoryTests.cs
+++ /dev/null
@@ -1,157 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Security.Claims;
-using IdentityModel;
-using IdentityServer4.Events;
-using IdentityServer4.Models;
-using IdentityServer4.ResponseHandling;
-using IdentityServer4.Validation;
-using RSK.IdentityServer4.AuditEventSink.Adapters;
-using Xunit;
-
-namespace RSK.IdentityServer4.AuditEventSink.Tests
-{
- public class AdapterFactoryTests
- {
- [Fact]
- public void Create_WhenTokenIssuedSuccessEvent_WillReturnTokenIssuedSuccessEventAdapter()
- {
- // Arrange
- var authResponse = new AuthorizeResponse()
- {
- Request = new ValidatedAuthorizeRequest()
- {
- Client = new Client(),
- Subject = new ClaimsPrincipal(new ClaimsIdentity(new List()
- {
- new Claim(JwtClaimTypes.Subject, string.Empty)
- }))
- }
- };
-
- var evt = new TokenIssuedSuccessEvent(authResponse);
-
- var sut = new AdapterFactory();
-
- // Act
- var adapter = sut.Create(evt);
-
- // Assert
- Assert.IsType(adapter);
- }
-
- [Fact]
- public void Create_WhenConsentGrantedEvent_WillReturnConsentGrantedEventAdapter()
- {
- // Arrange
- var evt = new ConsentGrantedEvent(string.Empty, string.Empty, new List(), new List(), false);
-
- var sut = new AdapterFactory();
-
- // Act
- var adapter = sut.Create(evt);
-
- // Assert
- Assert.IsType(adapter);
- }
-
- [Fact]
- public void Create_WhenUserLoginFailureEvent_WillReturnUserLoginFailureAdapter()
- {
- // Arrange
- var evt = new UserLoginFailureEvent(string.Empty, string.Empty);
-
- var sut = new AdapterFactory();
-
- // Act
- var adapter = sut.Create(evt);
-
- // Assert
- Assert.IsType(adapter);
- }
-
- [Fact]
- public void Create_WhenUserLoginSuccessEvent_WillReturnUserLoginSuccessAdapter()
- {
- // Arrange
- var evt = new UserLoginSuccessEvent(string.Empty, string.Empty, string.Empty, string.Empty);
-
- var sut = new AdapterFactory();
-
- // Act
- var adapter = sut.Create(evt);
-
- // Assert
- Assert.IsType(adapter);
- }
-
- [Fact]
- public void Create_WhenUserLogoutSuccessEvent_WillReturnUserLogoutSuccessAdapter()
- {
- // Arrange
- var evt = new UserLogoutSuccessEvent(string.Empty, string.Empty);
-
- var sut = new AdapterFactory();
-
- // Act
- var adapter = sut.Create(evt);
-
- // Assert
- Assert.IsType(adapter);
- }
-
- [Fact]
- public void Create_WhenConsentDeniedEvent_WillReturnConsentDeniedAdapter()
- {
- // Arrange
- var evt = new ConsentDeniedEvent(string.Empty, string.Empty, new string[] { });
-
- var sut = new AdapterFactory();
-
- // Act
- var adapter = sut.Create(evt);
-
- // Assert
- Assert.IsType(adapter);
- }
-
- [Fact]
- public void Create_WhenTokenIssuedFailureEvent_WillReturnTokenIssuedFailureAdapter()
- {
- // Arrange
- var request = new ValidatedAuthorizeRequest()
- {
- Client = new Client(),
- Subject = new ClaimsPrincipal(new ClaimsIdentity(new List()
- {
- new Claim(JwtClaimTypes.Subject, string.Empty)
- }))
- };
-
- var evt = new TokenIssuedFailureEvent(request, string.Empty, string.Empty);
-
- var sut = new AdapterFactory();
-
- // Act
- var adapter = sut.Create(evt);
-
- // Assert
- Assert.IsType(adapter);
- }
-
- [Fact]
- public void Create_WhenGrantsRevokedEvent_WillReturnGrantsRevokedAdapter()
- {
- // Arrange
- var evt = new GrantsRevokedEvent(string.Empty, string.Empty);
-
- var sut = new AdapterFactory();
-
- // Act
- var adapter = sut.Create(evt);
-
- // Assert
- Assert.IsType(adapter);
- }
- }
-}
diff --git a/tests/Rsk.IdentityServer4.AuditEventSink.Tests/AuditSinkTests.cs b/tests/Rsk.IdentityServer4.AuditEventSink.Tests/AuditSinkTests.cs
deleted file mode 100644
index 71ea8ce..0000000
--- a/tests/Rsk.IdentityServer4.AuditEventSink.Tests/AuditSinkTests.cs
+++ /dev/null
@@ -1,98 +0,0 @@
-using System.Threading.Tasks;
-using IdentityServer4.Events;
-using Moq;
-using RSK.Audit;
-using Xunit;
-
-namespace RSK.IdentityServer4.AuditEventSink.Tests
-{
- public class AuditSinkTests
- {
- [Fact]
- public async Task PersistAsync_WhenSuccessEvent_WillCallSuccessAuditRecord()
- {
- // Arrange
- var recorder = new Mock();
- var factory = new Mock();
- factory.Setup(x => x.Create(It.IsAny())).Returns(new Mock().Object);
-
- var sut = new AuditSink(recorder.Object) {Factory = factory.Object};
-
-
- var successfulEvent = new StubEvent(string.Empty, string.Empty, EventTypes.Success, -1);
-
- // Act
- await sut.PersistAsync(successfulEvent);
-
- // Assert
- recorder.Verify(x => x.RecordSuccess(It.IsAny()), Times.Once);
- }
-
- [Fact]
- public async Task PersistAsync_WhenInformationEvent_WillCallSuccessAuditRecord()
- {
- // Arrange
- var recorder = new Mock();
- var factory = new Mock();
- factory.Setup(x => x.Create(It.IsAny())).Returns(new Mock().Object);
-
- var sut = new AuditSink(recorder.Object) { Factory = factory.Object };
-
-
- var successfulEvent = new StubEvent(string.Empty, string.Empty, EventTypes.Information, -1);
-
- // Act
- await sut.PersistAsync(successfulEvent);
-
- // Assert
- recorder.Verify(x => x.RecordSuccess(It.IsAny()), Times.Once);
- }
-
- [Fact]
- public async Task PersistAsync_WhenErrorEvent_WillCallFailureAuditRecord()
- {
- // Arrange
- var recorder = new Mock();
- var factory = new Mock();
- factory.Setup(x => x.Create(It.IsAny())).Returns(new Mock().Object);
-
- var sut = new AuditSink(recorder.Object) { Factory = factory.Object };
-
-
- var successfulEvent = new StubEvent(string.Empty, string.Empty, EventTypes.Error, -1);
-
- // Act
- await sut.PersistAsync(successfulEvent);
-
- // Assert
- recorder.Verify(x => x.RecordFailure(It.IsAny()), Times.Once);
- }
-
- [Fact]
- public async Task PersistAsync_WhenFailureEvent_WillCallFailureAuditRecord()
- {
- // Arrange
- var recorder = new Mock();
- var factory = new Mock();
- factory.Setup(x => x.Create(It.IsAny())).Returns(new Mock().Object);
-
- var sut = new AuditSink(recorder.Object) { Factory = factory.Object };
-
-
- var successfulEvent = new StubEvent(string.Empty, string.Empty, EventTypes.Failure, -1);
-
- // Act
- await sut.PersistAsync(successfulEvent);
-
- // Assert
- recorder.Verify(x => x.RecordFailure(It.IsAny()), Times.Once);
- }
-
- private class StubEvent : Event
- {
- public StubEvent(string category, string name, EventTypes type, int id, string message = null) : base(category, name, type, id, message)
- {
- }
- }
- }
-}
diff --git a/tests/Rsk.IdentityServer4.AuditEventSink.Tests/EventSinkAggregatorTests.cs b/tests/Rsk.IdentityServer4.AuditEventSink.Tests/EventSinkAggregatorTests.cs
deleted file mode 100644
index 2b071d1..0000000
--- a/tests/Rsk.IdentityServer4.AuditEventSink.Tests/EventSinkAggregatorTests.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-using System;
-using System.Threading.Tasks;
-using IdentityServer4.Events;
-using IdentityServer4.Services;
-using Microsoft.Extensions.Logging;
-using Moq;
-using Xunit;
-
-namespace RSK.IdentityServer4.AuditEventSink.Tests
-{
- public class EventSinkAggregatorTests
- {
- [Fact]
- public async Task PersistAsync_WhenCalledWithMultiEventSinks_WillRaiseWithAll()
- {
- // Arrange
- var sink1 = new StubSink();
- var sink2 = new StubSink();
-
- var sut = new EventSinkAggregator(new Mock().Object);
-
- sut.EventSinks.Add(sink1);
- sut.EventSinks.Add(sink2);
-
- // Act
- await sut.PersistAsync(new StubEvent());
-
- // Assert
- Assert.Equal(1, sink1.WasCalled);
- Assert.Equal(1, sink2.WasCalled);
- }
-
- [Fact]
- public async Task PersistAsync_WhenCalledWithMultiEventSinksAndOneThrowsAnException_WillRaiseToAllEventSinks()
- {
- // Arrange
- var sink1 = new StubSink();
- var sink2 = new StubSink();
- var sink3 = new StubSinkThrowsException();
-
- var logger = new StubLogger();
-
- var sut = new EventSinkAggregator(logger);
-
- sut.EventSinks.Add(sink1);
- sut.EventSinks.Add(sink2);
- sut.EventSinks.Add(sink3);
-
- // Act
- await sut.PersistAsync(new StubEvent());
-
- // Assert
- Assert.Equal(1, sink1.WasCalled);
- Assert.Equal(1, sink2.WasCalled);
- Assert.Equal(1, sink3.WasCalled);
- Assert.Equal(1, logger.TimesErrored);
- }
-
- private class StubSink : IEventSink
- {
- public int WasCalled { get; private set; }
-
- public Task PersistAsync(Event evt)
- {
- WasCalled++;
- return Task.CompletedTask;
- }
- }
-
- private class StubSinkThrowsException : IEventSink
- {
- public int WasCalled { get; private set; }
-
- public Task PersistAsync(Event evt)
- {
- WasCalled++;
- throw new Exception("Blah");
- }
- }
-
- private class StubEvent : Event
- {
- public StubEvent() : base(string.Empty, string.Empty, EventTypes.Failure, 0)
- {
- }
- }
-
- private class StubLogger : ILogger
- {
- public int TimesErrored = 0;
-
- public IDisposable BeginScope(TState state)
- {
- throw new NotImplementedException();
- }
-
- public bool IsEnabled(LogLevel logLevel) => true;
-
- public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter)
- {
- if (logLevel == LogLevel.Error) TimesErrored++;
- }
- }
- }
-}
diff --git a/tests/Rsk.IdentityServer4.AuditEventSink.Tests/RSK.IdentityServer4.AuditEventSink.Tests.csproj b/tests/Rsk.IdentityServer4.AuditEventSink.Tests/RSK.IdentityServer4.AuditEventSink.Tests.csproj
deleted file mode 100644
index 8f504d1..0000000
--- a/tests/Rsk.IdentityServer4.AuditEventSink.Tests/RSK.IdentityServer4.AuditEventSink.Tests.csproj
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- net8.0;net9.0;net10.0
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-