Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 10 additions & 11 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -3,35 +3,35 @@
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="HealthMonitoring.Client" Version="2026.10.1" />
<PackageVersion Include="HealthMonitoring.Client" Version="2026.10.2.55" />
<PackageVersion Include="MediatR" Version="14.2.0" />
<PackageVersion Include="MessagingService.Client" Version="2026.10.2.156" />
<PackageVersion Include="MessagingService.Client" Version="2026.10.3.157" />
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="10.0.13" />
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="10.0.13" />
<PackageVersion Include="OpenIddict.Abstractions" Version="7.7.2" />
<PackageVersion Include="OpenIddict.Server" Version="7.7.2" />
<PackageVersion Include="OpenIddict.Server.AspNetCore" Version="7.7.2" />
<PackageVersion Include="OpenIddict.Validation.AspNetCore" Version="7.7.2" />
<PackageVersion Include="Shared.Logger" Version="2026.10.4" />
<PackageVersion Include="Shared.Results" Version="2026.10.4" />
<PackageVersion Include="Shared.Logger" Version="2026.11.2" />
<PackageVersion Include="Shared.Results" Version="2026.11.2" />
<PackageVersion Include="SharpCompress" Version="0.50.7" />
<PackageVersion Include="SimpleResults" Version="4.0.0" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="10.0.13" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.13" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.11.0" />
<PackageVersion Include="Microsoft.Testing.Extensions.CodeCoverage" Version="18.12.0" />
<PackageVersion Include="Microsoft.Testing.Extensions.TrxReport" Version="2.5.1" />
<PackageVersion Include="Imposter" Version="1.0.3" />
<PackageVersion Include="Imposter" Version="1.0.6" />
<PackageVersion Include="Shouldly" Version="4.3.0" />
<PackageVersion Include="SSH.NET" Version="2026.0.0" />
<PackageVersion Include="TransactionProcessing.ApiDefaults" Version="2026.10.4" />
<PackageVersion Include="TransactionProcessing.ApiDefaults" Version="2026.11.2" />
<PackageVersion Include="xunit.v3" Version="4.0.2" />
<PackageVersion Include="xunit.runner.visualstudio" Version="4.0.1" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.13" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.13" />
<PackageVersion Include="OpenIddict.EntityFrameworkCore" Version="7.7.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.13" />
<PackageVersion Include="ClientProxyBase" Version="2026.10.4" />
<PackageVersion Include="ClientProxyBase" Version="2026.11.2" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="10.0.13" />
<PackageVersion Include="Microsoft.AspNetCore.DataProtection.Extensions" Version="10.0.13" />
<PackageVersion Include="QRCoder" Version="1.8.1" />
Expand All @@ -40,8 +40,7 @@
<PackageVersion Include="Reqnroll.Tools.MsBuild.Generation" Version="3.3.4" />
<PackageVersion Include="NUnit" Version="5.0.0" />
<PackageVersion Include="NUnit3TestAdapter" Version="6.3.1" />
<PackageVersion Include="Reqnroll.NUnit" Version="3.3.3" />
<PackageVersion Include="Shared.IntegrationTesting" Version="2026.10.4" />
<PackageVersion Include="Shared.IntegrationTesting" Version="2026.11.2" />
<PackageVersion Include="System.Data.SqlClient" Version="4.9.1" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="10.0.13" />
<PackageVersion Include="coverlet.collector" Version="10.1.0" />
Expand All @@ -51,8 +50,8 @@
<PackageVersion Include="Microsoft.Extensions.Hosting.WindowsServices" Version="10.0.13" />
<PackageVersion Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.23.0" />
<PackageVersion Include="OpenIddict.AspNetCore" Version="7.7.2" />
<PackageVersion Include="Shared" Version="2026.10.4" />
<PackageVersion Include="Shared.Results.Web" Version="2026.10.4" />
<PackageVersion Include="Shared" Version="2026.11.2" />
<PackageVersion Include="Shared.Results.Web" Version="2026.11.2" />
<PackageVersion Include="Sentry.AspNetCore" Version="6.12.1" />
<PackageVersion Include="NLog.Web.AspNetCore" Version="6.2.2" />
<PackageVersion Include="HtmlAgilityPack" Version="1.13.1" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ private async Task<Result> SendConfirmationEmail(ApplicationUser newIdentityUser
SendEmailRequest emailRequest = this.BuildEmailConfirmationRequest(newIdentityUser, uri);
Result sendEmailResult = await this.MessagingServiceClient.SendEmail(token.AccessToken, emailRequest, cancellationToken);
if (sendEmailResult.IsFailed) {
Logger.LogWarning($"Error sending email to {newIdentityUser.Email} as part of user creation {sendEmailResult}");
Logger.LogWarning("Error sending email to {emailaddress} as part of user creation {result}", newIdentityUser.Email, sendEmailResult);
return ResultHelpers.CreateFailure(sendEmailResult);
}

Expand Down
4 changes: 3 additions & 1 deletion SecurityService.IntegrationTests/Common/DockerHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ namespace SecurityService.IntergrationTests.Common
using NLog.Config;
using SecurityService.IntegrationTesting.Helpers;
using Shared.IntegrationTesting;
using Shared.IntegrationTesting.TestContainers;
using System;
using System.Collections.Generic;
using System.Net;
Expand Down Expand Up @@ -113,7 +114,8 @@ public override ContainerBuilder SetupSecurityServiceContainer()
ContainerBuilder securityServiceContainer = new ContainerBuilder(imageDetailsResult.Data.imageName)
.WithName(this.SecurityServiceContainerName)
.WithEnvironment(environmentVariables)
.WithBindMount(this.IntegrationTestCertificate.CertificateDirectory, this.IntegrationTestCertificate.ContainerCertificateDirectory, AccessMode.ReadOnly);
.MountHostFolder(this.HostTraceFolder)
.WithResourceMapping(this.IntegrationTestCertificate.CertificateDirectory, this.IntegrationTestCertificate.ContainerCertificateDirectory);

Int32? hostPort = this.GetHostPort(ContainerType.SecurityService);
if (hostPort is null || hostPort <= 0)
Expand Down
9 changes: 5 additions & 4 deletions SecurityService.IntegrationTests/Common/GenericSteps.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,12 @@ public GenericSteps(ScenarioContext scenarioContext,
public async Task StartSystem()
{
// Initialise a logger
String scenarioName = this.ScenarioContext.ScenarioInfo.Title.Replace(" ", "");
NlogLogger logger = new NlogLogger();
String scenarioName = this.ScenarioContext.ScenarioInfo.Title.Replace(" ", String.Empty);
NlogLogger logger = new();
logger.Initialise(LogManager.GetLogger(scenarioName), scenarioName);
LogManager.AddHiddenAssembly(typeof(NlogLogger).Assembly);

LogManager.Setup().SetupLogFactory(setup =>
setup.AddCallSiteHiddenAssembly(typeof(NlogLogger).Assembly));

DockerServices dockerServices = DockerServices.SecurityService | DockerServices.SqlServer;

this.TestingContext.DockerHelper = new DockerHelper();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ public override ContainerBuilder SetupSecurityServiceContainer()
.WithName(this.SecurityServiceContainerName)
.WithEnvironment(environmentVariables)
.WithPortBinding(DockerPorts.SecurityServiceDockerPort, DockerPorts.SecurityServiceDockerPort)
.WithBindMount(this.IntegrationTestCertificate.CertificateDirectory, this.IntegrationTestCertificate.ContainerCertificateDirectory, AccessMode.ReadOnly)
.WithResourceMapping(this.IntegrationTestCertificate.CertificateDirectory, this.IntegrationTestCertificate.ContainerCertificateDirectory)
.MountHostFolder(this.HostTraceFolder);

return securityServiceContainer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,10 @@ public async Task StartSystem()
{
// Initialise a logger
String scenarioName = this.ScenarioContext.ScenarioInfo.Title.Replace(" ", String.Empty);
NlogLogger logger = new NlogLogger();
NlogLogger logger = new();
logger.Initialise(LogManager.GetLogger(scenarioName), scenarioName);
LogManager.AddHiddenAssembly(typeof(NlogLogger).Assembly);
LogManager.Setup().SetupLogFactory(setup =>
setup.AddCallSiteHiddenAssembly(typeof(NlogLogger).Assembly));

DockerServices dockerServices = DockerServices.SecurityService | DockerServices.SqlServer | DockerServices.MessagingService | DockerServices.KurrentDb;

Expand Down
6 changes: 3 additions & 3 deletions SecurityService/HostedServices/DatabaseInitializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public async Task StartAsync(CancellationToken cancellationToken)

SecurityServiceDbContext dbContext = scope.ServiceProvider.GetRequiredService<SecurityServiceDbContext>();
if (this.Options.UseInMemoryDatabase) {
Logger.LogInformation($"Using in-memory database '{this.Options.InMemoryDatabaseName}'.");
Logger.LogInformation("Using in-memory database '{databaseName}'.", this.Options.InMemoryDatabaseName);
await dbContext.Database.EnsureCreatedAsync(cancellationToken);
}
else {
Expand All @@ -47,7 +47,7 @@ public async Task StartAsync(CancellationToken cancellationToken)

foreach ((string name, string displayName, string description) in defaultScopes) {
if (await scopeManager.FindByNameAsync(name, cancellationToken) is null) {
Logger.LogInformation($"Creating default scope {name}.");
Logger.LogInformation("Creating default scope {scopeName}.", name);
await scopeManager.CreateAsync(new OpenIddictScopeDescriptor { Name = name, DisplayName = displayName, Description = description }, cancellationToken);
}
}
Expand All @@ -61,7 +61,7 @@ public async Task StartAsync(CancellationToken cancellationToken)
Logger.LogWarning("Database initialization complete.");
}
catch (Exception ex) {
Logger.LogError(new Exception("An error occurred during database initialization.", ex));
Logger.LogError(ex, "An error occurred during database initialization.");
throw;
}
}
Expand Down
7 changes: 4 additions & 3 deletions SecurityService/OpenApi/DtoXmlSchemaTransformer.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
using System.Reflection;
using System.Xml;
using Microsoft.AspNetCore.OpenApi;
using Microsoft.OpenApi;
using System.Reflection;
using System.Text.Json.Nodes;
using System.Xml;

namespace SecurityService.OpenApi;

Expand Down Expand Up @@ -58,7 +59,7 @@ private static void ApplyExample(OpenApiSchema schema, XmlNode member)
{
try
{
schema.Example = System.Text.Json.Nodes.JsonNode.Parse(example);
schema.Examples = [JsonNode.Parse(example)!];
}
catch (System.Text.Json.JsonException)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ private static void AddParameter(OpenApiOperation operation, string name, string
In = ParameterLocation.Query,
Description = description,
Required = required,
Schema = new OpenApiSchema { Type = JsonSchemaType.String, Example = JsonValue.Create(value) },
Schema = new OpenApiSchema { Type = JsonSchemaType.String, Examples = [JsonValue.Create(value)] },
Example = JsonValue.Create(value)
});
}
Expand Down
8 changes: 3 additions & 5 deletions SecurityService/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -379,14 +379,12 @@

var app = builder.Build();

if (builder.Environment.IsDevelopment())
{
if (builder.Environment.IsDevelopment()) {
app.UseDeveloperExceptionPage();
}

ILogger logger = builder.Services.BuildServiceProvider().GetRequiredService<ILoggerFactory>().CreateLogger("Security Service");

Logger.Initialise(logger);
NLog.Logger logger = LogManager.GetLogger("Security Service");
Shared.Logger.Logger.Initialise(logger, "securityservice");
builder.Configuration.LogConfiguration(Logger.LogWarning);
app.UseMiddleware<TenantMiddleware>();
app.AddRequestResponseLogging();
Expand Down
46 changes: 17 additions & 29 deletions SecurityService/nlog.config
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,23 @@

<targets>
<target name="asyncFile" xsi:type="AsyncWrapper">
<target name="logfile" xsi:type="File"
fileName="/home/txnproc/trace/securityservice.log"
layout="${date:format=dd/MM/yyyy HH\:mm\:ss.ffff} | ${level} |${mdlc:CorrelationId:fallback=NO-ID}| ${callsite:className=true} | ${message} | ${exception:format=type,method:maxInnerExceptionLevel=5:innerFormat=shortType,message,method:InnerExceptionSeparator= | }"
archiveFileName="/home/txnproc/trace/securityservice.{#####}.log"
archiveAboveSize="104857600"
archiveNumbering="Sequence"
concurrentWrites="true"
maxArchiveFiles="2"/>
<target name="healthlogfile" xsi:type="File"
fileName="/home/txnproc/trace/securityservice_health.log"
layout="${date:format=dd/MM/yyyy HH\:mm\:ss.ffff} | ${level} | ${callsite:className=true} | ${message} | ${exception:format=type,method:maxInnerExceptionLevel=5:innerFormat=shortType,message,method:InnerExceptionSeparator= | }"
archiveFileName="/home/txnproc/trace/securityservice_health.{#####}.log"
archiveAboveSize="104857600"
archiveNumbering="Sequence"
concurrentWrites="true"
maxArchiveFiles="2"/>
</target>
<target xsi:type="Console"
name="console"
layout="${date:format=dd/MM/yyyy HH\:mm\:ss.ffff} | ${level} | ${callsite:className=true} | ${message} | ${exception:format=type,method:maxInnerExceptionLevel=5:innerFormat=shortType,message,method:InnerExceptionSeparator= | }"
detectConsoleAvailable="true" />
<target name="logfile" xsi:type="File"
fileName="/home/txnproc/trace/securityservice.json"
archiveFileName="/home/txnproc/trace/securityservice.{#####}.json"
archiveAboveSize="104857600"
archiveNumbering="Sequence"
concurrentWrites="true"
maxArchiveFiles="2">
<layout xsi:type="JsonLayout"
includeEventProperties="true"
excludeProperties="timestampUtc">
<attribute name="timestampUtc" layout="${date:universalTime=true:format=o}" />
<attribute name="level" layout="${level:uppercase=true}" />
<attribute name="message" layout="${message}" />
<attribute name="exception" layout="${exception:format=type,method:maxInnerExceptionLevel=5:innerFormat=shortType,message,method:InnerExceptionSeparator= | }" />
</layout>
</target>
</target>
</targets>

<!--
Expand All @@ -38,14 +34,6 @@
<rules>
<logger name="Microsoft.*" minlevel="Warn" writeTo="" final="true" />
<logger name="*" minlevel="Warn" writeTo="logfile">
<filters defaultAction="Log">
<when condition="contains('${message}', 'HEALTH_CHECK')" action="Ignore"></when>
</filters>
</logger>
<logger name="*" minlevel="Warn" writeTo="healthlogfile">
<filters defaultAction="Ignore">
<when condition="contains('${message}', 'HEALTH_CHECK')" action="Log"></when>
</filters>
</logger>
</rules>
</nlog>
Loading