private void ShowCreateDownParty(PartyTypes type, OAuthSubPartyTypes?oauthSubPartyType = null) { if (type == PartyTypes.Oidc) { var oidcDownParty = new GeneralOidcDownPartyViewModel(); oidcDownParty.CreateMode = true; oidcDownParty.Edit = true; downParties.Add(oidcDownParty); } else if (type == PartyTypes.OAuth2) { var oauthDownParty = new GeneralOAuthDownPartyViewModel(); if (!oauthSubPartyType.HasValue) { throw new ArgumentNullException(nameof(oauthSubPartyType), "Required for OAuth 2.0 down parties."); } oauthDownParty.SubPartyType = oauthSubPartyType.Value; oauthDownParty.CreateMode = true; oauthDownParty.Edit = true; downParties.Add(oauthDownParty); } else if (type == PartyTypes.Saml2) { var samlDownParty = new GeneralSamlDownPartyViewModel(); samlDownParty.CreateMode = true; samlDownParty.Edit = true; downParties.Add(samlDownParty); } }
private OidcDownPartyViewModel ToViewModel(GeneralOidcDownPartyViewModel generalOidcDownParty, OidcDownParty oidcDownParty, List <OAuthClientSecretResponse> oidcDownSecrets) { return(oidcDownParty.Map <OidcDownPartyViewModel>(afterMap => { if (afterMap.Client == null) { generalOidcDownParty.EnableClientTab = false; } else { generalOidcDownParty.EnableClientTab = true; afterMap.Client.ExistingSecrets = oidcDownSecrets.Select(s => new OAuthClientSecretViewModel { Name = s.Name, Info = s.Info }).ToList(); var defaultResourceScopeIndex = afterMap.Client.ResourceScopes.FindIndex(r => r.Resource.Equals(generalOidcDownParty.Name, StringComparison.Ordinal)); if (defaultResourceScopeIndex > -1) { afterMap.Client.DefaultResourceScope = true; var defaultResourceScope = afterMap.Client.ResourceScopes[defaultResourceScopeIndex]; if (defaultResourceScope.Scopes?.Count() > 0) { foreach (var scope in defaultResourceScope.Scopes) { afterMap.Client.DefaultResourceScopeScopes.Add(scope); } } afterMap.Client.ResourceScopes.RemoveAt(defaultResourceScopeIndex); } else { afterMap.Client.DefaultResourceScope = false; } afterMap.Client.ScopesViewModel = afterMap.Client.Scopes.Map <List <OidcDownScopeViewModel> >() ?? new List <OidcDownScopeViewModel>(); } if (afterMap.Resource == null) { generalOidcDownParty.EnableResourceTab = false; } else { generalOidcDownParty.EnableResourceTab = true; } if (afterMap.ClaimTransforms?.Count > 0) { afterMap.ClaimTransforms = afterMap.ClaimTransforms.MapClaimTransforms(); } })); }
private async Task DeleteOidcDownPartyAsync(GeneralOidcDownPartyViewModel generalOidcDownParty) { try { await DownPartyService.DeleteOidcDownPartyAsync(generalOidcDownParty.Name); DownParties.Remove(generalOidcDownParty); await OnStateHasChanged.InvokeAsync(DownParty); } catch (TokenUnavailableException) { await(OpenidConnectPkce as TenantOpenidConnectPkce).TenantLoginAsync(); } catch (Exception ex) { generalOidcDownParty.Form.SetError(ex.Message); } }
private void ShowCreateDownParty(PartyTypes type) { if (type == PartyTypes.Oidc) { var oidcDownParty = new GeneralOidcDownPartyViewModel(); oidcDownParty.CreateMode = true; oidcDownParty.Edit = true; downParties.Add(oidcDownParty); } else if (type == PartyTypes.OAuth2) { var oauthDownParty = new GeneralOAuthDownPartyViewModel(); oauthDownParty.CreateMode = true; oauthDownParty.Edit = true; downParties.Add(oauthDownParty); } else if (type == PartyTypes.Saml2) { var samlDownParty = new GeneralSamlDownPartyViewModel(); samlDownParty.CreateMode = true; samlDownParty.Edit = true; downParties.Add(samlDownParty); } }
private async Task OnEditOidcDownPartyValidSubmitAsync(GeneralOidcDownPartyViewModel generalOidcDownParty, EditContext editContext) { try { if (generalOidcDownParty.Form.Model.ClaimTransforms?.Count() > 0) { foreach (var claimTransform in generalOidcDownParty.Form.Model.ClaimTransforms) { if (claimTransform is OAuthClaimTransformClaimInViewModel claimTransformClaimIn && !claimTransformClaimIn.ClaimIn.IsNullOrWhiteSpace()) { claimTransform.ClaimsIn = new List <string> { claimTransformClaimIn.ClaimIn }; } } } var oidcDownParty = generalOidcDownParty.Form.Model.Map <OidcDownParty>(afterMap: afterMap => { if (generalOidcDownParty.Form.Model.Client?.DefaultResourceScope == true) { afterMap.Client.ResourceScopes.Add(new OAuthDownResourceScope { Resource = generalOidcDownParty.Form.Model.Name, Scopes = generalOidcDownParty.Form.Model.Client.DefaultResourceScopeScopes }); } if (!(afterMap.Resource?.Scopes?.Count > 0)) { afterMap.Resource = null; } if (generalOidcDownParty.Form.Model.Client?.ScopesViewModel?.Count() > 0) { afterMap.Client.Scopes = generalOidcDownParty.Form.Model.Client.ScopesViewModel.Map <List <OidcDownScope> >(); } if (afterMap.ClaimTransforms?.Count() > 0) { int order = 1; foreach (var claimTransform in afterMap.ClaimTransforms) { claimTransform.Order = order++; } } }); OidcDownParty oidcDownPartyResult; if (generalOidcDownParty.CreateMode) { oidcDownPartyResult = await DownPartyService.CreateOidcDownPartyAsync(oidcDownParty); } else { oidcDownPartyResult = await DownPartyService.UpdateOidcDownPartyAsync(oidcDownParty); if (oidcDownParty.Client != null) { foreach (var existingSecret in generalOidcDownParty.Form.Model.Client.ExistingSecrets.Where(s => s.Removed)) { await DownPartyService.DeleteOidcClientSecretDownPartyAsync(existingSecret.Name); } } } if (oidcDownParty.Client != null && generalOidcDownParty.Form.Model.Client.Secrets.Count() > 0) { await DownPartyService.CreateOidcClientSecretDownPartyAsync(new OAuthClientSecretRequest { PartyName = generalOidcDownParty.Form.Model.Name, Secrets = generalOidcDownParty.Form.Model.Client.Secrets }); } var oauthDownSecrets = await DownPartyService.GetOAuthClientSecretDownPartyAsync(oidcDownPartyResult.Name); generalOidcDownParty.Form.UpdateModel(ToViewModel(generalOidcDownParty, oidcDownPartyResult, oauthDownSecrets)); if (generalOidcDownParty.CreateMode) { generalOidcDownParty.CreateMode = false; toastService.ShowSuccess("OpenID Connect Down-party created.", "SUCCESS"); } else { toastService.ShowSuccess("OpenID Connect Down-party updated.", "SUCCESS"); } generalOidcDownParty.Name = generalOidcDownParty.Form.Model.Name; } catch (FoxIDsApiException ex) { if (ex.StatusCode == System.Net.HttpStatusCode.Conflict) { generalOidcDownParty.Form.SetFieldError(nameof(generalOidcDownParty.Form.Model.Name), ex.Message); } else { throw; } } }
private void OnOidcDownPartyResourceTabChange(GeneralOidcDownPartyViewModel oidcDownParty, bool enableTab) => oidcDownParty.Form.Model.Resource = enableTab ? new OAuthDownResource() : null;
private void OnOidcDownPartyClientTabChange(GeneralOidcDownPartyViewModel oidcDownParty, bool enableTab) => oidcDownParty.Form.Model.Client = enableTab ? new OidcDownClientViewModel() : null;
private void OidcDownPartyViewModelAfterInit(GeneralOidcDownPartyViewModel oidcDownParty, OidcDownPartyViewModel model) { if (oidcDownParty.CreateMode) { model.Client = oidcDownParty.EnableClientTab ? new OidcDownClientViewModel() : null; model.Resource = oidcDownParty.EnableResourceTab ? new OAuthDownResource() : null; if (model.Client != null) { model.Client.ResponseTypes.Add("code"); model.Client.Secrets = new List <string> { SecretGenerator.GenerateNewSecret() }; model.Client.ScopesViewModel.Add(new OidcDownScopeViewModel { Scope = IdentityConstants.DefaultOidcScopes.OfflineAccess }); model.Client.ScopesViewModel.Add(new OidcDownScopeViewModel { Scope = IdentityConstants.DefaultOidcScopes.Profile, VoluntaryClaims = new List <OidcDownClaim> { new OidcDownClaim { Claim = JwtClaimTypes.Name, InIdToken = true }, new OidcDownClaim { Claim = JwtClaimTypes.GivenName, InIdToken = true }, new OidcDownClaim { Claim = JwtClaimTypes.MiddleName, InIdToken = true }, new OidcDownClaim { Claim = JwtClaimTypes.FamilyName, InIdToken = true }, new OidcDownClaim { Claim = JwtClaimTypes.Nickname, InIdToken = false }, new OidcDownClaim { Claim = JwtClaimTypes.PreferredUsername, InIdToken = false }, new OidcDownClaim { Claim = JwtClaimTypes.Birthdate, InIdToken = false }, new OidcDownClaim { Claim = JwtClaimTypes.Gender, InIdToken = false }, new OidcDownClaim { Claim = JwtClaimTypes.Picture, InIdToken = false }, new OidcDownClaim { Claim = JwtClaimTypes.Profile, InIdToken = false }, new OidcDownClaim { Claim = JwtClaimTypes.Website, InIdToken = false }, new OidcDownClaim { Claim = JwtClaimTypes.Locale, InIdToken = true }, new OidcDownClaim { Claim = JwtClaimTypes.Zoneinfo, InIdToken = false }, new OidcDownClaim { Claim = JwtClaimTypes.UpdatedAt, InIdToken = false } } }); model.Client.ScopesViewModel.Add(new OidcDownScopeViewModel { Scope = JwtClaimTypes.Email, VoluntaryClaims = new List <OidcDownClaim> { new OidcDownClaim { Claim = JwtClaimTypes.Email, InIdToken = true }, new OidcDownClaim { Claim = JwtClaimTypes.EmailVerified, InIdToken = false } } }); model.Client.ScopesViewModel.Add(new OidcDownScopeViewModel { Scope = JwtClaimTypes.Address, VoluntaryClaims = new List <OidcDownClaim> { new OidcDownClaim { Claim = JwtClaimTypes.Address, InIdToken = true } } }); model.Client.ScopesViewModel.Add(new OidcDownScopeViewModel { Scope = JwtClaimTypes.PhoneNumber, VoluntaryClaims = new List <OidcDownClaim> { new OidcDownClaim { Claim = JwtClaimTypes.PhoneNumber, InIdToken = true }, new OidcDownClaim { Claim = JwtClaimTypes.PhoneNumberVerified, InIdToken = false } } }); } } }