コード例 #1
0
        public async Task <ActionResult <Models.Response.CodigoRecuperacaoResponse> > GerarCodigoAsync(Models.Request.CodigoRecupecaoRequest req)
        {
            try
            {
                long codigo = esqueciSenhaBsn.GerarCodigoRecuperacao();

                Models.TbLogin usuario = await usuarioBsn.ConsultarLoginPorEmailAsync(req.Email);

                Models.TbEsqueciSenha tb = esqueciSenhaCnv.ToTbEsqueciSenha(codigo, usuario, req.Email);

                tb = await esqueciSenhaBsn.SalvarCodigoRecuperacaoAsync(tb);

                gerenciadorEmailBsn.EnviarEmailCodigo(tb.DsEmail, tb.TmExpiracao, tb.NrCodigo);

                Models.Response.CodigoRecuperacaoResponse resp = esqueciSenhaCnv.ToEsqueciSenhaResponse(tb, usuario);

                return(resp);
            }
            catch (Exception e)
            {
                return(BadRequest(
                           new Models.Response.ErroResponse(400, e.Message)
                           ));
            }
        }
コード例 #2
0
        public async Task <Models.TbEsqueciSenha> DeletarRecuperacaoDeSenhaPorTempo(Models.TbEsqueciSenha req)
        {
            ctx.TbEsqueciSenha.Remove(req);
            await ctx.SaveChangesAsync();

            return(req);
        }
コード例 #3
0
        public async Task <Models.TbEsqueciSenha> SalvarCodigoRecuperacaoAsync(Models.TbEsqueciSenha req)
        {
            await ctx.TbEsqueciSenha.AddAsync(req);

            await ctx.SaveChangesAsync();

            return(req);
        }
コード例 #4
0
        public Models.Response.CodigoRecuperacaoResponse ToEsqueciSenhaResponse(Models.TbEsqueciSenha tb, Models.TbLogin tbLogin)
        {
            Models.Response.CodigoRecuperacaoResponse resp = new Models.Response.CodigoRecuperacaoResponse();

            resp.Email   = tbLogin.DsEmail;
            resp.IdLogin = tb.IdLogin;

            return(resp);
        }
コード例 #5
0
        public Models.TbEsqueciSenha ToTbEsqueciSenha(long codigo, Models.TbLogin usuario, string email)
        {
            Models.TbEsqueciSenha tb = new Models.TbEsqueciSenha();

            tb.DsEmail     = email;
            tb.IdLogin     = usuario.IdLogin;
            tb.NrCodigo    = codigo;
            tb.TmInclusao  = DateTime.Now;
            tb.TmExpiracao = DateTime.Now.AddMinutes(15);

            return(tb);
        }
コード例 #6
0
        public async Task <Models.TbEsqueciSenha> SalvarCodigoRecuperacaoAsync(Models.TbEsqueciSenha req)
        {
            if (req.IdLogin <= 0)
            {
                throw new Exception("Usuário não encontrado.");
            }

            if (req.TmExpiracao < DateTime.Now)
            {
                throw new Exception("O código expirou, iremos reenviar o email de recuperação de senha.");
            }

            if (req.TmInclusao > DateTime.Now)
            {
                throw new Exception("Período do código inválido.");
            }

            if (!req.DsEmail.Contains('@'))
            {
                throw new Exception("Este Email é invalido.");
            }

            if (req.NrCodigo <= 0)
            {
                throw new Exception("Código inválido.");
            }

            bool codigoOk = await this.ValidarCodigoDeRecuperacaoAsync(req.NrCodigo);

            long codigoTest = req.NrCodigo;

            while (codigoOk == false)
            {
                codigoTest = this.GerarCodigoRecuperacao();

                codigoOk = await this.ValidarCodigoDeRecuperacaoAsync(codigoTest);
            }

            req.NrCodigo = codigoTest;

            req = await esqueciSenhaDB.SalvarCodigoRecuperacaoAsync(req);

            return(req);
        }
コード例 #7
0
        public async Task <ActionResult <Models.Response.ValidarCodigoRecuperacaoResponse> > ValidarCodigoAsync(Models.Request.ValidarCodigoRecuperacaoRequest req)
        {
            try
            {
                long codigo = esqueciSenhaCnv.ToCodigo(req);

                Models.TbEsqueciSenha tb = await esqueciSenhaBsn.ConsultarRecuperacaoDeSenhaPorCodigoAsync(codigo);

                Models.Response.ValidarCodigoRecuperacaoResponse resp = esqueciSenhaCnv.ToValidarEsqueciSenhaResponse(tb);

                return(resp);
            }
            catch (Exception ex)
            {
                return(BadRequest(
                           new Models.Response.ErroResponse(400, ex.Message)
                           ));
            }
        }
コード例 #8
0
        public async Task <ActionResult <Models.Response.CodigoRecuperacaoResponse> > AlterarSenhaDeletarCodigoAsync(int?idLogin, Models.Request.NovaSenhaRequest req)
        {
            try{
                esqueciSenhaBsn.ValidarSenhasIdenticas(req.Senha, req.ConfirmarSenha);
                Models.TbLogin tbNovo  = esqueciSenhaCnv.ToSenha(req);
                Models.TbLogin tbAtual = await esqueciSenhaBsn.ConsultarLoginPorIdAsync(idLogin);

                Models.TbEsqueciSenha tbEsqueciSenha = await esqueciSenhaBsn.ConsultarTbEsqueciSenhaPorIdLoginAsync(tbAtual);

                tbAtual = await esqueciSenhaBsn.DeletarRecuperacaoDeSenhaAsync(tbNovo, tbAtual, tbEsqueciSenha);

                Models.Response.CodigoRecuperacaoResponse resp = esqueciSenhaCnv.ToEsqueciSenhaResponse(tbEsqueciSenha, tbAtual);

                return(resp);
            }
            catch (Exception e)
            {
                return(BadRequest(
                           new Models.Response.ErroResponse(400, e.Message)
                           ));
            }
        }
コード例 #9
0
        public async Task <Models.TbEsqueciSenha> ConsultarRecuperacaoDeSenhaPorCodigoAsync(long codigo)
        {
            if (codigo < 111111 || codigo > 999999)
            {
                throw new Exception("Código inválido.");
            }

            Models.TbEsqueciSenha resp = await esqueciSenhaDB.ConsultarRecuperacaoDeSenhaPorCodigoAsync(codigo);

            if (resp == null)
            {
                throw new Exception("Código não encontrado.");
            }

            if (resp.TmExpiracao < DateTime.Now)
            {
                resp = await this.DeletarRecuperacaoDeSenhaPorTempoAsync(resp);

                throw new Exception("O código expirou, iremos reenviar o email de recuperação de senha.");
            }


            return(resp);
        }
コード例 #10
0
        public async Task <Models.TbLogin> DeletarRecuperacaoDeSenhaAsync(Models.TbLogin novo, Models.TbLogin atual, Models.TbEsqueciSenha req)
        {
            if (req == null)
            {
                throw new Exception("Código não encontrado.");
            }

            bool senhaOk = usuarioBsn.SenhaForte(novo.DsSenha);

            if (senhaOk == false)
            {
                throw new Exception("A senha deve conter pelo menos um caracter especial, " +
                                    "uma letra maiúscula, dois números e oito digitos.");
            }

            atual = await esqueciSenhaDB.DeletarRecuperacaoDeSenhaAsync(novo, atual, req);

            return(atual);
        }
コード例 #11
0
        public async Task <Models.TbEsqueciSenha> DeletarRecuperacaoDeSenhaPorTempoAsync(Models.TbEsqueciSenha req)
        {
            if (req == null)
            {
                throw new Exception("Código não encontrado.");
            }

            req = await esqueciSenhaDB.DeletarRecuperacaoDeSenhaPorTempo(req);

            return(req);
        }
コード例 #12
0
        public Models.Response.DeletarCodigoRecuperacaoResponse ToDeletarEsqueciSenhaResponse(Models.TbEsqueciSenha req)
        {
            Models.Response.DeletarCodigoRecuperacaoResponse resp = new Models.Response.DeletarCodigoRecuperacaoResponse();

            resp.Codigo = req.NrCodigo;

            return(resp);
        }
コード例 #13
0
        public Models.Response.ValidarCodigoRecuperacaoResponse ToValidarEsqueciSenhaResponse(Models.TbEsqueciSenha tb)
        {
            Models.Response.ValidarCodigoRecuperacaoResponse resp = new Models.Response.ValidarCodigoRecuperacaoResponse();

            resp.Valido  = true;
            resp.IdLogin = tb.IdLogin;

            return(resp);
        }
コード例 #14
0
        public async Task <Models.TbLogin> DeletarRecuperacaoDeSenhaAsync(Models.TbLogin novo, Models.TbLogin atual, Models.TbEsqueciSenha reqEsqueciSenha)
        {
            atual.DsSenha = novo.DsSenha;

            List <Models.TbEsqueciSenha> lista = ctx.TbEsqueciSenha.Where(x => x.IdLogin == atual.IdLogin).ToList();

            while (lista.Count() > 0)
            {
                lista.Remove(reqEsqueciSenha);
                ctx.TbEsqueciSenha.Remove(reqEsqueciSenha);
                await ctx.SaveChangesAsync();

                reqEsqueciSenha = await this.ConsultarTbEsqueciSenhaPorIdLoginAsync(atual);
            }

            await ctx.SaveChangesAsync();


            return(atual);
        }