Exemple #1
0
        public async Task <IActionResult> CreateUser([FromBody] NewUserResource newUser)
        {
            if (newUser.IsValidMail() == false)
            {
                return(BadRequest(new { message = "Mail did not pass Regex" }));
            }
            if (newUser.IsValidPassword() == false)
            {
                return(BadRequest(new { message = "Password did not pass Regex" }));
            }

            string salt           = securityService.GenerateSalt();
            string hashedPassword = securityService.HashPassword(newUser.Password, salt);

            User user = new User
            {
                Mail         = newUser.Mail,
                Password     = hashedPassword,
                PasswordSalt = salt,
                UserType     = newUser.UserType
            };

            if (user.UserType == UserType.Municipality)
            {
                string       mailDomain   = newUser.Mail.Substring(newUser.Mail.IndexOf('@') + 1);
                Municipality municipality = await municipalityService.GetMunicipalityByDomainAsync(mailDomain);

                if (municipality == null)
                {
                    return(BadRequest("Invalid municipality domain given for municipality account!"));
                }
                user.MunicipalityName = municipality.Name;
            }
            else if (user.UserType == UserType.Admin)
            {
                return(BadRequest("You do not have permissions to create an admin account!"));
            }

            try
            {
                user = await usersService.AddNewUserAsync(user);
            }
            catch (DbUpdateException)
            {
                return(Conflict("User with the given mail already exists"));
            }

            PrivateSafeUserResource safeUser = mapper.Map <User, PrivateSafeUserResource>(user);

            if (user == null)
            {
                return(BadRequest(new { message = "Could not create user" }));
            }

            return(Created("Created new user successfully!", safeUser));
        }