Skip to content

Commit

Permalink
Merge pull request #942 from ITfoxtec/test
Browse files Browse the repository at this point in the history
Test
  • Loading branch information
Revsgaard authored Sep 4, 2024
2 parents 554aa5e + ad76399 commit fb38649
Show file tree
Hide file tree
Showing 17 changed files with 39 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@ public TSamlUpPartyReadMetadataController(TelemetryScopedLogger logger, IMapper
{
case Api.SamlReadMetadataType.Url:
samlUpParty.MetadataUrl = samlReadMetadataRequest.Metadata;
await samlMetadataReadLogic.PopulateModelAsync(samlUpParty);
samlUpParty = await samlMetadataReadLogic.PopulateModelAsync(samlUpParty);
break;
case Api.SamlReadMetadataType.Xml:
await samlMetadataReadLogic.PopulateModelAsync(samlUpParty, samlReadMetadataRequest.Metadata);
samlUpParty = await samlMetadataReadLogic.PopulateModelAsync(samlUpParty, samlReadMetadataRequest.Metadata);
break;
default:
throw new NotSupportedException();
Expand Down
2 changes: 1 addition & 1 deletion src/FoxIDs.Control/FoxIDs.Control.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Version>1.9.27</Version>
<Version>1.9.28</Version>
<RootNamespace>FoxIDs</RootNamespace>
<Authors>Anders Revsgaard</Authors>
<Company>ITfoxtec</Company>
Expand Down
2 changes: 1 addition & 1 deletion src/FoxIDs.Control/Logic/OidcDiscoveryReadUpLogic.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public async Task<bool> PopulateModelAsync(ModelStateDictionary modelState, MPar
{
if (mp.UpdateState != PartyUpdateStates.Manual)
{
await oidcDiscoveryReadModelLogic.PopulateModelAsync(mp);
_ = await oidcDiscoveryReadModelLogic.PopulateModelAsync(mp);

if(mp.UpdateState == PartyUpdateStates.AutomaticStopped)
{
Expand Down
2 changes: 1 addition & 1 deletion src/FoxIDs.Control/Logic/SamlMetadataReadUpLogic.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public async Task<bool> PopulateModelAsync(ModelStateDictionary modelState, Saml
{
if (mp.UpdateState != PartyUpdateStates.Manual)
{
await samlMetadataReadLogic.PopulateModelAsync(mp);
_ = await samlMetadataReadLogic.PopulateModelAsync(mp);

if (mp.UpdateState == PartyUpdateStates.AutomaticStopped)
{
Expand Down
2 changes: 1 addition & 1 deletion src/FoxIDs.ControlClient/FoxIDs.ControlClient.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Version>1.9.27</Version>
<Version>1.9.28</Version>
<RootNamespace>FoxIDs.Client</RootNamespace>
<Authors>Anders Revsgaard</Authors>
<Company>ITfoxtec</Company>
Expand Down
2 changes: 1 addition & 1 deletion src/FoxIDs.ControlShared/FoxIDs.ControlShared.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Version>1.9.27</Version>
<Version>1.9.28</Version>
<RootNamespace>FoxIDs</RootNamespace>
<Authors>Anders Revsgaard</Authors>
<Company>ITfoxtec</Company>
Expand Down
2 changes: 1 addition & 1 deletion src/FoxIDs.Shared/FoxIDs.Shared.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Version>1.9.27</Version>
<Version>1.9.28</Version>
<RootNamespace>FoxIDs</RootNamespace>
<Authors>Anders Revsgaard</Authors>
<Company>ITfoxtec</Company>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,6 @@ protected virtual void ActionExecutionInit(ActionExecutedContext resultContext)

protected virtual void SetHeaders(HttpContext httpContext)
{
logger.ScopeTrace(() => $"Adding http security headers. Is {(isHtmlContent ? string.Empty : "not")} view.");

httpContext.Response.SetHeader("X-Content-Type-Options", "nosniff");
httpContext.Response.SetHeader("Referrer-Policy", "no-referrer");
httpContext.Response.SetHeader("X-XSS-Protection", "1; mode=block");
Expand All @@ -62,8 +60,6 @@ protected virtual void SetHeaders(HttpContext httpContext)
httpContext.Response.SetHeader("Content-Security-Policy", csp);
httpContext.Response.SetHeader("X-Content-Security-Policy", csp);
}

logger.ScopeTrace(() => $"Http security headers added.");
}

protected virtual void HeaderXFrameOptions(HttpContext httpContext)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class OidcDiscoveryReadModelLogic<MParty, MClient> : OidcDiscoveryReadLog
public OidcDiscoveryReadModelLogic(IHttpClientFactory httpClientFactory) : base(httpClientFactory)
{ }

public async Task PopulateModelAsync(MParty party)
public async Task<MParty> PopulateModelAsync(MParty party)
{
(var oidcDiscovery, var jsonWebKeySet) = await GetOidcDiscoveryAndValidateAsync(party.Authority);

Expand Down Expand Up @@ -60,6 +60,8 @@ public async Task PopulateModelAsync(MParty party)
key.X5tS256 = null;
}
}

return party;
}

private void CorrectFacebookOidcDiscoveryAddTokenEndpoint(OidcDiscovery oidcDiscovery)
Expand Down
12 changes: 7 additions & 5 deletions src/FoxIDs.Shared/Logic/Parties/SamlMetadataReadLogic.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ public SamlMetadataReadLogic(IHttpClientFactory httpClientFactory)
this.httpClientFactory = httpClientFactory;
}

public async Task PopulateModelAsync(SamlUpParty party)
public async Task<SamlUpParty> PopulateModelAsync(SamlUpParty party)
{
var metadata = await ReadMetadataAsync(party.MetadataUrl);
await PopulateModelAsync(party, metadata);
return await PopulateModelAsync(party, metadata);
}

private async Task<string> ReadMetadataAsync(string metadataUrl)
Expand All @@ -42,7 +42,7 @@ private async Task<string> ReadMetadataAsync(string metadataUrl)
}
}

public async Task PopulateModelAsync(SamlUpParty party, string metadataXml)
public async Task<SamlUpParty> PopulateModelAsync(SamlUpParty party, string metadataXml)
{
if(metadataXml?.Length > Constants.Models.SamlParty.MetadataXmlSize)
{
Expand All @@ -51,10 +51,10 @@ public async Task PopulateModelAsync(SamlUpParty party, string metadataXml)

var entityDescriptor = new EntityDescriptor();
entityDescriptor.ReadIdPSsoDescriptor(metadataXml);
await PopulateModelInternalAsync(party, entityDescriptor);
return await PopulateModelInternalAsync(party, entityDescriptor);
}

private async Task PopulateModelInternalAsync(SamlUpParty party, EntityDescriptor entityDescriptor)
private async Task<SamlUpParty> PopulateModelInternalAsync(SamlUpParty party, EntityDescriptor entityDescriptor)
{
if (entityDescriptor.IdPSsoDescriptor != null)
{
Expand Down Expand Up @@ -98,6 +98,8 @@ private async Task PopulateModelInternalAsync(SamlUpParty party, EntityDescripto
{
party.SignAuthnRequest = entityDescriptor.IdPSsoDescriptor.WantAuthnRequestsSigned.Value;
}

return party;
}
else
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ private void Init()
}
if (settings.Options.Cache == CacheOptions.MongoDb)
{
_ = InitCollection<DataTtlDocument>(database, settings.MongoDb.CacheCollectionName);
InitTtlCollection<DataTtlDocument>(database, settings.MongoDb.CacheCollectionName);
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/FoxIDs.SharedBase/FoxIDs.SharedBase.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Version>1.9.27</Version>
<Version>1.9.28</Version>
<RootNamespace>FoxIDs</RootNamespace>
<Authors>Anders Revsgaard</Authors>
<Company>ITfoxtec</Company>
Expand Down
2 changes: 1 addition & 1 deletion src/FoxIDs/FoxIDs.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Version>1.9.27</Version>
<Version>1.9.28</Version>
<RootNamespace>FoxIDs</RootNamespace>
<Authors>Anders Revsgaard</Authors>
<Company>ITfoxtec</Company>
Expand Down
2 changes: 1 addition & 1 deletion src/FoxIDs/Logic/Oidc/OidcAuthUpLogic.cs
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ public async Task<IActionResult> AuthenticationRequestAsync(string partyId)
var party = await tenantDataRepository.GetAsync<TParty>(oidcUpSequenceData.UpPartyId);
logger.SetScopeProperty(Constants.Logs.UpPartyClientId, party.Client.ClientId);

await oidcDiscoveryReadUpLogic.CheckOidcDiscoveryAndUpdatePartyAsync(party);
party = await oidcDiscoveryReadUpLogic.CheckOidcDiscoveryAndUpdatePartyAsync(party);

var nonce = RandomGenerator.GenerateNonce();
var loginCallBackUrl = HttpContext.GetUpPartyUrl(party.Name, Constants.Routes.OAuthController, Constants.Endpoints.AuthorizationResponse, partyBindingPattern: party.PartyBindingPattern);
Expand Down
14 changes: 8 additions & 6 deletions src/FoxIDs/Logic/Oidc/OidcDiscoveryReadUpLogic.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,24 +26,24 @@ public OidcDiscoveryReadUpLogic(FoxIDsSettings settings, TelemetryScopedLogger l
this.oidcDiscoveryReadModelLogic = oidcDiscoveryReadModelLogic;
}

public async Task CheckOidcDiscoveryAndUpdatePartyAsync(TParty party)
public async Task<TParty> CheckOidcDiscoveryAndUpdatePartyAsync(TParty party)
{
if (party.UpdateState != PartyUpdateStates.Automatic)
{
return;
return party;
}

var lastUpdated = DateTimeOffset.FromUnixTimeSeconds(party.LastUpdated);
if (lastUpdated.AddSeconds(party.OidcDiscoveryUpdateRate.Value) >= DateTimeOffset.UtcNow)
{
return;
return party;
}

var key = UpdateWaitPeriodKey(party.Id);
if (await cacheProvider.ExistsAsync(key))
{
logger.ScopeTrace(() => $"Authentication method '{party.Id}' not updated with OIDC discovery because another update is in progress.");
return;
return party;
}
else
{
Expand All @@ -56,14 +56,14 @@ public async Task CheckOidcDiscoveryAndUpdatePartyAsync(TParty party)
party.UpdateState = PartyUpdateStates.AutomaticStopped;
await tenantDataRepository.SaveAsync(party);
await cacheProvider.DeleteAsync(FailingUpdateCountKey(party.Id));
return;
return party;
}

try
{
try
{
await oidcDiscoveryReadModelLogic.PopulateModelAsync(party);
party = await oidcDiscoveryReadModelLogic.PopulateModelAsync(party);
}
catch (Exception ex)
{
Expand All @@ -80,6 +80,8 @@ public async Task CheckOidcDiscoveryAndUpdatePartyAsync(TParty party)
await cacheProvider.IncrementNumberAsync(FailingUpdateCountKey(party.Id));
logger.Warning(ex);
}

return party;
}

private string UpdateWaitPeriodKey(string partyId)
Expand Down
2 changes: 1 addition & 1 deletion src/FoxIDs/Logic/Saml/SamlAuthnUpLogic.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ public async Task<IActionResult> AuthnRequestAsync(string partyId)
}

var party = await tenantDataRepository.GetAsync<SamlUpParty>(samlUpSequenceData.UpPartyId);
await samlMetadataReadUpLogic.CheckMetadataAndUpdateUpPartyAsync(party);
party = await samlMetadataReadUpLogic.CheckMetadataAndUpdateUpPartyAsync(party);

switch (party.AuthnBinding.RequestBinding)
{
Expand Down
14 changes: 8 additions & 6 deletions src/FoxIDs/Logic/Saml/SamlMetadataReadUpLogic.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,24 +26,24 @@ public SamlMetadataReadUpLogic(FoxIDsSettings settings, TelemetryScopedLogger lo
this.samlMetadataReadLogic = samlMetadataReadLogic;
}

public async Task CheckMetadataAndUpdateUpPartyAsync(SamlUpParty party)
public async Task<SamlUpParty> CheckMetadataAndUpdateUpPartyAsync(SamlUpParty party)
{
if (party.UpdateState != PartyUpdateStates.Automatic)
{
return;
return party;
}

var lastUpdated = DateTimeOffset.FromUnixTimeSeconds(party.LastUpdated);
if (lastUpdated.AddSeconds(party.MetadataUpdateRate.Value) >= DateTimeOffset.UtcNow)
{
return;
return party;
}

var key = UpdateUpPartyWaitPeriodKey(party.Id);
if (await cacheProvider.ExistsAsync(key))
{
logger.ScopeTrace(() => $"Authentication method '{party.Id}' not updated with SAML 2.0 metadata because another update is in progress.");
return;
return party;
}
else
{
Expand All @@ -56,14 +56,14 @@ public async Task CheckMetadataAndUpdateUpPartyAsync(SamlUpParty party)
party.UpdateState = PartyUpdateStates.AutomaticStopped;
await tenantDataRepository.SaveAsync(party);
await cacheProvider.DeleteAsync(FailingUpdateUpPartyCountKey(party.Id));
return;
return party;
}

try
{
try
{
await samlMetadataReadLogic.PopulateModelAsync(party);
party = await samlMetadataReadLogic.PopulateModelAsync(party);
}
catch (Exception ex)
{
Expand All @@ -80,6 +80,8 @@ public async Task CheckMetadataAndUpdateUpPartyAsync(SamlUpParty party)
await cacheProvider.IncrementNumberAsync(FailingUpdateUpPartyCountKey(party.Id));
logger.Warning(ex);
}

return party;
}

private string UpdateUpPartyWaitPeriodKey(string partyId)
Expand Down

0 comments on commit fb38649

Please sign in to comment.