public async Task <HttpResponseMessage> CreateApplication(CreateApplicationParams parameters) { if (!ModelState.IsValid) { var errors = string.Join("; ", ModelState.Values .SelectMany(x => x.Errors) .Select(x => x.ErrorMessage)); return(Request.CreateResponse(HttpStatusCode.BadRequest, new ResponseContainer(HttpStatusCode.BadRequest, string.Format("Missing parameters. {0}", errors)))); } if (App.CreationToken != parameters.CreationToken) { Logger.Info("Token does not match {1}. Input Params: {0}", parameters, App.CreationToken); return(Request.CreateResponse(HttpStatusCode.Unauthorized)); } var application = parameters.Application; Database = application.Name; using (var s = Session) { DatabaseExists.Ensure(DocumentStore, Database); var catalog = new AssemblyCatalog(typeof(UserByEmailIndex).Assembly); var provider = new CatalogExportProvider(catalog) { SourceProvider = new CatalogExportProvider(catalog) }; IndexCreation.CreateIndexes(provider, DocumentStore, Database); var config = s.Load <Config>("1"); if (config == null) { config = AutoMapper.Mapper.Map <CreateApplicationParams, Config>(parameters); s.Store(config, "1"); } foreach (var useremail in parameters.AdminEmails) { if (s.Query <User, UserByEmailIndex>() .Any(x => x.Email == useremail)) { continue; } var password = CommandExecutor.ExecuteCommand(new GeneratePasswordCommand(12)); var hashed = await CommandExecutor.ExecuteCommandAsync(new HashPasswordCommandAsync(password, App.Pepper)); var adminUser = new User("admin", "user", useremail, "", hashed.HashedPassword, hashed.Salt, application.Name, "admin", "users/1.ea7e4af2-67e3-405a-88f9-e4f4896b617d", null, null) { Active = true, Approved = true }; s.Store(adminUser); CommandExecutor.ExecuteCommand( new PasswordResetEmailCommand(new PasswordResetEmailCommand.MailTemplate( new[] { adminUser.Email }, config.AdministrativeEmails, adminUser.FullName, password, parameters.Application.Description))); } s.SaveChanges(); } //add admin email to admin group and send email to reset password. BootstrapCommand.Parameters = parameters; BootstrapCommand.AdminInformation = App.AdminInformation; var messages = await CommandExecutor.ExecuteCommandAsync(BootstrapCommand); if (messages.Any()) { return(Request.CreateResponse(HttpStatusCode.Created, new ResponseContainer(HttpStatusCode.Created, string.Join(" ", messages.Select(x => x))))); } return(Request.CreateResponse(HttpStatusCode.Created)); }
public BootstrapArcGisServerSecurityCommandAsync(CreateApplicationParams parameters, AdminCredentials adminInformation) : this() { Parameters = parameters; AdminInformation = adminInformation; }