public async Task Execute(string odsInstanceName, CloudOdsClaimSet claimSet, ApiMode apiMode) { var odsSqlConfiguration = await _odsSecretConfigurationProvider.GetSqlConfiguration(); var cloudOdsInstance = await _getCloudOdsInstanceQuery.Execute(odsInstanceName); var firstTimeSetupConfiguration = await GetFirstTimeSetupConfiguration(cloudOdsInstance, claimSet, odsSqlConfiguration); SetupAndRuntimeConfigurations(firstTimeSetupConfiguration); if (apiMode.SupportsSingleInstance) { var defaultOdsInstance = new OdsInstanceRegistration { Name = odsInstanceName, Description = "Default single ods instance" }; await _odsInstanceFirstTimeSetupService.CompleteSetup(defaultOdsInstance, claimSet, apiMode); } CreateClaimSetForAdminApp(firstTimeSetupConfiguration.ClaimSet); ApplyAdditionalClaimSetModifications(); await _usersContext.SaveChangesAsync(); await _securityContext.SaveChangesAsync(); await _restartAppServicesCommand.Execute(new CloudOdsApiOperationContext(cloudOdsInstance)); }
public void ShouldNotErrorIfClaimSetAlreadyExists() { var application = SetupContext.Applications.Single(a => a.ApplicationName == "IntegrationTests"); var claimSet = new ClaimSet { Application = application, ClaimSetName = "Other ODS AdminApp" }; SetupContext.ClaimSets.Add(claimSet); SetupContext.SaveChanges(); var testClaimSet = new CloudOdsClaimSet { ApplicationName = "IntegrationTests", ClaimSetName = "Other ODS AdminApp", Claims = new[] { new CloudOdsEntityClaim { EntityName = "educationOrganizations", Actions = new[] { Create, Read, Update, CloudOdsClaimAction.Delete }, AuthorizationStrategy = NoFurtherAuthorizationRequired } } }; var configurator = new CloudOdsClaimSetConfigurator(SetupContext); configurator.ApplyConfiguration(testClaimSet); }
public async Task <bool> Execute(string odsInstanceName, CloudOdsClaimSet claimSet, ApiMode apiMode) { ExtraDatabaseInitializationAction?.Invoke(); var restartRequired = false; if (apiMode.SupportsSingleInstance) { var defaultOdsInstance = new OdsInstanceRegistration { Name = odsInstanceName, DatabaseName = _instanceService.DatabaseName(0, apiMode), Description = "Default single ods instance" }; await _firstTimeSetupService.CompleteSetup(defaultOdsInstance, claimSet, apiMode); } if (!_claimSetCheckService.RequiredClaimSetsExist()) { CreateClaimSetForAdminApp(claimSet); ApplyAdditionalClaimSetModifications(); restartRequired = true; } await _usersContext.SaveChangesAsync(); await _securityContext.SaveChangesAsync(); return(restartRequired); }
public void ShouldPersistClaimSet() { LoadSeedData(); var testClaimSet = new CloudOdsClaimSet { ApplicationName = "IntegrationTests", ClaimSetName = "ODS AdminApp", Claims = new[] { new CloudOdsEntityClaim { EntityName = "educationOrganizations", Actions = new[] { Create, Read, Update, CloudOdsClaimAction.Delete }, AuthorizationStrategy = NoFurtherAuthorizationRequired }, new CloudOdsEntityClaim { EntityName = "systemDescriptors", Actions = new[] { Create, Read, Update, CloudOdsClaimAction.Delete }, AuthorizationStrategy = NoFurtherAuthorizationRequired }, new CloudOdsEntityClaim { EntityName = "managedDescriptors", Actions = new[] { Create, Read, Update, CloudOdsClaimAction.Delete }, AuthorizationStrategy = NoFurtherAuthorizationRequired }, new CloudOdsEntityClaim { EntityName = "types", Actions = new[] { Read }, AuthorizationStrategy = NoFurtherAuthorizationRequired } } }; var configurator = new CloudOdsClaimSetConfigurator(SetupContext); configurator.ApplyConfiguration(testClaimSet); var claimSet = Transaction(securityContext => securityContext.ClaimSets.Single(cs => cs.ClaimSetName == testClaimSet.ClaimSetName)); Transaction(securityContext => { var claimSetResourceClaims = securityContext.ClaimSetResourceClaims .Include(c => c.Action) .Include(c => c.ResourceClaim) .Include(c => c.AuthorizationStrategyOverride) .Where(c => c.ClaimSet.ClaimSetId == claimSet.ClaimSetId).ToList(); foreach (var claim in testClaimSet.Claims) { foreach (var resourceClaim in claim.Actions.Select(action => claimSetResourceClaims.Single(rc => rc.ResourceClaim.ResourceName == claim.EntityName && rc.Action.ActionName == action.ActionName))) { resourceClaim.AuthorizationStrategyOverride.AuthorizationStrategyName.ShouldBe(claim.AuthorizationStrategy.StrategyName); } } }); }
public async Task Execute(string odsInstanceName, CloudOdsClaimSet claimSet, ApiMode apiMode) { ExtraDatabaseInitializationAction?.Invoke(); if (apiMode.SupportsSingleInstance) { var defaultOdsInstance = new OdsInstanceRegistration { Name = odsInstanceName, Description = "Default single ods instance" }; await _firstTimeSetupService.CompleteSetup(defaultOdsInstance, claimSet, apiMode); } CreateClaimSetForAdminApp(claimSet); ApplyAdditionalClaimSetModifications(); await _usersContext.SaveChangesAsync(); await _securityContext.SaveChangesAsync(); }
public async Task <IEnumerable <BulkRegisterOdsInstancesResult> > Execute(IEnumerable <IRegisterOdsInstanceModel> odsInstances, ApiMode mode, string userId, CloudOdsClaimSet cloudOdsClaimSet = null) { var results = new List <BulkRegisterOdsInstancesResult>(); foreach (var instance in odsInstances) { try { await _registerOdsInstanceCommand.Execute(instance, mode, userId, cloudOdsClaimSet); results.Add(new BulkRegisterOdsInstancesResult { NumericSuffix = instance.NumericSuffix.ToString(), Description = instance.Description, Success = true }); _logger.Info($"Ods instance({instance.NumericSuffix.ToString()}) registered successfully."); } catch (Exception ex) { results.Add(new BulkRegisterOdsInstancesResult { NumericSuffix = instance.NumericSuffix.ToString(), Description = instance.Description, Success = false, ErrorMessage = ex.Message }); _logger.Error($"Ods instance({instance.NumericSuffix.ToString()}) registration failed. Error: {ex.Message}"); } } return(results); }
private void CreateClaimSetForAdminApp(CloudOdsClaimSet cloudOdsClaimSet) { _cloudOdsClaimSetConfigurator.ApplyConfiguration(cloudOdsClaimSet); }
private async Task <OdsFirstTimeSetupConfiguration> GetFirstTimeSetupConfiguration(CloudOdsInstance cloudOdsInstance, CloudOdsClaimSet claimSet, OdsSqlConfiguration odsSqlConfiguration) { return(new OdsFirstTimeSetupConfiguration { Name = cloudOdsInstance.FriendlyName, Version = cloudOdsInstance.Version, Components = await _getCloudOdsHostedComponentsQuery.Execute(cloudOdsInstance), SqlConfiguration = odsSqlConfiguration, ClaimSet = claimSet }); }
public async Task <int> Execute(IRegisterOdsInstanceModel instance, ApiMode mode, string userId, CloudOdsClaimSet cloudOdsClaimSet = null) { var instanceName = InferInstanceDatabaseName(instance.NumericSuffix.Value, mode); var newInstance = new OdsInstanceRegistration { Name = instanceName, Description = instance.Description }; await _odsInstanceFirstTimeSetupService.CompleteSetup(newInstance, cloudOdsClaimSet, mode); using (var identityDbContext = AdminAppIdentityDbContext.Create()) { identityDbContext.UserOdsInstanceRegistrations.Add(new UserOdsInstanceRegistration { OdsInstanceRegistrationId = newInstance.Id, UserId = userId }); identityDbContext.SaveChanges(); } return(newInstance.Id); }
public async Task <IEnumerable <BulkRegisterOdsInstancesResult> > Execute(IEnumerable <IRegisterOdsInstanceModel> odsInstances, IEnumerable <IRegisterOdsInstanceModel> filteredDataRecords, ApiMode mode, string userId, CloudOdsClaimSet cloudOdsClaimSet = null) { var results = new List <BulkRegisterOdsInstancesResult>(); var dataRecords = odsInstances.ToList(); var recordsToProcess = filteredDataRecords.ToList(); if (!recordsToProcess.Any()) { recordsToProcess = _dataFiltrationService.FilteredRecords(dataRecords, mode).ToList(); } var skippedRecords = dataRecords.Except(recordsToProcess); foreach (var skippedInstance in skippedRecords) { results.Add(new BulkRegisterOdsInstancesResult { NumericSuffix = skippedInstance.NumericSuffix.ToString(), Description = skippedInstance.Description, IndividualInstanceResult = IndividualInstanceResult.Skipped }); _logger.Info($"Ods instance({skippedInstance.NumericSuffix.ToString()}) was skipped because it was previously registered."); } foreach (var instance in recordsToProcess) { try { var odsInstanceRegisteredId = await _registerOdsInstanceCommand.Execute(instance, mode, userId, cloudOdsClaimSet); results.Add(new BulkRegisterOdsInstancesResult { NumericSuffix = instance.NumericSuffix.ToString(), Description = instance.Description, IndividualInstanceResult = IndividualInstanceResult.Succeded, OdsInstanceRegisteredId = odsInstanceRegisteredId }); _logger.Info($"Ods instance({instance.NumericSuffix.ToString()}) registered successfully."); } catch (Exception ex) { results.Add(new BulkRegisterOdsInstancesResult { NumericSuffix = instance.NumericSuffix.ToString(), Description = instance.Description, IndividualInstanceResult = IndividualInstanceResult.Failed, ErrorMessage = ex.Message }); _logger.Error($"Ods instance({instance.NumericSuffix.ToString()}) registration failed. Error: {ex.Message}"); } } return(results); }
private async Task CreateAndSaveApiKeyAndSecret(OdsInstanceRegistration odsInstanceRegistration, CloudOdsClaimSet claimSet, ApiMode mode) { var secretConfiguration = new OdsSecretConfiguration(); var applicationCreateResult = await _firstTimeSetupService.CreateAdminAppInAdminDatabase(claimSet.ClaimSetName, odsInstanceRegistration.Name, ConfigurationManager.AppSettings["AwsCurrentVersion"], mode); secretConfiguration.ProductionApiKeyAndSecret = applicationCreateResult.ProductionKeyAndSecret; await _odsSecretConfigurationProvider.SetSecretConfiguration(secretConfiguration, odsInstanceRegistration.Id); }
public async Task CompleteSetup(OdsInstanceRegistration odsInstanceRegistration, CloudOdsClaimSet claimSet, ApiMode apiMode) { await AddOdsInstanceRegistration(odsInstanceRegistration); await CreateAndSaveApiKeyAndSecret(odsInstanceRegistration, claimSet, apiMode); _reportViewsSetUp.CreateReportViews(odsInstanceRegistration.Name, apiMode); _firstTimeSetupService.EnsureAdminDatabaseInitialized(); await _usersContext.SaveChangesAsync(); }
public async Task <int> Execute(IRegisterOdsInstanceModel instance, ApiMode mode, string userId, CloudOdsClaimSet cloudOdsClaimSet = null) { var instanceName = instance.NumericSuffix.Value.ToString(); var newInstance = new OdsInstanceRegistration { Name = instanceName, DatabaseName = _inferInstanceService.DatabaseName(instance.NumericSuffix.Value, mode), Description = instance.Description }; await _odsInstanceFirstTimeSetupService.CompleteSetup(newInstance, cloudOdsClaimSet, mode); await _identity.UserOdsInstanceRegistrations.AddAsync( new UserOdsInstanceRegistration { OdsInstanceRegistrationId = newInstance.Id, UserId = userId }); await _identity.SaveChangesAsync(); if (mode == ApiMode.YearSpecific) { _setCurrentSchoolYear.Execute(instanceName, mode, (short)instance.NumericSuffix.Value); } return(newInstance.Id); }