public async Task <ActionResult> ResetPassword(ResetPasswordViewModel model)
        {
            if (!EmailValidator.IsValid(model.Email))
            {
                ModelState.AddModelError("Email", "Email kunne ikke valideres som værende korrekt email format.");
            }
            else
            {
                model.Email = EmailValidator.ParseEmail(model.Email);
            }

            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            var user = await UserManager.FindByNameAsync(model.Email);

            if (user == null)
            {
                // Don't reveal that the user does not exist
                return(RedirectToAction("ResetPasswordConfirmation", "Account"));
            }
            var result = await UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password);

            if (result.Succeeded)
            {
                return(RedirectToAction("ResetPasswordConfirmation", "Account"));
            }
            AddErrors(result);
            return(View());
        }
        public async Task <ActionResult> Register(RegisterViewModel model)
        {
            if (!EmailValidator.IsValid(model.Email))
            {
                ModelState.AddModelError("Email", "Email kunne ikke valideres som værende korrekt email format.");
            }
            else
            {
                model.Email = EmailValidator.ParseEmail(model.Email);
            }

            if (ModelState.IsValid)
            {
                var user = new ApplicationUser {
                    UserName = model.Email, Email = model.Email
                };
                var result = await UserManager.CreateAsync(user, model.Password);

                if (result.Succeeded)
                {
                    var callbackUrl = await GenerateEmailConfirmationEmail(user);

                    ViewBag.Link = callbackUrl;
                    return(View("DisplayEmail"));
                }
                AddErrors(result);
            }

            // If we got this far, something failed, redisplay form
            return(View(model));
        }
        public async Task <ActionResult> Login(LoginViewModel model, string returnUrl)
        {
            if (!EmailValidator.IsValid(model.Email))
            {
                ModelState.AddModelError("Email", "Email kunne ikke valideres som værende korrekt email format.");
            }
            else
            {
                model.Email = EmailValidator.ParseEmail(model.Email);
            }

            if (!ModelState.IsValid)
            {
                ViewBag.ReturnUrl           = returnUrl;
                ViewBag.LiveDemoMemberships = Demo.GetLiveDemoMemberships();
                ViewBag.EnableDemo          = (ViewBag.LiveDemoMemberships != null && ViewBag.LiveDemoMemberships.Count > 0);
                ViewBag.EnableMobil         = UserManager.TwoFactorProviders.ContainsKey("PhoneCode");
                model.LoginState            = LoginViewModel.State.Login;
                return(View(model));
            }

            // This doen't count login failures towards lockout only two factor authentication
            // To enable password failures to trigger lockout, change to shouldLockout: true
            var result = await SignInHelper.PasswordSignIn(model.Email, model.Password, model.RememberMe, shouldLockout : false);

            switch (result)
            {
            case SignInStatus.Success:

                var cookie = new HttpCookie("LastEmailLogin", model.Email);
                cookie.Expires = DateTime.Now.AddMonths(1);
                Response.AppendCookie(cookie);

                return(RedirectToLocal(returnUrl));

            case SignInStatus.UnConfirmed:
                return(RedirectToAction("EmailNotConfirmed", new { email = model.Email }));

            case SignInStatus.LockedOut:
                return(View("Lockout"));

            case SignInStatus.RequiresTwoFactorAuthentication:
                return(RedirectToAction("SendCode", new { ReturnUrl = returnUrl }));

            case SignInStatus.Failure:
            default:
                ViewBag.ReturnUrl           = returnUrl;
                ViewBag.LiveDemoMemberships = Demo.GetLiveDemoMemberships();
                ViewBag.EnableDemo          = (ViewBag.LiveDemoMemberships != null && ViewBag.LiveDemoMemberships.Count > 0);
                ViewBag.EnableMobil         = UserManager.TwoFactorProviders.ContainsKey("PhoneCode");
                model.LoginState            = LoginViewModel.State.Login;
                ModelState.AddModelError("", "Invalid login attempt.");
                return(View(model));
            }
        }
        public async Task <ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)
        {
            if (User.Identity.IsAuthenticated)
            {
                return(RedirectToAction("Index", "Manage"));
            }

            if (ModelState.IsValid)
            {
                // Get the information about the user from the external login provider
                var info = await AuthenticationManager.GetExternalLoginInfoAsync();

                if (info == null)
                {
                    return(View("ExternalLoginFailure"));
                }
                if (!EmailValidator.IsValid(model.Email))
                {
                    ViewBag.Message = string.Format("Unable to validate email '{0}' as email.", model.Email);
                    return(View("ExternalLoginFailure"));
                }
                else
                {
                    model.Email = EmailValidator.ParseEmail(model.Email);
                }
                var user = new ApplicationUser {
                    UserName = model.Email, Email = model.Email
                };
                var result = await UserManager.CreateAsync(user);

                if (result.Succeeded)
                {
                    result = await UserManager.AddLoginAsync(user.Id, info.Login);

                    if (result.Succeeded)
                    {
                        // We dont log the user in until there email has been validated.
                        //await SignInHelper.SignInAsync(user, isPersistent: false, rememberBrowser: false);

                        // Generete token email
                        var callbackUrl = GenerateEmailConfirmationEmail(user);
                        ViewBag.Link = callbackUrl;

                        return(RedirectToAction("DisplayEmail"));
                        //return RedirectToLocal(returnUrl);
                    }
                }
                AddErrors(result);
            }

            ViewBag.ReturnUrl = returnUrl;
            return(View(model));
        }
Ejemplo n.º 5
0
        public async Task <ActionResult> Create(RegisterViewModel userViewModel, params string[] selectedRoles)
        {
            if (!EmailValidator.IsValid(userViewModel.Email))
            {
                ModelState.AddModelError("Email", "Email kunne ikke valideres som værende korrekt email format.");
            }
            else
            {
                userViewModel.Email = EmailValidator.ParseEmail(userViewModel.Email);
            }

            if (ModelState.IsValid)
            {
                var user = new ApplicationUser {
                    UserName = userViewModel.Email, Email = userViewModel.Email, EmailConfirmed = true
                };
                var adminresult = await UserManager.CreateAsync(user, userViewModel.Password);

                //Add User to the selected Roles
                if (adminresult.Succeeded)
                {
                    if (selectedRoles != null)
                    {
                        var result = await UserManager.AddUserToRolesAsync(user.Id, selectedRoles);

                        if (!result.Succeeded)
                        {
                            ModelState.AddModelError("", result.Errors.First());
                            ViewBag.RoleId = new SelectList(await RoleManager.Roles.ToListAsync(), "Name", "Name");
                            return(View());
                        }
                    }
                }
                else
                {
                    ModelState.AddModelError("", adminresult.Errors.First());
                    ViewBag.RoleId = new SelectList(RoleManager.Roles, "Name", "Name");
                    return(View());
                }
                return(RedirectToAction("Index"));
            }
            ViewBag.RoleId = new SelectList(RoleManager.Roles, "Name", "Name");
            return(View());
        }
        public async Task <ActionResult> ForgotPassword(ForgotPasswordViewModel model)
        {
            if (!EmailValidator.IsValid(model.Email))
            {
                ModelState.AddModelError("Email", "Email kunne ikke valideres som værende korrekt email format.");
            }
            else
            {
                model.Email = EmailValidator.ParseEmail(model.Email);
            }

            if (ModelState.IsValid)
            {
                var user = await UserManager.FindByNameAsync(model.Email);

                if (user == null)
                {
                    // Don't reveal that the user does not exist or is not confirmed
                    //return View("ForgotPasswordConfirmation");

                    if (!EmailValidator.IsValid(model.Email))
                    {
                        return(View("ForgotPasswordMissingAccount"));
                    }

                    var pilots = EmailValidator.FindPilotsByEmail(model.Email);
                    if (!pilots.Any())
                    {
                        return(View("ForgotPasswordMissingAccount"));
                    }

                    // HACK: We only attach to the first pilot profil in this setup.
                    var pilot = pilots.First();

                    var email = EmailValidator.ParseEmail(model.Email);
                    // Create mobilPhone Application User, Email is required and + is removed
                    user = new ApplicationUser()
                    {
                        UserName             = email,
                        Email                = email,
                        EmailConfirmed       = true,
                        BoundToPilotId       = pilot.PilotId.ToString(),
                        PhoneNumberConfirmed = false,
                        PhoneNumber          = string.Empty,
                        TwoFactorEnabled     = false
                    };
                    var result = UserManager.Create(user);
                    if (!result.Succeeded)
                    {
                        throw new SecurityException(string.Format("Failed to generate user {0} for {1}", email, result.Errors.FirstOrDefault()));
                    }
                    result = UserManager.SetLockoutEnabled(user.Id, false);

                    var welcomecode = await UserManager.GeneratePasswordResetTokenAsync(user.Id);

                    var callbackWelcomeUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = welcomecode }, protocol: Request.Url.Scheme);
                    await UserManager.SendEmailAsync(user.Id, "Startlist.club - Set Password", "Please set your password at " + callbackWelcomeUrl);

                    ViewBag.Link  = callbackWelcomeUrl;
                    ViewBag.Pilot = pilot.Name;
                    ViewBag.Email = email;
                    return(View("ForgotPasswordGeneratedAccount"));
                }

                if (!(await UserManager.IsEmailConfirmedAsync(user.Id)))
                {
                    ViewBag.Email = user.Email;
                    return(View("DisplayEmail"));
                }

                var code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);

                var callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                await UserManager.SendEmailAsync(user.Id, "Startlist.club - Reset Password", "Please reset your password at " + callbackUrl);

                ViewBag.Link = callbackUrl;
                return(View("ForgotPasswordConfirmation"));
            }

            // If we got this far, something failed, redisplay form
            return(View(model));
        }