Esempio n. 1
0
        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" }));
        }
Esempio n. 2
0
 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;
     }
 }
Esempio n. 3
0
        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;
        }
Esempio n. 4
0
        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);
            //}
        }
Esempio n. 5
0
        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));
            }
        }