Exemple #1
0
        public async Task <RespuestaDatos> GenerarEnlaceConfirmacion(string email)
        {
            var userExists = await _userManager.FindByEmailAsync(email);

            if (userExists == null)
            {
                throw new COExcepcion("La cuenta no existe. ");
            }

            var demografia = _repoDemografia.GetDemografiaPorEmail(userExists.Email);

            if (demografia == null)
            {
                RepoErrorLog.AddErrorLog(new ErrorLog
                {
                    Mensaje   = "El usuario no existe en demografia. ",
                    Traza     = "",
                    Usuario   = userExists.Email,
                    Creacion  = DateTime.Now,
                    Tipoerror = COErrorLog.USUARIO_SIN_RELACION
                });
                throw new COExcepcion("Por favor contactar a soporte técnico. ");
            }

            //Generar token de recuperación
            var code = await _userManager.GenerateEmailConfirmationTokenAsync(userExists);

            var urlApp = _configuration["App:Url"];

            //var linkConfirmation = urlApp + Url.Action("ConfirmarCuenta", "Authenticate", new
            //{
            //    userId = userExists.Email,
            //    code
            //});
            var linkConfirmation = urlApp + $@"/ConfirmarCuenta/{userExists.Email}/{code}";

            try
            {
                //Envia mensaje de registro
                await _workflowMensaje.EnviarMensajeRegistro(new DemografiaDatos
                {
                    Nombres   = demografia.Nombre,
                    Apellidos = demografia.Apellido,
                    Email     = demografia.Email
                }, linkConfirmation);

                return(new RespuestaDatos {
                    Codigo = COCodigoRespuesta.OK, Mensaje = "Se envió el enlace de confirmación a su correo electrónico."
                });
            }
            catch (Exception e)
            {
                throw new COExcepcion("No se logró enviar el correo electrónico. " + e.Message);
            }
        }
        private async Task <JwtSecurityToken> GenerarTokenAcceso(IdentityUser user)
        {
            var userRoles = await _userManager.GetRolesAsync(user);

            var demografia    = _repoDemografia.GetDemografiaPorEmail(user.Email);
            var tipoDocumento = _repoDocumento.GetTipoDocumentoPorId(demografia.Tipodocumentocorid);
            var poblacion     = _repoPoblacion.GetPoblacionPorIdPoblacion(demografia.Idpoblacion);
            var estado        = _repoPoblacion.GetEstadoPorIdPoblacion(demografia.Idpoblacion);
            var authClaims    = new List <Claim>
            {
                new Claim("email", user.Email),
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                new Claim("nombres", demografia.Nombre),
                new Claim("apellidos", demografia.Apellido),
                new Claim("telefono", demografia.Telefono.ToString()),
                new Claim("id", demografia.Id.ToString()),
                new Claim("tipoDocumento", tipoDocumento.Nombre),
                new Claim("documento", demografia.Numerodocumento.ToString()),
                new Claim("direccion", demografia.Direccion.ToString()),
                new Claim("poblacion", poblacion.Nombre.ToString()),
                new Claim("estado", estado.Nombre.ToString())
            };

            foreach (var userRole in userRoles)
            {
                authClaims.Add(new Claim("roles", userRole));
            }

            var authSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["JWT:Secret"]));

            return(new JwtSecurityToken(
                       issuer: _configuration["JWT:ValidIssuer"],
                       audience: _configuration["JWT:ValidAudience"],
                       expires: DateTime.Now.AddDays(60),
                       claims: authClaims,
                       signingCredentials: new SigningCredentials(authSigningKey, SecurityAlgorithms.HmacSha256)
                       ));
        }
 internal DemografiaCor GetDemografiaPorEmail(string emailDemografia)
 {
     return(_repoDemografia.GetDemografiaPorEmail(emailDemografia));
 }