예제 #1
0
        public async Task <IActionResult> OnPostChangeEmailAsync()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound("Não foi possível carregar os dados do usuário"));
            }

            if (!ModelState.IsValid)
            {
                await LoadAsync(user).ConfigureAwait(false);

                return(Page());
            }

            var email = await _userManager.GetEmailAsync(user);

            if (Input.NewEmail != email)
            {
                var userId = await _userManager.GetUserIdAsync(user);

                var code = await _userManager.GenerateChangeEmailTokenAsync(user, Input.NewEmail);

                code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                var callbackUrl = Url.Page(
                    "/Account/ConfirmEmailChange",
                    pageHandler: null,
                    values: new { userId = userId, email = Input.NewEmail, code = code },
                    protocol: Request.Scheme);

                var htmlMessage =
                    $"Olá,<br>" +
                    $"Recebemos uma solicitação de alteração de e-mail. Para confirmar seu novo e-mail <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clique neste link</a>.<br><br>" +
                    $"Equipe de suporte ao cliente <br>" +
                    $"Prestige do Brasil";

                await _suporteAppServices.SendAutomaticSuporteEmail(htmlMessage, Input.NewEmail, "Alteração de email");

                StatusMessage = "Link de confirmação encaminhado para o e-mail informado";
                return(RedirectToPage());
            }

            StatusMessage = "Não houve alteração no e-mail.";
            return(RedirectToPage());
        }
예제 #2
0
        public async Task <IActionResult> Edit(UsuarioEmpresaAggregateViewModel usuarioEmpresaAggregateViewModel)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    if (usuarioEmpresaAggregateViewModel.NewEmail != usuarioEmpresaAggregateViewModel.Email)
                    {
                        var user = await _userManager.FindByIdAsync(usuarioEmpresaAggregateViewModel.Usuario.UserId);

                        var code = await _userManager.GenerateChangeEmailTokenAsync(user, usuarioEmpresaAggregateViewModel.NewEmail);

                        code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                        var callbackUrl = Url.Page(
                            "/Account/ConfirmEmailChange",
                            pageHandler: null,
                            values: new { area = "Identity", userId = user.Id, email = usuarioEmpresaAggregateViewModel.NewEmail, code = code },
                            protocol: Request.Scheme);

                        var htmlMessage =
                            $"Olá,<br>" +
                            $"Nossa equipe alterou seu email. Para confirmar seu novo e-mail <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clique neste link</a>.<br><br>" +
                            $"Equipe de suporte ao cliente <br>" +
                            $"Prestige do Brasil";

                        await _suporteAppServices.SendAutomaticSuporteEmail(htmlMessage, usuarioEmpresaAggregateViewModel.NewEmail, "Alteração de email");
                    }

                    await _usuarioAppServices.UpdateAsync(usuarioEmpresaAggregateViewModel.Usuario);

                    TempData["Success"] = "Usuário atualizado com sucesso";
                }
                catch (Exception e)
                {
                    TempData["Error"] = e.Message;
                }
            }

            return(RedirectToAction("Edit", new { userId = usuarioEmpresaAggregateViewModel.Usuario.UserId }));
        }
예제 #3
0
        public async Task <IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound("Não foi possível carregar os dados do usuario."));
            }

            var changePasswordResult = await _userManager.ChangePasswordAsync(user, Input.OldPassword, Input.NewPassword);

            if (!changePasswordResult.Succeeded)
            {
                foreach (var error in changePasswordResult.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
                return(Page());
            }

            var htmlMessage =
                $"Olá,<br>" +
                $"Sua senha acaba de ser alterada.<br>" +
                $"Caso esta alteração não tenha sido realizada por você, entre em contato com o suporte ou redefina sua senha em nosso site.<br><br>" +
                $"Equipe de suporte ao cliente <br>" +
                $"Prestige do Brasil";

            await _suporteAppServices.SendAutomaticSuporteEmail(htmlMessage, user.Email, "Alteração de senha");

            await _signInManager.RefreshSignInAsync(user);

            _logger.LogInformation("User changed their password successfully.");
            StatusMessage = "Senha alterada com sucesso";

            return(RedirectToPage());
        }
예제 #4
0
        public async Task <IActionResult> OnPostAsync()
        {
            if (ModelState.IsValid)
            {
                var user = await _userManager.FindByEmailAsync(Input.Email);

                if (user == null || !(await _userManager.IsEmailConfirmedAsync(user)))
                {
                    // Don't reveal that the user does not exist or is not confirmed
                    return(RedirectToPage("./ForgotPasswordConfirmation"));
                }

                // For more information on how to enable account confirmation and password reset please
                // visit https://go.microsoft.com/fwlink/?LinkID=532713
                var code = await _userManager.GeneratePasswordResetTokenAsync(user);

                code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                var callbackUrl = Url.Page(
                    "/Account/ResetPassword",
                    pageHandler: null,
                    values: new { area = "Identity", code },
                    protocol: Request.Scheme);


                var htmlMessage =
                    $"Olá,<br>" +
                    $"Recebemos uma solicitação de alteração de senha da sua conta. Para alterar sua senha <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clique neste link</a>.<br><br>" +
                    $"Caso não tenha solicitado a alteração de senha, desconsidere esse e-mail.<br><br><br>" +
                    $"Equipe de suporte ao cliente <br>" +
                    $"Prestige do Brasil";

                await _suporteAppServices.SendAutomaticSuporteEmail(htmlMessage, Input.Email, "Solicitação de recuperação de senha");

                return(RedirectToPage("./ForgotPasswordConfirmation"));
            }

            return(Page());
        }
예제 #5
0
        public async Task <IActionResult> OnPostAsync(string CnpjConsulta, string captcha, string returnUrl = null)
        {
            returnUrl ??= Url.Content("~/");

            if (returnUrl == "Consulta")
            {
                await ConsultarDadosCnpjAsync(CnpjConsulta).ConfigureAwait(false);

                return(Page());
            }

            ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();

            if (!ModelState.IsValid)
            {
                return(Page());
            }

            try
            {
                var empresaViewModel = await ConvertInputModelToModelEmpresa().ConfigureAwait(false);

                var(resultStatusFirst, _) = await VerificarExistenciaEmpresa(empresaViewModel.Cnpj);

                if (!resultStatusFirst)
                {
                    var user = new IdentityUser {
                        UserName = Input.Email, Email = Input.Email
                    };
                    var result = await _userManager.CreateAsync(user, Input.Password);

                    if (result.Succeeded)
                    {
                        var usuarioViewModel = await ConvertInputModelToModelUsuario().ConfigureAwait(false);

                        empresaViewModel.UserId = user.Id;
                        usuarioViewModel.UserId = user.Id;


                        try
                        {
                            if (empresaViewModel.Numero == "S/N")
                            {
                                empresaViewModel.Numero = "0";
                            }

                            await _empresaAppServices.Create(empresaViewModel, usuarioViewModel);

                            var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                            code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));

                            var callbackUrl = Url.Page(
                                "/Account/ConfirmEmail",
                                pageHandler: null,
                                values: new { area = "Identity", userId = user.Id, code = code },
                                protocol: Request.Scheme);

                            var htmlMessage =
                                $"Olá, {Input.NomeCompleto}!<br>" +
                                $"Obrigado por se cadastrar em nosso site. Para confirmar seu e-mail <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clique neste link</a>.<br>" +
                                $"Logo retornaremos o contato informando o status da liberação.<br><br>" +
                                $"Att<br>" +
                                $"Equipe Prestige do Brasil";

                            await _suporteAppServices.SendAutomaticSuporteEmail(htmlMessage, Input.Email, "Cadastro realizado com sucesso");

                            return(RedirectToPage("./RegisterConfirmation", new { email = Input.Email }));
                        }
                        catch (Exception ex)
                        {
                            var(resultStatus, resultDados) = await VerificarExistenciaEmpresa(empresaViewModel.Cnpj);

                            if (resultStatus)
                            {
                                await _empresaAppServices.DeleteAsync(resultDados.Id);
                            }

                            await _userManager.DeleteAsync(user);

                            ModelState.AddModelError(string.Empty, "Ocorreu um erro inesperado ao finalizar o seu cadastro, por favor, tente novamente");
                            return(Page());
                        }
                    }

                    foreach (var error in result.Errors)
                    {
                        if (error.Code == "DuplicateUserName")
                        {
                            error.Description = $"{Input.Email} já está cadastrado, utilize a opção esqueci minha senha.";
                        }

                        ModelState.AddModelError(string.Empty, error.Description);
                    }
                }
                else
                {
                    ModelState.AddModelError(string.Empty, "Empresa já cadastrada");
                    return(Page());
                }
            }
            catch (ModelValidationExceptions e)
            {
                ModelState.AddModelError(e.PropertyName, e.Message);
            }
            catch (Exception e)
            {
                ModelState.AddModelError(string.Empty, e.Message);
            }

            return(Page());
        }
예제 #6
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");

            if (ModelState.IsValid)
            {
                // This doesn't count login failures towards account lockout
                // To enable password failures to trigger account lockout, set lockoutOnFailure: true
                var mensagem = "";

                var identityUser = await _userManager.FindByEmailAsync(Input.Email);



                if (identityUser != null)
                {
                    var usuario = await _usuarioAppServices.GetByUserIdAsync(identityUser.Id);

                    var result = SignInResult.Success;

                    if (usuario.BloqueioAutomatico)
                    {
                        if (usuario.Verificado)
                        {
                            result   = SignInResult.LockedOut;
                            mensagem = "Usuário bloqueado. Entre em contato com nosso suporte para mais informações";
                        }
                        else
                        {
                            result   = SignInResult.LockedOut;
                            mensagem = "Usuário bloqueado. Seu cadastro está em análise";
                        }
                    }
                    else if (usuario.BloqueioManual)
                    {
                        result   = SignInResult.LockedOut;
                        mensagem = "Usuário bloqueado. Entre em contato com nosso suporte para mais informações";
                    }

                    if (result.Succeeded)
                    {
                        _logger.LogInformation("User logged in.");
                        result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure : false);

                        if (result.Succeeded)
                        {
                            return(LocalRedirect(returnUrl));
                        }
                        else if (result.IsNotAllowed)
                        {
                            var code = await _userManager.GenerateEmailConfirmationTokenAsync(identityUser);

                            code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));

                            var callbackUrl = Url.Page(
                                "/Account/ConfirmEmail",
                                pageHandler: null,
                                values: new { area = "Identity", userId = identityUser.Id, code = code },
                                protocol: Request.Scheme);

                            var htmlMessage =
                                $"Olá, {usuario.NomeCompleto}!<br>" +
                                $"Para finalizar seu cadastro em nosso site, favor confirmar seu e-mail clicando <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>neste link</a>.<br><br><br>" +
                                $"Equipe de suporte ao cliente <br>" +
                                $"Prestige do Brasil";

                            await _suporteAppServices.SendAutomaticSuporteEmail(htmlMessage, Input.Email, "Confirmação de conta");

                            ModelState.AddModelError(string.Empty, "Confirme seu e-mail para acessar o sistema. Reenviamos o link de confirmação para o e-mail cadastrado");
                        }
                        else
                        {
                            ModelState.AddModelError(string.Empty, "Usuário ou senha incorretos");
                        }
                    }
                    if (result.RequiresTwoFactor)
                    {
                        return(RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe }));
                    }
                    if (result.IsLockedOut)
                    {
                        ModelState.AddModelError(string.Empty, mensagem);
                        return(Page());
                    }
                }
                else
                {
                    ModelState.AddModelError(string.Empty, "Usuario ou senha incorretos.");
                    return(Page());
                }
            }

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