public async Task <T?> ShowDataTransferDialog <T>(DataTransferViewModel <T> viewModel) where T : class { var dialog = new DataTransferDialog { DataContext = viewModel }; Task <T>?task = null; // Ugly hack: we can't bind DialogResult to the ViewModel in XAML, so let's just do it here. viewModel.PropertyChanged += (sender, args) => { if (args.PropertyName == nameof(viewModel.DialogResult)) { dialog.DialogResult = viewModel.DialogResult; } }; // Second ugly hack: only start the transfer when the dialog is shown. Without this, // there's a race condition: if the transfer fails immediately, we try to set DialogResult // before the dialog is shown, and that's ignored. dialog.Activated += (sender, args) => { if (task is null) { task = viewModel.TransferAsync(); } }; // TODO: We don't close the dialog if this has already failed. Check what's going on. var result = dialog.ShowDialog(); return(result == true ? await task ! : null); }
public virtual async Task <IActionResult> Index() { var model = new DataTransferViewModel(); model.ExistingData.Add(typeof(ApiResource).FriendlyName(), await this.ConfigurationDatabaseContext.ApiResources.CountAsync()); model.ExistingData.Add(typeof(ApiResourceClaim).FriendlyName(), await this.ConfigurationDatabaseContext.ApiResourceClaims().CountAsync()); model.ExistingData.Add(typeof(ApiResourceProperty).FriendlyName(), await this.ConfigurationDatabaseContext.ApiResourceProperties().CountAsync()); model.ExistingData.Add(typeof(ApiResourceScope).FriendlyName(), await this.ConfigurationDatabaseContext.ApiResourceScopes().CountAsync()); model.ExistingData.Add(typeof(ApiResourceSecret).FriendlyName(), await this.ConfigurationDatabaseContext.ApiResourceSecrets().CountAsync()); model.ExistingData.Add(typeof(ApiScope).FriendlyName(), await this.ConfigurationDatabaseContext.ApiScopes.CountAsync()); model.ExistingData.Add(typeof(ApiScopeClaim).FriendlyName(), await this.ConfigurationDatabaseContext.ApiScopeClaims().CountAsync()); model.ExistingData.Add(typeof(ApiScopeProperty).FriendlyName(), await this.ConfigurationDatabaseContext.ApiScopeProperties().CountAsync()); model.ExistingData.Add(typeof(Client).FriendlyName(), await this.ConfigurationDatabaseContext.Clients.CountAsync()); model.ExistingData.Add(typeof(ClientCorsOrigin).FriendlyName(), await this.ConfigurationDatabaseContext.ClientCorsOrigins.CountAsync()); model.ExistingData.Add(typeof(ClientClaim).FriendlyName(), await this.ConfigurationDatabaseContext.ClientClaims().CountAsync()); model.ExistingData.Add(typeof(ClientGrantType).FriendlyName(), await this.ConfigurationDatabaseContext.ClientGrantTypes().CountAsync()); model.ExistingData.Add(typeof(ClientIdPRestriction).FriendlyName(), await this.ConfigurationDatabaseContext.ClientIdentityProviderRestrictions().CountAsync()); model.ExistingData.Add(typeof(ClientPostLogoutRedirectUri).FriendlyName(), await this.ConfigurationDatabaseContext.ClientPostLogoutRedirectUris().CountAsync()); model.ExistingData.Add(typeof(ClientProperty).FriendlyName(), await this.ConfigurationDatabaseContext.ClientProperties().CountAsync()); model.ExistingData.Add(typeof(ClientRedirectUri).FriendlyName(), await this.ConfigurationDatabaseContext.ClientRedirectUris().CountAsync()); model.ExistingData.Add(typeof(ClientScope).FriendlyName(), await this.ConfigurationDatabaseContext.ClientScopes().CountAsync()); model.ExistingData.Add(typeof(ClientSecret).FriendlyName(), await this.ConfigurationDatabaseContext.ClientSecrets().CountAsync()); model.ExistingData.Add(typeof(IdentityProvider).FriendlyName(), await this.ConfigurationDatabaseContext.IdentityProviders.CountAsync()); model.ExistingData.Add(typeof(IdentityResource).FriendlyName(), await this.ConfigurationDatabaseContext.IdentityResources.CountAsync()); model.ExistingData.Add(typeof(IdentityResourceClaim).FriendlyName(), await this.ConfigurationDatabaseContext.IdentityResourceClaims().CountAsync()); model.ExistingData.Add(typeof(IdentityResourceProperty).FriendlyName(), await this.ConfigurationDatabaseContext.IdentityResourceProperties().CountAsync()); var identityContext = this.Facade.Identity.DatabaseContext; model.ExistingData.Add(typeof(IdentityRoleClaim <string>).FriendlyName(), await identityContext.RoleClaims.CountAsync()); model.ExistingData.Add(typeof(IdentityUserClaim <string>).FriendlyName(), await identityContext.UserClaims.CountAsync()); model.ExistingData.Add(typeof(IdentityUserLogin <string>).FriendlyName(), await identityContext.UserLogins.CountAsync()); model.ExistingData.Add(typeof(IdentityUserRole <string>).FriendlyName(), await identityContext.UserRoles.CountAsync()); model.ExistingData.Add(typeof(IdentityUserToken <string>).FriendlyName(), await identityContext.UserTokens.CountAsync()); model.ExistingData.Add(typeof(Role).FriendlyName(), await identityContext.Roles.CountAsync()); model.ExistingData.Add(typeof(User).FriendlyName(), await identityContext.Users.CountAsync()); if (this.FeatureManager.IsEnabled(Feature.Saml)) { model.ExistingData.Add(typeof(AssertionConsumerService).FriendlyName(), await this.SamlDatabaseContext.AssertionConsumerServices().CountAsync()); model.ExistingData.Add(typeof(SamlClaimMap).FriendlyName(), await this.SamlDatabaseContext.ClaimsMapping().CountAsync()); model.ExistingData.Add(typeof(ServiceProvider).FriendlyName(), await this.SamlDatabaseContext.ServiceProviders.CountAsync()); model.ExistingData.Add(typeof(SigningCertificate).FriendlyName(), await this.SamlDatabaseContext.SigningCertificates().CountAsync()); model.ExistingData.Add(typeof(SingleLogoutService).FriendlyName(), await this.SamlDatabaseContext.SingleLogoutServices().CountAsync()); } if (this.FeatureManager.IsEnabled(Feature.WsFederation)) { model.ExistingData.Add(typeof(RelyingParty).FriendlyName(), await this.WsFederationDatabaseContext.RelyingParties.CountAsync()); model.ExistingData.Add(typeof(WsFederationClaimMap).FriendlyName(), await this.WsFederationDatabaseContext.ClaimMapping().CountAsync()); } return(await Task.FromResult(this.View(model))); }