Beispiel #1
0
        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));
        }
Beispiel #2
0
 public BootstrapArcGisServerSecurityCommandAsync(CreateApplicationParams parameters,
                                                  AdminCredentials adminInformation) : this()
 {
     Parameters       = parameters;
     AdminInformation = adminInformation;
 }