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 })); } }