Esempio n. 1
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
                    }
                }
            });
        }
Esempio n. 5
0
        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);
        }
Esempio n. 7
0
 private void CreateClaimSetForAdminApp(CloudOdsClaimSet cloudOdsClaimSet)
 {
     _cloudOdsClaimSetConfigurator.ApplyConfiguration(cloudOdsClaimSet);
 }
Esempio n. 8
0
 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);
        }
Esempio n. 10
0
        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);
        }