Skip to content

Commit 9a30e37

Browse files
authored
Merge pull request #103 from Virtual-Finland-Development/fix/todos-cleanup
Cleanups and adjustments
2 parents fa86b8a + 33857ca commit 9a30e37

17 files changed

Lines changed: 54 additions & 38 deletions

File tree

VirtualFinland.UserAPI/src/VirtualFinland.UsersAPI/Activities/Productizer/Operations/User/GetUserProfile.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ public async Task<User> Handle(Query request, CancellationToken cancellationToke
4949
.Include(p => p.AdditionalInformation).ThenInclude(ai => ai!.Address)
5050
.SingleAsync(p => p.Id == request.User.PersonId, cancellationToken);
5151

52-
// TODO - To be decided: This default search profile in the user API call can be possibly removed when requirement are more clear
5352
var dbUserDefaultSearchProfile = await _usersDbContext.SearchProfiles.FirstOrDefaultAsync(o => o.IsDefault && o.PersonId == dbUser.Id, cancellationToken);
5453

5554
List<UserResponseOccupation>? occupations = null;

VirtualFinland.UserAPI/src/VirtualFinland.UsersAPI/Activities/Productizer/Operations/User/UpdateUserProfile.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -232,9 +232,6 @@ private async Task<List<ValidationErrorDetail>> ValidateCountryCodesLogic(Comman
232232
return validationErrors;
233233
}
234234

235-
/// <summary>
236-
/// TODO - To be decided: This default search profile in the user API call can be possibly removed when requirement are more clear
237-
/// </summary>
238235
/// <param name="dbUserDefaultSearchProfile"></param>
239236
/// <param name="dbUser"></param>
240237
/// <param name="request"></param>

VirtualFinland.UserAPI/src/VirtualFinland.UsersAPI/Activities/User/Operations/GetUser.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ public async Task<User> Handle(Query request, CancellationToken cancellationToke
4747
.Include(u => u.AdditionalInformation).ThenInclude(ai => ai!.Address)
4848
.SingleAsync(o => o.Id == request.User.PersonId, cancellationToken);
4949

50-
// TODO - To be decided: This default search profile in the user API call can be possibly removed when requirement are more clear
5150
var dbUserDefaultSearchProfile = await _usersDbContext.SearchProfiles.FirstOrDefaultAsync(o => o.IsDefault && o.PersonId == dbUser.Id, cancellationToken);
5251

5352
List<UserResponseOccupation>? occupations = null;

VirtualFinland.UserAPI/src/VirtualFinland.UsersAPI/Activities/User/Operations/UpdateUser.cs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -294,11 +294,7 @@ private static ICollection<Occupation> GetUpdatedOccupations(
294294
continue;
295295
}
296296

297-
var existingOccupation = dbUserOccupations.FirstOrDefault(o => o.Id == occupation.Id);
298-
299-
// TODO: Return some error about invalid guid ?
300-
if (existingOccupation is null) continue;
301-
297+
var existingOccupation = dbUserOccupations.FirstOrDefault(o => o.Id == occupation.Id) ?? throw new BadRequestException("Invalid occupation ID");
302298
if (occupation.Delete is true)
303299
{
304300
dbUserOccupations.Remove(existingOccupation);
@@ -370,9 +366,6 @@ private async Task<List<ValidationErrorDetail>> ValidateCountryCodesLogic(Comman
370366
return validationErrors;
371367
}
372368

373-
/// <summary>
374-
/// TODO - To be decided: This default search profile in the user API call can be possibly removed when requirement are more clear
375-
/// </summary>
376369
/// <param name="dbUserDefaultSearchProfile"></param>
377370
/// <param name="dbUser"></param>
378371
/// <param name="request"></param>

VirtualFinland.UserAPI/src/VirtualFinland.UsersAPI/Helpers/Extensions/EnvironmentExtensions.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ public static class Environments
55
public static readonly string Local = "local";
66
public static readonly string Development = "dev";
77
public static readonly string Staging = "staging";
8-
public static readonly string Production = "prod";
8+
public static readonly string Production = "production";
9+
public static readonly string MvpStaging = "mvp-staging";
10+
public static readonly string MvpProduction = "mvp-production";
911
}
1012

1113
public static class EnvironmentExtensions
@@ -34,19 +36,19 @@ public static bool IsStaging(this IHostEnvironment hostEnvironment)
3436
{
3537
if (hostEnvironment == null)
3638
{
37-
throw new ArgumentException(nameof(hostEnvironment));
39+
throw new ArgumentException(null, nameof(hostEnvironment));
3840
}
3941

40-
return hostEnvironment.IsEnvironment(Environments.Staging);
42+
return hostEnvironment.IsEnvironment(Environments.MvpStaging) || hostEnvironment.IsEnvironment(Environments.Staging);
4143
}
4244

4345
public static bool IsProduction(this IHostEnvironment hostEnvironment)
4446
{
4547
if (hostEnvironment == null)
4648
{
47-
throw new ArgumentException(nameof(hostEnvironment));
49+
throw new ArgumentException(null, nameof(hostEnvironment));
4850
}
4951

50-
return hostEnvironment.IsEnvironment(Environments.Production);
52+
return hostEnvironment.IsEnvironment(Environments.MvpProduction) || hostEnvironment.IsEnvironment(Environments.Production);
5153
}
5254
}

VirtualFinland.UserAPI/src/VirtualFinland.UsersAPI/Migrations/20230906150120_TermsOfService.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ protected override void Up(MigrationBuilder migrationBuilder)
6868
column: "Version",
6969
unique: true);
7070

71-
// @TODO Manage terms of service by some control mechanism and not by migrations
7271
migrationBuilder.InsertData(
7372
table: "TermsOfServices",
7473
columns: new[] { "Id", "Url", "Description", "Version", "Created", "Modified" },

VirtualFinland.UserAPI/src/VirtualFinland.UsersAPI/Models/UsersDatabase/Auditable.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,13 @@ public void SetupAuditEvent(UsersDbContext dbContext, IRequestAuthenticationCand
3030

3131
protected void SetupAuditAddition(IRequestAuthenticationCandinate user)
3232
{
33-
Created = DateTime.Now;
33+
Created = DateTime.UtcNow;
3434
SetupAuditUpdate(user);
3535
}
3636

3737
protected void SetupAuditUpdate(IRequestAuthenticationCandinate user)
3838
{
39-
Modified = DateTime.Now;
39+
Modified = DateTime.UtcNow;
4040
Metadata = new AuditableMetadata(user);
4141
}
4242
}

VirtualFinland.UserAPI/src/VirtualFinland.UsersAPI/Program.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@
118118
.UseQuerySplittingBehavior(QuerySplittingBehavior.SingleQuery)
119119
);
120120
});
121-
AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true); // @TODO: Resolve what changed in datetime inserting that causes this to be needed
122121

123122
//
124123
// Redis connection
@@ -168,20 +167,19 @@
168167
//
169168
var app = builder.Build();
170169

171-
// Use swagger only in non-production environments
172-
if (!EnvironmentExtensions.IsProduction(app.Environment))
170+
// Use swagger only in development
171+
if (EnvironmentExtensions.IsLocal(app.Environment) || EnvironmentExtensions.IsDevelopment(app.Environment))
173172
{
174173
app.UseSwagger();
175174
app.UseSwaggerUI();
176175

177-
// global cors policy
178-
app.UseCors(x => x
176+
// Direct cors requests used in dev-stages
177+
app.UseCors(builder => builder
179178
.AllowAnyOrigin()
180179
.AllowAnyMethod()
181180
.AllowAnyHeader());
182181
}
183182

184-
185183
app.UseSerilogRequestLogging(options =>
186184
{
187185
options.EnrichDiagnosticContext = (diagnosticContext, httpContext) =>

VirtualFinland.UserAPI/src/VirtualFinland.UsersAPI/Security/ApplicationSecurity.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ public class ApplicationSecurity : IApplicationSecurity
99
{
1010
private readonly ITermsOfServiceRepository _termsOfServiceRepository;
1111
private readonly SecuritySetup _setup;
12+
private readonly int _initializationTimeoutInMilliseconds = 10000;
13+
1214
public ApplicationSecurity(ITermsOfServiceRepository termsOfServiceRepository, SecuritySetup securitySetup)
1315
{
1416
_termsOfServiceRepository = termsOfServiceRepository;
@@ -27,7 +29,8 @@ public async Task<RequestAuthenticationCandinate> ParseJwtToken(string token)
2729
if (!tokenHandler.CanReadToken(token)) throw new NotAuthorizedException("The given token is not valid");
2830
var parsedToken = tokenHandler.ReadJwtToken(token);
2931

30-
// Resolve the security feature by token issuer (must be enabled) // @TODO: ensure the security feature is loaded before this
32+
// Resolve the security feature by token issuer (must be enabled)
33+
await EnsureSecurityInitializationCompleted();
3134
var tokenIssuer = parsedToken.Issuer;
3235
var securityFeature = _setup.Features.Find(o => o.Issuer == tokenIssuer) ?? throw new NotAuthorizedException("The given token issuer is not valid");
3336

@@ -49,4 +52,17 @@ public async Task VerifyPersonTermsOfServiceAgreement(Guid personId)
4952
// Fetch person terms of service agreement
5053
_ = await _termsOfServiceRepository.GetTermsOfServiceAgreementOfTheLatestTermsByPersonId(personId) ?? throw new NotAuthorizedException("User has not accepted the latest terms of service.");
5154
}
55+
56+
/// <summary>
57+
/// All the enabled security features must be initialized before the application can be used, verify that the initializations are completed
58+
/// </summary>
59+
private async Task EnsureSecurityInitializationCompleted()
60+
{
61+
var initializationTimeout = DateTime.Now.AddMilliseconds(_initializationTimeoutInMilliseconds);
62+
while (_setup.Features.Any(o => !o.IsInitialized))
63+
{
64+
if (DateTime.Now > initializationTimeout) throw new NotAuthorizedException("Security initialization timeout");
65+
await Task.Delay(100);
66+
}
67+
}
5268
}

VirtualFinland.UserAPI/src/VirtualFinland.UsersAPI/Security/Features/ISecurityFeature.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ public interface ISecurityFeature
1313
Task ValidateSecurityTokenAudience(string audience);
1414

1515
public string Issuer { get; }
16+
public bool IsInitialized { get; set; }
1617
}

0 commit comments

Comments
 (0)