Example #1
0
        public async Task <IActionResult> CreateUser([FromBody] RegUserDto userDto)
        {
            var lang          = Request.Headers["language"].ToString();
            var errorMessages = new List <string>();

            if (string.IsNullOrEmpty(userDto.FirstName))
            {
                errorMessages.Add(_translator.GetTranslation("VALIDATION.FIRSTNAME_REQUIRED", lang));
            }

            if (string.IsNullOrEmpty(userDto.LastName))
            {
                errorMessages.Add(_translator.GetTranslation("VALIDATION.LASTNAME_REQUIRED", lang));
            }

            if (string.IsNullOrEmpty(userDto.Country))
            {
                errorMessages.Add(_translator.GetTranslation("VALIDATION.COUNTRY_REQUIRED", lang));
            }

            if (string.IsNullOrEmpty(userDto.Gender))
            {
                errorMessages.Add(_translator.GetTranslation("VALIDATION.GENDER_REQUIRED", lang));
            }

            if (string.IsNullOrEmpty(userDto.Email))
            {
                errorMessages.Add(_translator.GetTranslation("VALIDATION.EMAIL_REQUIRED", lang));
            }

            if (string.IsNullOrEmpty(userDto.Password))
            {
                errorMessages.Add(_translator.GetTranslation("VALIDATION.PASSWORD_REQUIRED", lang));
            }

            if (userDto.Password != userDto.ConfirmPassword)
            {
                errorMessages.Add(_translator.GetTranslation("VALIDATION.PASSWORDS_MATCH", lang));

                return(BadRequest(new { errors = errorMessages }));
            }

            if (errorMessages.Count > 0)
            {
                return(BadRequest(new { errors = errorMessages }));
            }

            try
            {
                bool roleAdminExists = await _roleManager.RoleExistsAsync("Admin");

                if (!roleAdminExists)
                {
                    var roleAdmin = new IdentityRole();
                    roleAdmin.Name = "Admin";
                    await _roleManager.CreateAsync(roleAdmin);
                }

                bool roleAuthorExists = await _roleManager.RoleExistsAsync("Author");

                if (!roleAdminExists)
                {
                    var roleAuthor = new IdentityRole();
                    roleAuthor.Name = "Author";
                    await _roleManager.CreateAsync(roleAuthor);
                }

                bool roleUserExists = await _roleManager.RoleExistsAsync("User");

                if (!roleUserExists)
                {
                    var roleUser = new IdentityRole();
                    roleUser.Name = "User";
                    await _roleManager.CreateAsync(roleUser);
                }

                var user = new ApplicationUser
                {
                    Email          = userDto.Email,
                    UserName       = userDto.Email,
                    FirstName      = userDto.FirstName,
                    LastName       = userDto.LastName,
                    Country        = userDto.Country,
                    Gender         = userDto.Gender,
                    CreatedAt      = DateTime.Now,
                    IsAdmin        = userDto.IsAdmin.Value,
                    IsAuthor       = userDto.IsAuthor.Value,
                    EmailConfirmed = userDto.EmailConfirmed.Value,
                    IsActive       = true
                };

                // save
                var result = await _userManager.CreateAsync(user, userDto.Password);

                if (result.Succeeded)
                {
                    if (user.IsAdmin)
                    {
                        var addToAdminResult = await _userManager.AddToRoleAsync(user, "Admin");

                        if (!addToAdminResult.Succeeded)
                        {
                            errorMessages.Add(_translator.GetTranslation("ERROR", lang));

                            return(BadRequest(new { errors = errorMessages }));
                        }
                    }
                    if (user.IsAuthor)
                    {
                        var addToAuthorResult = await _userManager.AddToRoleAsync(user, "Author");

                        if (!addToAuthorResult.Succeeded)
                        {
                            errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                            return(BadRequest(new { errors = errorMessages }));
                        }
                    }
                    else
                    {
                        var addToUserResult = await _userManager.AddToRoleAsync(user, "User");

                        if (!addToUserResult.Succeeded)
                        {
                            errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                            return(BadRequest(new { errors = errorMessages }));
                        }
                    }


                    var responseData = new
                    {
                        firstName      = user.FirstName,
                        lastName       = user.LastName,
                        email          = user.Email,
                        country        = user.Country,
                        gender         = user.Gender,
                        isAdmin        = user.IsAdmin,
                        isAuthor       = user.IsAuthor,
                        id             = user.Id,
                        emailConfirmed = user.EmailConfirmed,
                        createdAt      = user.CreatedAt,
                        isActive       = user.IsActive
                    };
                    return(Ok(new { user = responseData }));
                }

                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                return(BadRequest(new { errors = errorMessages }));
            }
            catch
            {
                // return error message if there was an exception

                errorMessages.Add(_translator.GetTranslation("ERROR", lang));

                return(BadRequest(new { errors = errorMessages }));
            }
        }
        public async Task <IActionResult> Register([FromBody] RegUserDto userDto)
        {
            var lang          = Request.Headers["language"].ToString();
            var errorMessages = new List <string>();

            if (string.IsNullOrEmpty(userDto.FirstName))
            {
                errorMessages.Add(_translator.GetTranslation("VALIDATION.FIRSTNAME_REQUIRED", lang));
            }

            if (string.IsNullOrEmpty(userDto.LastName))
            {
                errorMessages.Add(_translator.GetTranslation("VALIDATION.LASTNAME_REQUIRED", lang));
            }

            if (string.IsNullOrEmpty(userDto.Country))
            {
                errorMessages.Add(_translator.GetTranslation("VALIDATION.COUNTRY_REQUIRED", lang));
            }

            if (string.IsNullOrEmpty(userDto.Gender))
            {
                errorMessages.Add(_translator.GetTranslation("VALIDATION.GENDER_REQUIRED", lang));
            }

            if (string.IsNullOrEmpty(userDto.Email))
            {
                errorMessages.Add(_translator.GetTranslation("VALIDATION.EMAIL_REQUIRED", lang));
            }

            if (string.IsNullOrEmpty(userDto.Password))
            {
                errorMessages.Add(_translator.GetTranslation("VALIDATION.PASSWORD_REQUIRED", lang));
            }

            if (userDto.Password != userDto.ConfirmPassword)
            {
                errorMessages.Add(_translator.GetTranslation("VALIDATION.PASSWORDS_MATCH", lang));

                return(BadRequest(new { errors = errorMessages }));
            }

            if (errorMessages.Count > 0)
            {
                return(BadRequest(new { errors = errorMessages }));
            }

            try
            {
                bool roleExists = await _roleManager.RoleExistsAsync("User");

                if (!roleExists)
                {
                    var role = new IdentityRole();
                    role.Name = "User";
                    await _roleManager.CreateAsync(role);
                }

                var user = new ApplicationUser
                {
                    Email     = userDto.Email,
                    UserName  = userDto.Email,
                    FirstName = userDto.FirstName,
                    LastName  = userDto.LastName,
                    Country   = userDto.Country,
                    Gender    = userDto.Gender,
                    CreatedAt = DateTime.Now,
                    IsActive  = true
                };

                // save
                var result = await _userManager.CreateAsync(user, userDto.Password);

                if (result.Succeeded)
                {
                    var addToRoleResult = await _userManager.AddToRoleAsync(user, "User");

                    if (addToRoleResult.Succeeded)
                    {
                        try
                        {
                            var verificationToken = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                            var    confirmationLink = "https://qasrawi.fr/security/email-confirmation?userId=" + user.Id + "&token=" + verificationToken.ToString();
                            string To      = user.Email;
                            string Subject = _translator.GetTranslation("ACCOUNT.REGISTER_EMAIL_SUBJECT", lang);
                            string Body    = _translator.GetTranslation("ACCOUNT.REGISTER_EMAIL_MESSAGE", lang) + " : " + $"<br><a href=\"{confirmationLink}\"> {confirmationLink}</a>";
                            Email  email   = new Email(To, Subject, Body);
                            email.Send();
                        }
                        catch { }
                        return(Ok(new { status = "User Created" }));
                    }


                    errorMessages.Add(_translator.GetTranslation("ERROR", lang));


                    return(BadRequest(new { errors = errorMessages }));
                }

                errorMessages.Add(_translator.GetTranslation("ERROR", lang));

                return(BadRequest(new { errors = errorMessages }));
            }
            catch
            {
                // return error message if there was an exception

                //errorMessages.Add(ex.Message);
                errorMessages.Add(_translator.GetTranslation("ERROR", lang));

                return(BadRequest(new { errors = errorMessages }));
            }
        }