diff --git a/.azuredevops/pipelines/build-v2.yml b/.azuredevops/pipelines/build-v2.yml
index cee140e..2465774 100644
--- a/.azuredevops/pipelines/build-v2.yml
+++ b/.azuredevops/pipelines/build-v2.yml
@@ -21,6 +21,12 @@ resources:
include:
- develop
- main
+
+ - repository: shared-code-scanning
+ type: git
+ name: Common/shared-code-scanning
+ ref: refs/heads/main
+ trigger: none
trigger:
- develop
@@ -34,16 +40,26 @@ parameters:
variables:
- group: artifacts
+- group: PT-Pipeline-Common
- name: baseSourceDirectory
value: $(Build.SourcesDirectory)/sb-mock-data-holder/Source
pool:
- vmImage: ubuntu-latest
+ name: mdp-mgmt-shared
+ demands:
+ - ImageOverride -equals $(PipelineHostLinuxImage)
jobs:
- job: Build
timeoutInMinutes: 120
steps:
+
+ - script: |
+ echo "Cleaning auth-server folder in temp"
+ ls $(Agent.BuildDirectory)/s/sb-mock-data-holder/Source/DockerCompose/_temp/mock-data-holder-* 2>/dev/null || "No matching folders found"
+ sudo rm -rf $(Agent.BuildDirectory)/s/sb-mock-data-holder/Source/DockerCompose/_temp/mock-data-holder-* 2> /dev/null
+ displayName: Clean temp auth-server folders
+ condition: always()
###################################################################################################
# Checkout repositories
@@ -113,16 +129,24 @@ jobs:
$authServerBranch = ""
$AuthServerFeatureBranch = "$(AuthServerFeatureBranch)"
$SourcebranchName = "$(Build.SourceBranch)" -replace 'refs/heads/', ''
-
+
if ($SourcebranchName -match "releases/") {
$authServerBranch = "$(AuthServerReleaseBranchName)"
$branchRef = "refs/heads/$authServerBranch"
echo "Release Branch detected. Using $branchRef."
}
elseif ($SourcebranchName -eq "main" -or $branchName -eq "develop") {
- $authServerBranch = $branchName
- $branchRef = "$(Build.SourceBranch)"
- echo "Main or Develop Branch detected. Using $branchRef."
+ if ($AuthServerFeatureBranch -ne "") {
+ $authServerBranch = $AuthServerFeatureBranch
+ $branchRef = "refs/heads/$authServerBranch"
+ echo "Feature Branch variable exists. Using $branchRef."
+ }
+ else
+ {
+ $authServerBranch = $branchName
+ $branchRef = "$(Build.SourceBranch)"
+ echo "Main or Develop Branch detected. Using $branchRef."
+ }
}
elseif ($AuthServerFeatureBranch -ne "") {
$authServerBranch = $AuthServerFeatureBranch
@@ -166,6 +190,11 @@ jobs:
docker build --file $(baseSourceDirectory)/Dockerfile --target Banking -t mock-data-holder:latest $(baseSourceDirectory)
displayName: Create Banking Image
condition: always()
+
+ - template: templates/scan-image.yml@shared-code-scanning
+ parameters:
+ Repository: mock-data-holder
+ Tag: latest
- script: |
docker build --file $(baseSourceDirectory)/Dockerfile --target Energy -t mock-data-holder-energy:latest $(baseSourceDirectory)
@@ -329,7 +358,7 @@ jobs:
- task: PublishPipelineArtifact@1
displayName: Publish container images
inputs:
- path: $(Build.ArtifactStagingDirectory)
+ path: $(Build.ArtifactStagingDirectory)/mock-data-holder.image.tar
artifact: Container Images
###################################################################################################
diff --git a/.azuredevops/pipelines/code-scanning.yml b/.azuredevops/pipelines/code-scanning.yml
index ea3fe11..1fb2be5 100644
--- a/.azuredevops/pipelines/code-scanning.yml
+++ b/.azuredevops/pipelines/code-scanning.yml
@@ -17,8 +17,13 @@ schedules:
# Disable standard CI build
trigger: none
+variables:
+- group: PT-Pipeline-Common
+
pool:
- vmImage: 'ubuntu-latest'
+ name: mdp-mgmt-shared
+ demands:
+ - ImageOverride -equals $(PipelineHostLinuxImage)
extends:
template: pipeline-templates/code-scanning.yml@shared-code-scanning
\ No newline at end of file
diff --git a/.azuredevops/pipelines/dependabot.yml b/.azuredevops/pipelines/dependabot.yml
index 983bf4e..ba24281 100644
--- a/.azuredevops/pipelines/dependabot.yml
+++ b/.azuredevops/pipelines/dependabot.yml
@@ -6,11 +6,16 @@ schedules:
- refs/heads/develop
always: true
+variables:
+- group: PT-Pipeline-Common
+
jobs:
- job: dependabot
displayName: Dependabot
pool:
- vmImage: ubuntu-latest
+ name: mdp-mgmt-shared
+ demands:
+ - ImageOverride -equals $(PipelineHostLinuxImage)
steps:
- task: CmdLine@2
displayName: clone dependabot repo
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c454e91..01f1112 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
+## [4.0.5] - 2026-07-08
+### Changed
+- Updated NuGet packages
+
+## [4.0.4] - 2026-03-18
+### Changed
+- Rebuild project to fix vulnerabilities in base image
## [4.0.3] - 2025-12-10
### Changed
diff --git a/Source/Banking/CDR.DataHolder.Banking.Domain/CDR.DataHolder.Banking.Domain.csproj b/Source/Banking/CDR.DataHolder.Banking.Domain/CDR.DataHolder.Banking.Domain.csproj
index 066b7b1..6c454a0 100644
--- a/Source/Banking/CDR.DataHolder.Banking.Domain/CDR.DataHolder.Banking.Domain.csproj
+++ b/Source/Banking/CDR.DataHolder.Banking.Domain/CDR.DataHolder.Banking.Domain.csproj
@@ -22,4 +22,8 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
\ No newline at end of file
diff --git a/Source/Banking/CDR.DataHolder.Banking.Repository/CDR.DataHolder.Banking.Repository.csproj b/Source/Banking/CDR.DataHolder.Banking.Repository/CDR.DataHolder.Banking.Repository.csproj
index 80272f3..9206224 100644
--- a/Source/Banking/CDR.DataHolder.Banking.Repository/CDR.DataHolder.Banking.Repository.csproj
+++ b/Source/Banking/CDR.DataHolder.Banking.Repository/CDR.DataHolder.Banking.Repository.csproj
@@ -26,6 +26,10 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
diff --git a/Source/Banking/CDR.DataHolder.Banking.Repository/Infrastructure/MappingProfile.cs b/Source/Banking/CDR.DataHolder.Banking.Repository/Infrastructure/MappingProfile.cs
index e421d4d..4a0831a 100644
--- a/Source/Banking/CDR.DataHolder.Banking.Repository/Infrastructure/MappingProfile.cs
+++ b/Source/Banking/CDR.DataHolder.Banking.Repository/Infrastructure/MappingProfile.cs
@@ -6,13 +6,17 @@ namespace CDR.DataHolder.Banking.Repository.Infrastructure
{
public class MappingProfile : Profile
{
+ private const int AutoMapperMaxDepth = 32;
+
public MappingProfile()
{
CreateMap()
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
.ForMember(
@@ -22,7 +26,8 @@ public MappingProfile()
.ForMember(dest => dest.CustomerId, source => source.MapFrom(s => s.Customer.CustomerId))
.ForMember(dest => dest.LoginId, source => source.MapFrom(s => s.Customer.LoginId))
.ForMember(dest => dest.CustomerUType, source => source.MapFrom(s => s.Customer.CustomerUType))
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
.ForMember(
@@ -32,19 +37,23 @@ public MappingProfile()
.ForMember(dest => dest.CustomerId, source => source.MapFrom(s => s.Customer.CustomerId))
.ForMember(dest => dest.LoginId, source => source.MapFrom(s => s.Customer.LoginId))
.ForMember(dest => dest.CustomerUType, source => source.MapFrom(s => s.Customer.CustomerUType))
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
.ForMember(dest => dest.Accounts, source => source.MapFrom(source => source.Accounts))
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
.IncludeMembers(source => source.Person, source => source)
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
.IncludeMembers(source => source.Organisation)
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
}
}
}
diff --git a/Source/Banking/CDR.DataHolder.Banking.Resource.API.UnitTests/CDR.DataHolder.Banking.Resource.API.UnitTests.csproj b/Source/Banking/CDR.DataHolder.Banking.Resource.API.UnitTests/CDR.DataHolder.Banking.Resource.API.UnitTests.csproj
index 3d11eba..79f8e95 100644
--- a/Source/Banking/CDR.DataHolder.Banking.Resource.API.UnitTests/CDR.DataHolder.Banking.Resource.API.UnitTests.csproj
+++ b/Source/Banking/CDR.DataHolder.Banking.Resource.API.UnitTests/CDR.DataHolder.Banking.Resource.API.UnitTests.csproj
@@ -70,4 +70,8 @@
Always
+
+
+
+
\ No newline at end of file
diff --git a/Source/Banking/CDR.DataHolder.Banking.Resource.API/Business/MappingProfile.cs b/Source/Banking/CDR.DataHolder.Banking.Resource.API/Business/MappingProfile.cs
index 8900baa..af86ad6 100644
--- a/Source/Banking/CDR.DataHolder.Banking.Resource.API/Business/MappingProfile.cs
+++ b/Source/Banking/CDR.DataHolder.Banking.Resource.API/Business/MappingProfile.cs
@@ -9,37 +9,45 @@ namespace CDR.DataHolder.Banking.Resource.API.Business
{
public class MappingProfile : Profile
{
+ private const int AutoMapperMaxDepth = 32;
+
public MappingProfile()
{
- CreateMap();
+ CreateMap().MaxDepth(AutoMapperMaxDepth);
- CreateMap();
+ CreateMap().MaxDepth(AutoMapperMaxDepth);
CreateMap()
.ForMember(d => d.Type, s => s.MapFrom(src => src.TransactionType))
- .ForMember(d => d.Amount, s => s.MapFrom(src => src.Amount.ToString("F2")));
+ .ForMember(d => d.Amount, s => s.MapFrom(src => src.Amount.ToString("F2")))
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
- .ForMember(d => d.Transactions, s => s.MapFrom(src => src));
+ .ForMember(d => d.Transactions, s => s.MapFrom(src => src))
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap, PageModel>()
.ForMember(d => d.Meta, s => s.MapFrom(src => new MetaPaginated { TotalRecords = src.TotalRecords, TotalPages = src.TotalPages }))
- .ForMember(d => d.Data, s => s.MapFrom(src => src.Data));
+ .ForMember(d => d.Data, s => s.MapFrom(src => src.Data))
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap(typeof(Shared.Domain.ValueObjects.Page<>), typeof(MetaPaginated))
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
.ForMember(dest => dest.MaskedNumber, source => source.MapFrom(source => source.MaskedName))
.ForMember(dest => dest.CreationDate, source => source.MapFrom(source =>
source.CreationDate.HasValue ? source.CreationDate.Value.ToString("yyyy-MM-dd") : null))
.ForMember(dest => dest.IsOwned, source => source.MapFrom(source => true))
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap, ResponseBankingAccountListV2>()
.ForPath(dest => dest.Data.Accounts, source => source.MapFrom(source => source.Data))
.ForMember(dest => dest.Meta, source => source.MapFrom(source => source))
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
}
}
}
diff --git a/Source/Banking/CDR.DataHolder.Banking.Resource.API/CDR.DataHolder.Banking.Resource.API.csproj b/Source/Banking/CDR.DataHolder.Banking.Resource.API/CDR.DataHolder.Banking.Resource.API.csproj
index f55501b..06c907a 100644
--- a/Source/Banking/CDR.DataHolder.Banking.Resource.API/CDR.DataHolder.Banking.Resource.API.csproj
+++ b/Source/Banking/CDR.DataHolder.Banking.Resource.API/CDR.DataHolder.Banking.Resource.API.csproj
@@ -41,6 +41,10 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
diff --git a/Source/Banking/CDR.DataHolder.Banking.Tests.IntegrationTests/CDR.DataHolder.Banking.Tests.IntegrationTests.csproj b/Source/Banking/CDR.DataHolder.Banking.Tests.IntegrationTests/CDR.DataHolder.Banking.Tests.IntegrationTests.csproj
index c244144..9ad1c05 100644
--- a/Source/Banking/CDR.DataHolder.Banking.Tests.IntegrationTests/CDR.DataHolder.Banking.Tests.IntegrationTests.csproj
+++ b/Source/Banking/CDR.DataHolder.Banking.Tests.IntegrationTests/CDR.DataHolder.Banking.Tests.IntegrationTests.csproj
@@ -70,6 +70,10 @@
+
+
+
+
Always
diff --git a/Source/Common/CDR.DataHolder.Common.API/Business/MappingProfile.cs b/Source/Common/CDR.DataHolder.Common.API/Business/MappingProfile.cs
index e3f681b..a2b8836 100644
--- a/Source/Common/CDR.DataHolder.Common.API/Business/MappingProfile.cs
+++ b/Source/Common/CDR.DataHolder.Common.API/Business/MappingProfile.cs
@@ -7,57 +7,67 @@ namespace CDR.DataHolder.Common.API.Business
{
public class MappingProfile : Profile
{
+ private const int AutoMapperMaxDepth = 32;
+
public MappingProfile()
{
// Mappings for banking industry
- CreateMap();
+ CreateMap().MaxDepth(AutoMapperMaxDepth);
- CreateMap();
+ CreateMap().MaxDepth(AutoMapperMaxDepth);
// Mapping from Person to CustomerModel
CreateMap()
.ForMember(dest => dest.Person, source => source.MapFrom(source => source))
- .ForMember(dest => dest.Organisation, opt => opt.Ignore());
+ .ForMember(dest => dest.Organisation, opt => opt.Ignore())
+ .MaxDepth(AutoMapperMaxDepth);
// Mapping from Organisation to CustomerModel
CreateMap()
.ForMember(dest => dest.Organisation, source => source.MapFrom(source => source))
- .ForMember(dest => dest.Person, opt => opt.Ignore());
+ .ForMember(dest => dest.Person, opt => opt.Ignore())
+ .MaxDepth(AutoMapperMaxDepth);
// Mapping from Person to ResponseCommonCustomer
CreateMap()
.IgnoreAllMembers()
- .ForMember(dest => dest.Data, source => source.MapFrom(source => source));
+ .ForMember(dest => dest.Data, source => source.MapFrom(source => source))
+ .MaxDepth(AutoMapperMaxDepth);
// Mapping from Organisation to ResponseCommonCustomer
CreateMap()
.IgnoreAllMembers()
- .ForMember(dest => dest.Data, source => source.MapFrom(source => source));
+ .ForMember(dest => dest.Data, source => source.MapFrom(source => source))
+ .MaxDepth(AutoMapperMaxDepth);
// Mappings for energy industry
- CreateMap();
+ CreateMap().MaxDepth(AutoMapperMaxDepth);
- CreateMap();
+ CreateMap().MaxDepth(AutoMapperMaxDepth);
// Mapping from Person to CustomerModel
CreateMap()
.ForMember(dest => dest.Person, source => source.MapFrom(source => source))
- .ForMember(dest => dest.Organisation, opt => opt.Ignore());
+ .ForMember(dest => dest.Organisation, opt => opt.Ignore())
+ .MaxDepth(AutoMapperMaxDepth);
// Mapping from Organisation to CustomerModel
CreateMap()
.ForMember(dest => dest.Organisation, source => source.MapFrom(source => source))
- .ForMember(dest => dest.Person, opt => opt.Ignore());
+ .ForMember(dest => dest.Person, opt => opt.Ignore())
+ .MaxDepth(AutoMapperMaxDepth);
// Mapping from Person to ResponseCommonCustomer
CreateMap()
.IgnoreAllMembers()
- .ForMember(dest => dest.Data, source => source.MapFrom(source => source));
+ .ForMember(dest => dest.Data, source => source.MapFrom(source => source))
+ .MaxDepth(AutoMapperMaxDepth);
// Mapping from Organisation to ResponseCommonCustomer
CreateMap()
.IgnoreAllMembers()
- .ForMember(dest => dest.Data, source => source.MapFrom(source => source));
+ .ForMember(dest => dest.Data, source => source.MapFrom(source => source))
+ .MaxDepth(AutoMapperMaxDepth);
}
}
}
diff --git a/Source/Common/CDR.DataHolder.Common.API/CDR.DataHolder.Common.API.csproj b/Source/Common/CDR.DataHolder.Common.API/CDR.DataHolder.Common.API.csproj
index b28fe58..9984bd8 100644
--- a/Source/Common/CDR.DataHolder.Common.API/CDR.DataHolder.Common.API.csproj
+++ b/Source/Common/CDR.DataHolder.Common.API/CDR.DataHolder.Common.API.csproj
@@ -24,6 +24,10 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
@@ -33,5 +37,5 @@
Always
-
+
\ No newline at end of file
diff --git a/Source/Directory.Build.props b/Source/Directory.Build.props
index b36ad64..15af89e 100644
--- a/Source/Directory.Build.props
+++ b/Source/Directory.Build.props
@@ -1,7 +1,7 @@
net8.0
- 4.0.3
+ 4.0.5
true
true
true
diff --git a/Source/Directory.Packages.props b/Source/Directory.Packages.props
index 6e409f2..bd885c0 100644
--- a/Source/Directory.Packages.props
+++ b/Source/Directory.Packages.props
@@ -5,50 +5,50 @@
-
-
-
-
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
-
-
+
+
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
-
+
\ No newline at end of file
diff --git a/Source/DockerCompose/docker-compose.IntegrationTests.Banking.yml b/Source/DockerCompose/docker-compose.IntegrationTests.Banking.yml
index b7d7e03..f5c8e5f 100644
--- a/Source/DockerCompose/docker-compose.IntegrationTests.Banking.yml
+++ b/Source/DockerCompose/docker-compose.IntegrationTests.Banking.yml
@@ -30,7 +30,7 @@ services:
extra_hosts:
- "mock-data-holder-integration-tests:host-gateway"
healthcheck:
- test: ((wget --no-check-certificate --no-verbose --spider https://localhost:8005/health) && (wget --no-check-certificate --no-verbose --spider https://localhost:8001/health) && (wget --no-check-certificate --no-verbose --spider https://localhost:3000)) || exit 1
+ test: ((wget --no-check-certificate --no-verbose --spider https://localhost:8005/health) && (wget --no-check-certificate --no-verbose --spider https://localhost:8001/health) && (wget --no-check-certificate --no-verbose --spider https://localhost:3000/ui)) || exit 1
timeout: 5s
interval: 5s
retries: 50
diff --git a/Source/DockerCompose/docker-compose.IntegrationTests.Energy.yml b/Source/DockerCompose/docker-compose.IntegrationTests.Energy.yml
index 3291588..1292e76 100644
--- a/Source/DockerCompose/docker-compose.IntegrationTests.Energy.yml
+++ b/Source/DockerCompose/docker-compose.IntegrationTests.Energy.yml
@@ -30,7 +30,7 @@ services:
extra_hosts:
- "mock-data-holder-energy-integration-tests:host-gateway"
healthcheck:
- test: ((wget --no-check-certificate --no-verbose --spider https://localhost:8105/health) && (wget --no-check-certificate --no-verbose --spider https://localhost:8101/health) && (wget --no-check-certificate --no-verbose --spider https://localhost:3100)) || exit 1
+ test: ((wget --no-check-certificate --no-verbose --spider https://localhost:8105/health) && (wget --no-check-certificate --no-verbose --spider https://localhost:8101/health) && (wget --no-check-certificate --no-verbose --spider https://localhost:3100/ui)) || exit 1
timeout: 5s
interval: 5s
retries: 50
diff --git a/Source/Dockerfile b/Source/Dockerfile
index 0b2e045..bd60a9f 100644
--- a/Source/Dockerfile
+++ b/Source/Dockerfile
@@ -5,10 +5,11 @@
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
# Install nodejs, npm and live-server, which are needed by the auth UI
-RUN apt-get update
-RUN apt-get install -y nodejs
-RUN apt-get install -y npm
-RUN apt-get install -y nginx
+RUN apt-get update && apt-get install -y --no-install-recommends \
+ nodejs \
+ npm \
+ nginx \
+ && rm -rf /var/lib/apt/lists/*
WORKDIR /app
EXPOSE 8001
@@ -19,17 +20,15 @@ ENV ASPNETCORE_ENVIRONMENT=Release
###############################################################################
# Build CdrAuthServer UI layer
###############################################################################
-FROM node:20-alpine AS ui-build
+FROM node:24-alpine AS ui-build
WORKDIR /app
ARG target_environment=production
ENV PATH /app/node_modules/.bin:$PATH
-RUN npm install react-scripts@latest -g
COPY ./cdr-auth-server/Source/CdrAuthServer.UI/package.json package.json
COPY ./cdr-auth-server/Source/CdrAuthServer.UI/package-lock.json package-lock.json
-COPY ./cdr-auth-server/Source/CdrAuthServer.UI/craco.config.js craco.config.js
-COPY ./cdr-auth-server/Source/CdrAuthServer.UI/.env.${target_environment} .env.local
+COPY ./cdr-auth-server/Source/CdrAuthServer.UI/.env.${target_environment} .env.${target_environment}
RUN npm ci
COPY ./cdr-auth-server/Source/CdrAuthServer.UI/. .
@@ -117,7 +116,7 @@ FROM base AS final
WORKDIR /app
# Auth UI #####################################################################
-COPY --from=ui-build /app/build ./cdrauthserver-ui
+COPY --from=ui-build /app/build /usr/share/nginx/html/ui
# Copy build files to nginx output folder.
COPY --from=ui-build /app/build /usr/share/nginx/html/ui
diff --git a/Source/Dockerfile.integration-tests b/Source/Dockerfile.integration-tests
index 99cc6f0..837f935 100644
--- a/Source/Dockerfile.integration-tests
+++ b/Source/Dockerfile.integration-tests
@@ -37,7 +37,7 @@ ARG FEED_URI
ENV VSS_NUGET_EXTERNAL_FEED_ENDPOINTS="{\"endpointCredentials\": [{\"endpoint\":\"${FEED_URI}\", \"username\":\"docker\", \"password\":\"${FEED_ACCESSTOKEN}\"}]}"
RUN echo $VSS_NUGET_EXTERNAL_FEED_ENDPOINTS
-RUN dotnet restore
-RUN dotnet build --configuration Release
+RUN dotnet restore -p:NuGetAudit=false
+RUN dotnet build --configuration Release --no-restore
ENTRYPOINT dotnet test --configuration Release --no-build --logger "trx;verbosity=detailed;LogFileName=results.trx;" --results-directory /testresults
diff --git a/Source/Energy/CDR.DataHolder.Energy.Domain/CDR.DataHolder.Energy.Domain.csproj b/Source/Energy/CDR.DataHolder.Energy.Domain/CDR.DataHolder.Energy.Domain.csproj
index 066b7b1..6c454a0 100644
--- a/Source/Energy/CDR.DataHolder.Energy.Domain/CDR.DataHolder.Energy.Domain.csproj
+++ b/Source/Energy/CDR.DataHolder.Energy.Domain/CDR.DataHolder.Energy.Domain.csproj
@@ -22,4 +22,8 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
\ No newline at end of file
diff --git a/Source/Energy/CDR.DataHolder.Energy.Repository/CDR.DataHolder.Energy.Repository.csproj b/Source/Energy/CDR.DataHolder.Energy.Repository/CDR.DataHolder.Energy.Repository.csproj
index 32a89f5..f81edd1 100644
--- a/Source/Energy/CDR.DataHolder.Energy.Repository/CDR.DataHolder.Energy.Repository.csproj
+++ b/Source/Energy/CDR.DataHolder.Energy.Repository/CDR.DataHolder.Energy.Repository.csproj
@@ -31,6 +31,10 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
diff --git a/Source/Energy/CDR.DataHolder.Energy.Repository/Infrastructure/MappingProfile.cs b/Source/Energy/CDR.DataHolder.Energy.Repository/Infrastructure/MappingProfile.cs
index d264773..d98afc9 100644
--- a/Source/Energy/CDR.DataHolder.Energy.Repository/Infrastructure/MappingProfile.cs
+++ b/Source/Energy/CDR.DataHolder.Energy.Repository/Infrastructure/MappingProfile.cs
@@ -7,28 +7,35 @@ namespace CDR.DataHolder.Energy.Repository.Infrastructure
{
public class MappingProfile : Profile
{
+ private const int AutoMapperMaxDepth = 32;
+
public MappingProfile()
{
CreateMap()
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
.ForMember(dest => dest.StartDate, source => source.MapFrom(source => source.StartDate.HasValue ? source.StartDate.Value.ToString("yyyy-MM-dd") : null))
.ForMember(dest => dest.EndDate, source => source.MapFrom(source => source.EndDate.HasValue ? source.EndDate.Value.ToString("yyyy-MM-dd") : null))
.ForMember(dest => dest.Amount, source => source.MapFrom(source => string.IsNullOrEmpty(source.Amount) ? null : decimal.Parse(source.Amount).ToString("F2")))
.ForMember(dest => dest.Percentage, source => source.MapFrom(source => string.IsNullOrEmpty(source.Percentage) ? null : decimal.Parse(source.Percentage).ToString("F2")))
.ForMember(dest => dest.AppliedTo, source => source.MapFrom(source => string.IsNullOrEmpty(source.AppliedTo) ? Array.Empty() : source.AppliedTo.Split(',', StringSplitOptions.RemoveEmptyEntries)))
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
.ForMember(dest => dest.StartDate, source => source.MapFrom(source => source.StartDate.ToString("yyyy-MM-dd")))
.ForMember(dest => dest.EndDate, source => source.MapFrom(source => source.EndDate.HasValue ? source.EndDate.Value.ToString("yyyy-MM-dd") : null))
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
.ForMember(dest => dest.Plans, source => source.MapFrom(source => source.AccountPlans))
.ForMember(dest => dest.Concessions, source => source.MapFrom(source => source.AccountConcessions))
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
.ForMember(
@@ -38,7 +45,8 @@ public MappingProfile()
.ForMember(dest => dest.CustomerId, source => source.MapFrom(s => s.Customer.CustomerId))
.ForMember(dest => dest.LoginId, source => source.MapFrom(s => s.Customer.LoginId))
.ForMember(dest => dest.CustomerUType, source => source.MapFrom(s => s.Customer.CustomerUType))
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
.ForMember(
@@ -48,19 +56,23 @@ public MappingProfile()
.ForMember(dest => dest.CustomerId, source => source.MapFrom(s => s.Customer.CustomerId))
.ForMember(dest => dest.LoginId, source => source.MapFrom(s => s.Customer.LoginId))
.ForMember(dest => dest.CustomerUType, source => source.MapFrom(s => s.Customer.CustomerUType))
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
.ForMember(dest => dest.Accounts, source => source.MapFrom(source => source.Accounts))
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
.IncludeMembers(source => source.Person, source => source)
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
.IncludeMembers(source => source.Organisation)
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
}
}
}
diff --git a/Source/Energy/CDR.DataHolder.Energy.Resource.API.UnitTests/CDR.DataHolder.Energy.Resource.API.UnitTests.csproj b/Source/Energy/CDR.DataHolder.Energy.Resource.API.UnitTests/CDR.DataHolder.Energy.Resource.API.UnitTests.csproj
index 4537232..eb0b586 100644
--- a/Source/Energy/CDR.DataHolder.Energy.Resource.API.UnitTests/CDR.DataHolder.Energy.Resource.API.UnitTests.csproj
+++ b/Source/Energy/CDR.DataHolder.Energy.Resource.API.UnitTests/CDR.DataHolder.Energy.Resource.API.UnitTests.csproj
@@ -63,6 +63,10 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
diff --git a/Source/Energy/CDR.DataHolder.Energy.Resource.API/Business/MappingProfile.cs b/Source/Energy/CDR.DataHolder.Energy.Resource.API/Business/MappingProfile.cs
index 3f69856..582e0c4 100644
--- a/Source/Energy/CDR.DataHolder.Energy.Resource.API/Business/MappingProfile.cs
+++ b/Source/Energy/CDR.DataHolder.Energy.Resource.API/Business/MappingProfile.cs
@@ -11,42 +11,52 @@ namespace CDR.DataHolder.Energy.Resource.API.Business
{
public class MappingProfile : Profile
{
+ private const int AutoMapperMaxDepth = 32;
+
public MappingProfile()
{
- CreateMap();
+ CreateMap().MaxDepth(AutoMapperMaxDepth);
CreateMap(typeof(Page<>), typeof(MetaPaginated))
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
.ForMember(dest => dest.ServicePointIds, source => source.MapFrom(source =>
source.ServicePoints == null ? Array.Empty() : source.ServicePoints.Select(sp => sp.ServicePointId)))
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
.ForMember(dest => dest.CreationDate, source => source.MapFrom(source =>
source.CreationDate == null ? string.Empty : source.CreationDate.Value.ToString("yyyy-MM-dd")))
.ForMember(dest => dest.Plans, source => source.MapFrom(source => source.Plans))
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
.IncludeBase()
.ForMember(dest => dest.OpenStatus, source => source.MapFrom(source => source.OpenStatus))
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap, EnergyAccountListResponse>()
.ForPath(dest => dest.Data.Accounts, source => source.MapFrom(source => source.Data))
.ForMember(dest => dest.Meta, source => source.MapFrom(source => source))
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap, EnergyAccountListResponse>()
.ForPath(dest => dest.Data.Accounts, source => source.MapFrom(source => source.Data))
.ForMember(dest => dest.Meta, source => source.MapFrom(source => source))
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
CreateMap()
.ForPath(dest => dest.Data.Concessions, source => source.MapFrom(source => source));
CreateMap()
- .ReverseMap();
+ .ReverseMap()
+ .MaxDepth(AutoMapperMaxDepth);
}
}
}
diff --git a/Source/Energy/CDR.DataHolder.Energy.Resource.API/CDR.DataHolder.Energy.Resource.API.csproj b/Source/Energy/CDR.DataHolder.Energy.Resource.API/CDR.DataHolder.Energy.Resource.API.csproj
index d714eb6..7e25a5f 100644
--- a/Source/Energy/CDR.DataHolder.Energy.Resource.API/CDR.DataHolder.Energy.Resource.API.csproj
+++ b/Source/Energy/CDR.DataHolder.Energy.Resource.API/CDR.DataHolder.Energy.Resource.API.csproj
@@ -45,6 +45,10 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
diff --git a/Source/Energy/CDR.DataHolder.Energy.Tests.IntegrationTests/CDR.DataHolder.Energy.Tests.IntegrationTests.csproj b/Source/Energy/CDR.DataHolder.Energy.Tests.IntegrationTests/CDR.DataHolder.Energy.Tests.IntegrationTests.csproj
index 5d2f87b..2b36b07 100644
--- a/Source/Energy/CDR.DataHolder.Energy.Tests.IntegrationTests/CDR.DataHolder.Energy.Tests.IntegrationTests.csproj
+++ b/Source/Energy/CDR.DataHolder.Energy.Tests.IntegrationTests/CDR.DataHolder.Energy.Tests.IntegrationTests.csproj
@@ -59,6 +59,10 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
diff --git a/Source/Shared/CDR.DataHolder.Admin.API/CDR.DataHolder.Admin.API.csproj b/Source/Shared/CDR.DataHolder.Admin.API/CDR.DataHolder.Admin.API.csproj
index b5fc86a..5b405a8 100644
--- a/Source/Shared/CDR.DataHolder.Admin.API/CDR.DataHolder.Admin.API.csproj
+++ b/Source/Shared/CDR.DataHolder.Admin.API/CDR.DataHolder.Admin.API.csproj
@@ -31,6 +31,10 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
diff --git a/Source/Shared/CDR.DataHolder.Manage.API/CDR.DataHolder.Manage.API.csproj b/Source/Shared/CDR.DataHolder.Manage.API/CDR.DataHolder.Manage.API.csproj
index 2858e08..05d35b0 100644
--- a/Source/Shared/CDR.DataHolder.Manage.API/CDR.DataHolder.Manage.API.csproj
+++ b/Source/Shared/CDR.DataHolder.Manage.API/CDR.DataHolder.Manage.API.csproj
@@ -25,6 +25,10 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
diff --git a/Source/Shared/CDR.DataHolder.Public.API/CDR.DataHolder.Public.API.csproj b/Source/Shared/CDR.DataHolder.Public.API/CDR.DataHolder.Public.API.csproj
index a2cf821..b8f0011 100644
--- a/Source/Shared/CDR.DataHolder.Public.API/CDR.DataHolder.Public.API.csproj
+++ b/Source/Shared/CDR.DataHolder.Public.API/CDR.DataHolder.Public.API.csproj
@@ -31,6 +31,10 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
diff --git a/Source/Shared/CDR.DataHolder.Shared.API.Gateway.mTLS/CDR.DataHolder.Shared.API.Gateway.mTLS.csproj b/Source/Shared/CDR.DataHolder.Shared.API.Gateway.mTLS/CDR.DataHolder.Shared.API.Gateway.mTLS.csproj
index 384d77c..0883573 100644
--- a/Source/Shared/CDR.DataHolder.Shared.API.Gateway.mTLS/CDR.DataHolder.Shared.API.Gateway.mTLS.csproj
+++ b/Source/Shared/CDR.DataHolder.Shared.API.Gateway.mTLS/CDR.DataHolder.Shared.API.Gateway.mTLS.csproj
@@ -36,6 +36,10 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
diff --git a/Source/Shared/CDR.DataHolder.Shared.API.Infrastructure.UnitTests/CDR.DataHolder.Shared.API.Infrastructure.UnitTests.csproj b/Source/Shared/CDR.DataHolder.Shared.API.Infrastructure.UnitTests/CDR.DataHolder.Shared.API.Infrastructure.UnitTests.csproj
index c50f5f6..4f89ae2 100644
--- a/Source/Shared/CDR.DataHolder.Shared.API.Infrastructure.UnitTests/CDR.DataHolder.Shared.API.Infrastructure.UnitTests.csproj
+++ b/Source/Shared/CDR.DataHolder.Shared.API.Infrastructure.UnitTests/CDR.DataHolder.Shared.API.Infrastructure.UnitTests.csproj
@@ -44,6 +44,10 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
diff --git a/Source/Shared/CDR.DataHolder.Shared.API.Infrastructure/CDR.DataHolder.Shared.API.Infrastructure.csproj b/Source/Shared/CDR.DataHolder.Shared.API.Infrastructure/CDR.DataHolder.Shared.API.Infrastructure.csproj
index 49eb7bb..f9447c3 100644
--- a/Source/Shared/CDR.DataHolder.Shared.API.Infrastructure/CDR.DataHolder.Shared.API.Infrastructure.csproj
+++ b/Source/Shared/CDR.DataHolder.Shared.API.Infrastructure/CDR.DataHolder.Shared.API.Infrastructure.csproj
@@ -25,9 +25,13 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
-
+
\ No newline at end of file
diff --git a/Source/Shared/CDR.DataHolder.Shared.Business/CDR.DataHolder.Shared.Business.csproj b/Source/Shared/CDR.DataHolder.Shared.Business/CDR.DataHolder.Shared.Business.csproj
index bb1d327..99b85ee 100644
--- a/Source/Shared/CDR.DataHolder.Shared.Business/CDR.DataHolder.Shared.Business.csproj
+++ b/Source/Shared/CDR.DataHolder.Shared.Business/CDR.DataHolder.Shared.Business.csproj
@@ -20,6 +20,10 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
diff --git a/Source/Shared/CDR.DataHolder.Shared.Repository/CDR.DataHolder.Shared.Repository.csproj b/Source/Shared/CDR.DataHolder.Shared.Repository/CDR.DataHolder.Shared.Repository.csproj
index 95d07a9..0d1c96d 100644
--- a/Source/Shared/CDR.DataHolder.Shared.Repository/CDR.DataHolder.Shared.Repository.csproj
+++ b/Source/Shared/CDR.DataHolder.Shared.Repository/CDR.DataHolder.Shared.Repository.csproj
@@ -25,4 +25,8 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
\ No newline at end of file
diff --git a/Source/run-integration-tests.ps1 b/Source/run-integration-tests.ps1
index 8330dad..0edfc0a 100644
--- a/Source/run-integration-tests.ps1
+++ b/Source/run-integration-tests.ps1
@@ -10,7 +10,7 @@ Write-Output "⚠ WARNING: Integration tests for MockDataHolder will use the exi
Write-Output "***********************************************************"
# Run integration tests
-docker compose -f docker-compose.IntegrationTests.yml up --build --abort-on-container-exit --exit-code-from mock-data-holder-integration-tests
+docker compose -f DockerCompose\docker-compose.IntegrationTests.Banking.yml up --build --abort-on-container-exit --exit-code-from mock-data-holder-integration-tests
$_lastExitCode = $LASTEXITCODE
# Stop containers
diff --git a/Source/supervisord.conf b/Source/supervisord.conf
index 3179947..e781c54 100644
--- a/Source/supervisord.conf
+++ b/Source/supervisord.conf
@@ -59,6 +59,7 @@ directory=/app/gateway-mtls
command=/usr/bin/dotnet /app/gateway-mtls/CDR.DataHolder.Shared.API.Gateway.mTLS.dll
[program:CDR.DataHolder.CDRAuthServer]
+priority=10
# stdout_logfile=/usr/bin/stdout
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
@@ -75,16 +76,17 @@ command=bash /app/wait-until-manage-healthy-then-start.sh /app/cdrauthserver/Cdr
# Inject REACT_APP_* environment variables into env.js
[program:CdrAuthServer-UI-InjectReactEnvironment]
+priority=1
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
-# directory=/app/cdrauthserver-ui
directory=/usr/share/nginx/html/ui
-command=npx --yes react-inject-env set -d .
+command=npx --yes react-inject-env set -d /usr/share/nginx/html/ui
[program:CdrAuthServer-UI]
+priority=5
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
-directory=/usr/share/nginx
+directory=/usr/share/nginx/html/ui
command=nginx -g "daemon off;"
autostart=true
autorestart=true