Example #1
0
        public async Task <UsuarioResponse> LoginUser(LoginWithPatron request)
        {
            UsuarioResponse response      = new UsuarioResponse();
            var             paramUserName = new SqlParameter("@username", request.username);
            var             paramPassword = new SqlParameter("@pass_user", request.pass_user);
            var             paramPatron   = new SqlParameter("@Patron", request.Patron);

            try
            {
                IList <TblUsuarios> usr = await db.Usuarios.FromSqlRaw("SP_ValidarUsuario @username, @pass_user, @Patron", paramUserName, paramPassword, paramPatron).ToListAsync();

                if (usr != null && usr.Count == 1)
                {
                    response = map.Map <UsuarioResponse>(usr.FirstOrDefault());
                }
                return(response);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"{ex.Message} {ex.InnerException?.Message}");
                throw;
            }
        }
        public async Task <IActionResult> Login([FromBody] LoginRequest request)
        {
            GenericResponse <LoginResponse> response;

            try
            {
                string          patron        = config["AppSettings:PatronConfig"];
                LoginWithPatron requestPatron = new LoginWithPatron()
                {
                    pass_user = request.pass_user,
                    username  = request.username,
                    Patron    = patron
                };

                //Consulta al useCase LoginUsuario, encargado de devolvernos el registro de usuario si llegace a existir en la base.
                var item = await useCase.LoginUsuario(requestPatron);


                //Validar que el username no sea null
                if (item != null && !string.IsNullOrEmpty(item.username))
                {
                    //validar que usuario no esté inactivo
                    if (item.Estado == 0)
                    {
                        LoginResponse loginResponseUnauthorized = new LoginResponse()
                        {
                            Jwt            = "0",
                            ExpirationDate = DateTime.Today.AddDays(-1)
                                             //Se devuelve el LoginResponse sin token
                        };
                        response = new GenericResponse <LoginResponse>()
                        {
                            Item   = loginResponseUnauthorized,
                            status = new HttpCodeStatus()
                            {
                                Code        = System.Net.HttpStatusCode.Unauthorized,
                                Description = "USUARIO INHABILITADO"
                            }
                        };
                        //Se manda el Gererin response indicando que usuario está inhabilitado
                    }
                    else
                    {
                        //Si sse especifica
                        var tokenHandler    = new JwtSecurityTokenHandler();
                        var key             = Encoding.ASCII.GetBytes(config["JWT:key"]);
                        var tokenDescriptor = new SecurityTokenDescriptor
                        {
                            Subject = new ClaimsIdentity(new Claim[]
                            {
                                new Claim(ClaimTypes.Name, $"{item.nombre_user}"),
                                new Claim(ClaimTypes.Email, $"{item.email_user}")
                            }),
                            Audience           = request.username,
                            IssuedAt           = DateTime.UtcNow,
                            Issuer             = config["JWT:Issuer"],
                            Expires            = DateTime.UtcNow.AddMinutes(300),//Caducidad de 5 horas
                            SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
                        };
                        tokenDescriptor.Subject.AddClaim(new Claim(ClaimTypes.Sid, item.email_user));
                        if (!string.IsNullOrEmpty(item.email_user))
                        {
                            tokenDescriptor.Subject.AddClaim(new Claim(ClaimTypes.Email, item.email_user));
                        }
                        var    securityToken = tokenHandler.CreateToken(tokenDescriptor);
                        string Token         = tokenHandler.WriteToken(securityToken);

                        LoginResponse loginResponse = new LoginResponse()
                        {
                            Jwt            = Token,
                            ExpirationDate = tokenDescriptor.Expires.Value
                        };
                        response = new GenericResponse <LoginResponse>()
                        {
                            Item   = loginResponse,
                            status = new HttpCodeStatus()
                            {
                                Code        = System.Net.HttpStatusCode.OK,
                                Description = "OK"
                            }
                        };
                    }
                }
                else
                {
                    response = new GenericResponse <LoginResponse>()
                    {
                        status = new HttpCodeStatus()
                        {
                            Code        = System.Net.HttpStatusCode.NotFound,
                            Description = $"No se ha encontrado el usuario con nombre {request.username}"
                        }
                    }
                };
                return(Ok(response));
            }
            catch (Exception ex)
            {
                Console.WriteLine($"{ex.Message} {ex.InnerException?.Message}");
                response = new GenericResponse <LoginResponse>()
                {
                    status = new HttpCodeStatus()
                    {
                        Code        = System.Net.HttpStatusCode.InternalServerError,
                        Description = ex.Message
                    }
                };
                return(StatusCode(StatusCodes.Status500InternalServerError, response));
            }
        }
Example #3
0
 public async Task <UsuarioResponse> LoginUsuario(LoginWithPatron request) => await repository.LoginUser(request);