public async Task <IActionResult> ExternalLoginCreateAccount([FromBody] ExternalLoginConfirmationViewModel model, string returnUrl = null) { // Get the information about the user from the external login provider var info = await _signInManager.GetExternalLoginInfoAsync(); if (info == null) { return(BadRequest("External login information cannot be accessed, try again.")); } var user = new QRecruitmentUser { UserName = model.Email, Email = model.Email }; var result = await _userManager.CreateAsync(user); if (result.Succeeded) { result = await _userManager.AddLoginAsync(user, info); if (result.Succeeded) { await _signInManager.SignInAsync(user, isPersistent : false); _logger.LogInformation(6, "User created an account using {Name} provider.", info.LoginProvider); return(Ok()); // Everything ok } } return(BadRequest(new[] { "Email already exists" })); }
private void CreateUsers() { if (!_context.ApplicationUsers.Any()) { var qAdminUser = new QRecruitmentUser { UserName = Startup.Configuration["RecruitmentAdminEmail"], Email = Startup.Configuration["RecruitmentAdminEmail"], CreatedDate = DateTime.Now, IsEnabled = true }; var adminUserResult = _userManager.CreateAsync(qAdminUser, Startup.Configuration["RecruitmentAdminPassword"]).Result; qAdminUser = _userManager.FindByEmailAsync(Startup.Configuration["RecruitmentAdminEmail"]).Result; var adminRoleResult = _userManager.AddToRoleAsync(qAdminUser, "Admin").Result; } }
private async Task CreateUserWithAdminRole(Admin admin) { var socialLogins = new List <string>() { "@outlook", "@live", "@hotmail", "@gmail", "@google" }; UserCreationModel userModel = new UserCreationModel { Username = admin.Email }; userModel.Username = admin.Email; if (!socialLogins.Any(emailType => admin.Email.Contains(emailType))) { var user = new QRecruitmentUser { UserName = admin.Email, Email = admin.Email, IsEnabled = true, CreatedDate = DateTime.UtcNow }; var password = AccountHelper.GenerateRandomString(); userModel.Password = password; var result = await _userManager.CreateAsync(user, password); if (result.Succeeded) { var addUserToRoleTaskResult = _userManager.AddToRoleAsync(user, Roles.Admin).Result; } await SendEmails(userModel, string.IsNullOrEmpty(admin.FirstName)?admin.Email.Split('@').FirstOrDefault() : admin.FirstName); } else { await SendEmailWithoutPassword(userModel, string.IsNullOrEmpty(admin.FirstName)?admin.Email.Split('@').FirstOrDefault() : admin.FirstName); } return; }
public async Task <IActionResult> ExternalLoginCallback(string returnUrl = null, string remoteError = null) { if (remoteError != null) { return(Render(ExternalLoginStatus.Error)); } var info = await _signInManager.GetExternalLoginInfoAsync(); if (info == null) { return(Render(ExternalLoginStatus.Invalid)); } // Sign in the user with this external login provider if the user already has a login. var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent : false); var email = info.Principal.FindFirstValue(ClaimTypes.Email); if (result.Succeeded) { var user = _userManager.FindByEmailAsync(email).Result; IList <string> roles = _userManager.GetRolesAsync(user).Result; if (_accountHelper.IsAccountActive(email)) { return(RedirectToAction("Index", "Home")); } else { return(RedirectToAction("Unauthorized")); } } if (result.RequiresTwoFactor) { return(Render(ExternalLoginStatus.TwoFactor)); } if (result.IsLockedOut) { return(Render(ExternalLoginStatus.Lockout)); } else { ViewData["ReturnUrl"] = returnUrl; ViewData["LoginProvider"] = info.LoginProvider; info.Principal.FindFirstValue(ClaimTypes.Email); string roleName = _accountHelper.GetRoleForEmail(email); if (string.IsNullOrEmpty(roleName)) { return(RedirectToAction("NotRegistered")); } var user = new QRecruitmentUser { UserName = email, Email = email, CreatedDate = DateTime.Now }; var createUserTaskResult = _userManager.CreateAsync(user).Result; IdentityResult roleCreationResult = null; if (!_roleManager.RoleExistsAsync(roleName).Result) { roleCreationResult = _roleManager.CreateAsync(new QRecruitmentRole(roleName)).Result; } if (createUserTaskResult.Succeeded) { var createLoginTaskResult = _userManager.AddLoginAsync(user, info).Result; var addUserToRoleTaskResult = _userManager.AddToRoleAsync(user, roleName).Result; if (createLoginTaskResult.Succeeded) { await _signInManager.SignInAsync(user, isPersistent : false); return(RedirectToAction("Index", "Home")); } } if (createUserTaskResult.Errors.First().Code == "DuplicateUserName") { return(RedirectToAction("DuplicateUserError")); } return(RedirectToAction("UserCreationError")); } //else //{ // // If the user does not have an account, then ask the user to create an account. // // ViewData["ReturnUrl"] = returnUrl; // // ViewData["LoginProvider"] = info.LoginProvider; // // var email = info.Principal.FindFirstValue(ClaimTypes.Email); // // return RedirectToAction("Index", "Home", new ExternalLoginCreateAccountViewModel { Email = email }); // return Render(ExternalLoginStatus.CreateAccount); //} }
internal static IActionResult SignIn(QRecruitmentUser user, IList <string> roles) { var userResult = new { User = new { DisplayName = user.UserName, Roles = roles } }; return(new ObjectResult(userResult)); }
public async Task <IActionResult> AddCandidateAsync([FromBody] CandidateDto candidateDto) { var adminEmail = this.User.Identities.First().Name; var admin = _adminRepository.GetSingle(a => a.Email == adminEmail); var existingCandidate = _candidateRepository.FindBy(c => c.Email == candidateDto.Email).FirstOrDefault(); if (existingCandidate == null) { var candidate = Mapper.Map <Candidate>(candidateDto); candidate.IsActive = true; candidate.CreatedUtc = DateTime.UtcNow; candidate.AdminId = admin.Id; IList <UserCreationModel> userModels = new List <UserCreationModel>(); try { _candidateRepository.Add(candidate); var socialLogins = new List <string>() { "@outlook", "@live", "@hotmail", "@gmail", "@google" }; if (!socialLogins.Any(emailType => candidate.Email.Contains(emailType))) { var user = new QRecruitmentUser { UserName = candidate.Email, Email = candidate.Email, CreatedDate = DateTime.UtcNow }; var password = AccountHelper.GenerateRandomString(); user.PlainPassword = password; userModels.Add(new UserCreationModel { Username = candidate.Email, Password = password }); var result = await _userManager.CreateAsync(user, password); if (result.Succeeded) { var addedToRoleResult = await _userManager.AddToRoleAsync(user, Roles.Candidate); } else { return(StatusCode(StatusCodes.Status409Conflict, candidate)); } } await SendEmails(userModels); return(Created("created", candidate)); } catch (Exception ex) { return(BadRequest("unable to add candidate" + ex.Message)); } } else { return(StatusCode(StatusCodes.Status409Conflict, JsonConvert.SerializeObject("Duplicate"))); } }
public async Task <IActionResult> AddCandidatesAsync() { try { IList <CandidateDto> candidateDtos; var statusCode = GetCandidateDtosFromWorkSheet(out candidateDtos); if (statusCode == StatusCodes.Status200OK) { var candidates = Mapper.Map <List <Candidate> >(candidateDtos); var adminEmail = this.User.Identities.First().Name; var admin = await _adminRepository.GetSingleAsync(a => a.Email == adminEmail); var isDuplicatesFound = false; IList <UserCreationModel> userModels = new List <UserCreationModel>(); foreach (var candidate in candidates) { var candidateEntity = await _candidateRepository.GetSingleAsync(c => c.Email == candidate.Email); if (candidateEntity != null) { isDuplicatesFound = true; //return StatusCode(StatusCodes.Status409Conflict, candidate); continue; } candidate.CreatedUtc = DateTime.UtcNow; candidate.AdminId = admin.Id; candidate.IsActive = true; _candidateRepository.Add(candidate); var socialLogins = new List <string>() { "@outlook", "@live", "@hotmail", "@gmail", "@google" }; if (!socialLogins.Any(emailType => candidate.Email.Contains(emailType))) { var user = new QRecruitmentUser { UserName = candidate.Email, Email = candidate.Email, CreatedDate = DateTime.UtcNow }; var password = AccountHelper.GenerateRandomString(); user.PlainPassword = password; userModels.Add(new UserCreationModel { Username = candidate.Email, Password = password }); var result = await _userManager.CreateAsync(user, password); if (result.Succeeded) { var addedToRoleResult = await _userManager.AddToRoleAsync(user, Roles.Candidate); } else { return(StatusCode(StatusCodes.Status400BadRequest, candidate)); } } } await SendEmails(userModels); if (isDuplicatesFound) { return(StatusCode(StatusCodes.Status409Conflict)); } return(Created(string.Empty, JsonConvert.SerializeObject("created"))); } else { return(StatusCode(statusCode)); } } catch (Exception ex) { return(BadRequest(ex.Message)); } }