public ActionResult SetInitialConfig(InitialSetupConfigModel config)
        {
            appSettings.Update(setting => setting.DatastoreRootPath = config.DatastoreRootPath);

            DatabaseLocator dbLocator = new DatabaseLocator(config.DatastoreRootPath);

            LiteDbConfigurationRepository configurationRepository = new LiteDbConfigurationRepository(dbLocator.GetConfigurationRepositoryConnectionString());

            InitialSetupLogic initialSetupLogic = new InitialSetupLogic(configurationRepository);

            initialSetupLogic.Complete(config);

            return(RedirectToAction("Complete", "InitialSetup"));
        }
        public void Complete(InitialSetupConfigModel config)
        {
            ActiveDirectoryMetadata idp = idpLogic.Add(config.AdName, config.AdServer, config.AdSearchBase, config.AdServiceAccountUsername, config.AdServiceAccountPassword, config.AdUseAppPoolIdentity);

            certificateAuthorityConfigurationLogic.AddPrivateCertificateAuthority(config.AdcsServerName, config.AdcsCommonName, config.AdcsHashAlgorithm, idp.Id);
            AdcsTemplate           adcsTemplate    = templateLogic.AddTemplate(config.AdcsTemplateName, config.AdcsTemplateCipher, config.AdcsTemplateKeyUsage, config.AdcsTemplateWindowsApi, RoleManagementLogic.DefaultTemplateIssuerRoles);
            AuthenticablePrincipal emergencyAccess = localIdpLogic.InitializeEmergencyAccess(config.EmergencyAccessKey);
            AuthenticablePrincipal admin           = localIdpLogic.InitializeLocalAdministrator(config.LocalAdminPassword);

            authorizationLogic.InitializeScopes();
            roleManagement.InitializeRoles(new List <Guid>()
            {
                emergencyAccess.Id, admin.Id
            });

            AppConfig appConfig = new AppConfig()
            {
                EncryptionKey = config.EncryptionKey,
                Id            = Guid.NewGuid()
            };

            configurationRepository.SetAppConfig(appConfig);
        }