Skip to content

Commit 8ffe58d

Browse files
authored
Upgrade auth to dotnet 8 in parallel (#67)
Deploy a new dotnet 8 lambda function for the check token in parallel to the existing one.
1 parent ba62865 commit 8ffe58d

17 files changed

+256
-109
lines changed

.circleci/config.yml

+39-21
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
version: 2.1
22

33
orbs:
4-
aws-cli: circleci/[email protected]
54
aws_assume_role: lbh-hackit/[email protected]
5+
node: circleci/[email protected]
66

77
executors:
88
docker-python:
99
docker:
10-
- image: circleci/python:3.7
10+
- image: cimg/python:3.12
1111
docker-terraform:
1212
docker:
1313
- image: "hashicorp/terraform:0.12.29"
1414
docker-dotnet:
1515
docker:
16-
- image: mcr.microsoft.com/dotnet/core/sdk:3.1
16+
- image: mcr.microsoft.com/dotnet/sdk:8.0
1717

1818
references:
1919
workspace_root: &workspace_root "~"
@@ -61,29 +61,25 @@ commands:
6161
parameters:
6262
stage:
6363
type: string
64+
path:
65+
type: string
66+
default: "./ApiAuthVerifyToken/"
6467
steps:
6568
- *attach_workspace
6669
- checkout
6770
- setup_remote_docker
68-
- run:
69-
name: Install Node.js
70-
command: |
71-
curl -sL https://deb.nodesource.com/setup_13.x | bash -
72-
apt-get update && apt-get install -y nodejs
73-
- run:
74-
name: Install serverless CLI
75-
command: npm i -g serverless
71+
- node/install
7672
- run:
7773
name: Build lambda
7874
command: |
79-
cd ./ApiAuthVerifyToken/
75+
cd <<parameters.path>>
8076
chmod +x ./build.sh
8177
./build.sh
8278
- run:
8379
name: Deploy lambda
8480
command: |
85-
cd ./ApiAuthVerifyToken/
86-
sls deploy --stage <<parameters.stage>> --conceal
81+
cd <<parameters.path>>
82+
npx --yes --debug serverless deploy --stage <<parameters.stage>> --conceal
8783
jobs:
8884
check-code-formatting:
8985
executor: docker-dotnet
@@ -102,10 +98,10 @@ jobs:
10298
- setup_remote_docker
10399
- run:
104100
name: build
105-
command: docker-compose build api-auth-verify-token-test
101+
command: docker compose build api-auth-verify-token-test
106102
- run:
107103
name: Run tests
108-
command: docker-compose run api-auth-verify-token-test
104+
command: docker compose run api-auth-verify-token-test
109105
terraform-init-and-apply-to-development:
110106
executor: docker-terraform
111107
steps:
@@ -153,10 +149,31 @@ jobs:
153149
stage: "production"
154150

155151
workflows:
152+
check:
153+
jobs:
154+
- check-code-formatting:
155+
filters:
156+
branches:
157+
ignore:
158+
- master
159+
- development
160+
- build-and-test:
161+
filters:
162+
branches:
163+
ignore:
164+
- master
165+
- development
166+
156167
check-and-deploy-development:
157168
jobs:
158-
- check-code-formatting
159-
- build-and-test
169+
- check-code-formatting:
170+
filters:
171+
branches:
172+
only: development
173+
- build-and-test:
174+
filters:
175+
branches:
176+
only: development
160177
- assume-role-development:
161178
context: api-assume-role-development-context
162179
requires:
@@ -176,6 +193,7 @@ workflows:
176193
filters:
177194
branches:
178195
only: development
196+
179197
check-and-deploy-staging-and-production:
180198
jobs:
181199
- build-and-test:
@@ -185,10 +203,10 @@ workflows:
185203
- assume-role-staging:
186204
context: api-assume-role-staging-context
187205
requires:
188-
- build-and-test
206+
- build-and-test
189207
filters:
190-
branches:
191-
only: master
208+
branches:
209+
only: master
192210
- terraform-init-and-apply-to-staging:
193211
requires:
194212
- assume-role-staging

ApiAuthVerifyToken.Tests/ApiAuthVerifyToken.Tests.csproj

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk.Web">
22
<PropertyGroup>
3-
<TargetFramework>netcoreapp3.1</TargetFramework>
3+
<TargetFramework>net8.0</TargetFramework>
44

55
<IsPackable>false</IsPackable>
66
<IsTestProject>true</IsTestProject>
@@ -14,17 +14,17 @@
1414
<PackageReference Include="FluentAssertions" Version="5.10.3" />
1515
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="3.0.0" />
1616
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="3.1.4" />
17-
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.7">
17+
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.12">
1818
<PrivateAssets>all</PrivateAssets>
1919
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2020
</PackageReference>
21-
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.3" />
21+
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.12" />
2222
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
2323
<PackageReference Include="NUnit3TestAdapter" Version="3.12.0" />
2424
<PackageReference Include="Bogus" Version="25.0.4" />
2525
<PackageReference Include="Moq" Version="4.10.1" />
2626
<PackageReference Include="nunit" Version="3.11.0" />
27-
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.1.3" />
27+
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.11" />
2828
</ItemGroup>
2929

3030
<ItemGroup>

ApiAuthVerifyToken.Tests/DatabaseTests.cs

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using ApiAuthVerifyToken.V1.Infrastructure;
23
using Microsoft.EntityFrameworkCore;
34
using Microsoft.EntityFrameworkCore.Storage;
@@ -14,6 +15,7 @@ public class DatabaseTests
1415
[SetUp]
1516
public void RunBeforeAnyTests()
1617
{
18+
AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
1719
var builder = new DbContextOptionsBuilder();
1820
builder.UseNpgsql(ConnectionString.TestDatabase());
1921
DatabaseContext = new TokenDatabaseContext(builder.Options);

ApiAuthVerifyToken.Tests/Dockerfile

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM mcr.microsoft.com/dotnet/core/sdk:3.1
1+
FROM mcr.microsoft.com/dotnet/sdk:8.0
22

33
# disable microsoft telematry
44
ENV DOTNET_CLI_TELEMETRY_OPTOUT='true'
@@ -10,12 +10,11 @@ COPY ./ApiAuthVerifyToken.sln ./
1010
COPY ./ApiAuthVerifyToken/ApiAuthVerifyToken.csproj ./ApiAuthVerifyToken/
1111
COPY ./ApiAuthVerifyToken.Tests/ApiAuthVerifyToken.Tests.csproj ./ApiAuthVerifyToken.Tests/
1212

13-
RUN dotnet restore ./ApiAuthVerifyToken/ApiAuthVerifyToken.csproj
14-
RUN dotnet restore ./ApiAuthVerifyToken.Tests/ApiAuthVerifyToken.Tests.csproj
13+
RUN dotnet restore ApiAuthVerifyToken
14+
RUN dotnet restore ApiAuthVerifyToken.Tests
1515

1616
# Copy everything else and build
17-
COPY . .
17+
COPY . ./
1818

1919
RUN dotnet build -c debug -o out ApiAuthVerifyToken.Tests/ApiAuthVerifyToken.Tests.csproj
20-
21-
CMD dotnet test
20+
CMD dotnet test ApiAuthVerifyToken.Tests/ApiAuthVerifyToken.Tests.csproj

ApiAuthVerifyToken.Tests/V1/AcceptanceTests/VerifyTokenAcceptanceTests.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ public void Setup()
4040
_mockAwsStsGateway = new Mock<IAwsStsGateway>();
4141
_mockDynamoDbGateway = new Mock<IDynamoDbGateway>();
4242
//set up env vars
43-
Environment.SetEnvironmentVariable("jwtSecret", _fixture.Create<string>());
44-
Environment.SetEnvironmentVariable("hackneyUserAuthTokenJwtSecret", _faker.Random.AlphaNumeric(25));
43+
Environment.SetEnvironmentVariable("jwtSecret", _faker.Random.AlphaNumeric(50));
44+
Environment.SetEnvironmentVariable("hackneyUserAuthTokenJwtSecret", _faker.Random.AlphaNumeric(50));
4545
//set up JWT tokens
4646
_allowedGroups = new List<string> { _faker.Random.Word(), _faker.Random.Word() };
4747
_jwtServiceFlow = GenerateJwtHelper.GenerateJwtToken();
@@ -91,7 +91,7 @@ public void FunctionShouldReturnAPIGatewayCustomAuthorizerPolicyWithDenyEffectWh
9191
var lambdaRequest = _fixture.Build<APIGatewayCustomAuthorizerRequest>().Create();
9292
lambdaRequest.Headers["Authorization"] = _jwtServiceFlow;
9393
//change jwt secret to simulate failure of validating token
94-
Environment.SetEnvironmentVariable("jwtSecret", _fixture.Create<string>());
94+
Environment.SetEnvironmentVariable("jwtSecret", _faker.Random.AlphaNumeric(50));
9595
var result = _classUnderTest.VerifyToken(lambdaRequest);
9696

9797
result.Should().BeOfType<APIGatewayCustomAuthorizerResponse>();

ApiAuthVerifyToken.Tests/V1/UseCase/VerifyAccessUseCaseTests.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ public void Setup()
3232
_mockAwsStsGateway = new Mock<IAwsStsGateway>();
3333
_mockDynamoDbGateway = new Mock<IDynamoDbGateway>();
3434
_classUnderTest = new VerifyAccessUseCase(_mockDatabaseGateway.Object, _mockAwsApiGateway.Object, _mockAwsStsGateway.Object, _mockDynamoDbGateway.Object);
35-
Environment.SetEnvironmentVariable("jwtSecret", _faker.Random.AlphaNumeric(25));
36-
Environment.SetEnvironmentVariable("hackneyUserAuthTokenJwtSecret", _faker.Random.AlphaNumeric(25));
35+
Environment.SetEnvironmentVariable("jwtSecret", _faker.Random.AlphaNumeric(50));
36+
Environment.SetEnvironmentVariable("hackneyUserAuthTokenJwtSecret", _faker.Random.AlphaNumeric(50));
3737
}
3838
#region Service Auth Flow
3939

@@ -54,7 +54,7 @@ public void ShouldReturnFalseIfTokenIsNotValid()
5454
{
5555
var request = GenerateAuthorizerRequest(GenerateJwtHelper.GenerateJwtToken());
5656
//change key to simulate failed validation
57-
Environment.SetEnvironmentVariable("jwtSecret", _faker.Random.AlphaNumeric(16));
57+
Environment.SetEnvironmentVariable("jwtSecret", _faker.Random.AlphaNumeric(50));
5858
var result = _classUnderTest.ExecuteServiceAuth(request);
5959
result.Allow.Should().BeFalse();
6060
result.User.Should().Be("user");

ApiAuthVerifyToken.sln

+19-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
3-
# Visual Studio 2012
4-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ApiAuthVerifyToken", "ApiAuthVerifyToken\ApiAuthVerifyToken.csproj", "{6F482163-3F51-487F-8F7D-37A1D4DAEA8B}"
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.9.34723.18
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ApiAuthVerifyToken", "ApiAuthVerifyToken\ApiAuthVerifyToken.csproj", "{6F482163-3F51-487F-8F7D-37A1D4DAEA8B}"
57
EndProject
6-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ApiAuthVerifyToken.Tests", "ApiAuthVerifyToken.Tests\ApiAuthVerifyToken.Tests.csproj", "{DE8E4E61-EB76-416B-8417-E8F2F6A0C0D3}"
8+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ApiAuthVerifyToken.Tests", "ApiAuthVerifyToken.Tests\ApiAuthVerifyToken.Tests.csproj", "{DE8E4E61-EB76-416B-8417-E8F2F6A0C0D3}"
79
EndProject
810
Global
911
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -19,5 +21,19 @@ Global
1921
{DE8E4E61-EB76-416B-8417-E8F2F6A0C0D3}.Debug|Any CPU.Build.0 = Debug|Any CPU
2022
{DE8E4E61-EB76-416B-8417-E8F2F6A0C0D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
2123
{DE8E4E61-EB76-416B-8417-E8F2F6A0C0D3}.Release|Any CPU.Build.0 = Release|Any CPU
24+
{310A6722-973C-4CAF-952B-EA7CBF4FEC88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
25+
{310A6722-973C-4CAF-952B-EA7CBF4FEC88}.Debug|Any CPU.Build.0 = Debug|Any CPU
26+
{310A6722-973C-4CAF-952B-EA7CBF4FEC88}.Release|Any CPU.ActiveCfg = Release|Any CPU
27+
{310A6722-973C-4CAF-952B-EA7CBF4FEC88}.Release|Any CPU.Build.0 = Release|Any CPU
28+
{466564FF-AD08-447B-ADAB-BB8A9395D9E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
29+
{466564FF-AD08-447B-ADAB-BB8A9395D9E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
30+
{466564FF-AD08-447B-ADAB-BB8A9395D9E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
31+
{466564FF-AD08-447B-ADAB-BB8A9395D9E0}.Release|Any CPU.Build.0 = Release|Any CPU
32+
EndGlobalSection
33+
GlobalSection(SolutionProperties) = preSolution
34+
HideSolutionNode = FALSE
35+
EndGlobalSection
36+
GlobalSection(ExtensibilityGlobals) = postSolution
37+
SolutionGuid = {041ABF76-4241-466B-9034-59E4C0520DCC}
2238
EndGlobalSection
2339
EndGlobal
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>netcoreapp3.1</TargetFramework>
4+
<TargetFramework>net8.0</TargetFramework>
55
</PropertyGroup>
66
<PropertyGroup>
77
<GenerateDocumentationFile>true</GenerateDocumentationFile>
88
<NoWarn>$(NoWarn);1591</NoWarn>
99
<CodeAnalysisTreatWarningsAsErrors>true</CodeAnalysisTreatWarningsAsErrors>
10-
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
10+
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
1111
<RunAnalyzersDuringBuild>true</RunAnalyzersDuringBuild>
1212
</PropertyGroup>
1313

@@ -18,21 +18,22 @@
1818
<PackageReference Include="AWSSDK.DynamoDBv2" Version="3.7.0.12" />
1919
<PackageReference Include="AWSSDK.Extensions.NETCore.Setup" Version="3.7.0.1" />
2020
<PackageReference Include="AWSSDK.SecurityToken" Version="3.7.0.9" />
21+
<PackageReference Include="JWT" Version="11.0.0" />
2122
<PackageReference Include="Microsoft.AspNetCore.HealthChecks" Version="1.0.0" />
2223
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="4.1.1" />
2324
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer" Version="4.1.1" />
2425
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="3.0.0" />
25-
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.7">
26+
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.12">
2627
<PrivateAssets>all</PrivateAssets>
2728
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2829
</PackageReference>
29-
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.3" />
30+
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.12" />
3031
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.4.1" />
3132
<PackageReference Include="Swashbuckle.AspNetCore.Swagger" Version="5.4.1" />
3233
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="5.4.1" />
33-
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="5.4.1" />
34-
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.1.3" />
35-
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.7.1" />
34+
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="7.2.0" />
35+
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.11" />
36+
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.6.1" />
3637
</ItemGroup>
3738

3839
</Project>

ApiAuthVerifyToken/ConfigureServices.cs

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ public static void Configure(this IServiceCollection services)
1717

1818
var connectionString = Environment.GetEnvironmentVariable("CONNECTION_STRING");
1919

20+
AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
21+
2022
services.AddDbContext<TokenDatabaseContext>(
2123
opt => opt.UseNpgsql(connectionString));
2224

ApiAuthVerifyToken/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM mcr.microsoft.com/dotnet/core/sdk:3.1
1+
FROM mcr.microsoft.com/dotnet/sdk:8.0
22

33
WORKDIR /app
44

0 commit comments

Comments
 (0)