public static bool SessionUsuario(MODLoginUsuario registro, EnumSession peticion)
        {
            List <MODLoginUsuario> actual = new List <MODLoginUsuario>();

            actual.AddRange(Logueos);
            switch (peticion)
            {
            case EnumSession._inicio:
                int _tiempo = Convert.ToInt32(Configuraciones.ObtenerConfiguracion("Contexto", "TiempoSession"));
                if ((Logueos.Any(y => y.UserName == registro.UserName && (DateTime.Now - y.Fecha).TotalMinutes > _tiempo)) ||
                    (Logueos.Any(y => y.UserName == registro.UserName && y.IP == registro.IP)))
                {
                    registro.Fecha = DateTime.Now;
                    actual.Remove(Logueos.FirstOrDefault(y => y.UserName == registro.UserName));
                    actual.Add(registro);
                }
                else if (!Logueos.Any(y => y.UserName == registro.UserName))
                {
                    registro.Fecha = DateTime.Now;
                    actual.Add(registro);
                }
                else
                {
                    return(false);
                }
                break;

            case EnumSession._peticion:
                if (Logueos.Any(y => y.UserName == registro.UserName))
                {
                    actual.FirstOrDefault(y => y.UserName == registro.UserName).Fecha = DateTime.Now;
                }
                else
                {
                    return(false);
                }
                break;

            case EnumSession._cierre:
                Logueos.Remove(Logueos.FirstOrDefault(y => y.UserName == registro.UserName));
                break;

            default:
                break;
            }
            ConfiguracionNegocio.Logueos = actual;
            return(true);
        }
        public void CerrarSession([FromBody] LoginRequestModel filtro)
        {
            if (!string.IsNullOrEmpty(filtro.Username))
            {
                var usrlogin = ConfiguracionNegocio.Logueos.Where(x => x.UserName == filtro.Username).FirstOrDefault();
                var aud      = FabricaNegocio.CrearAuditoriaNegocio;
                var usr      = new MODLoginUsuario();
                aud.CrearRastroAuditoria(Comun.Enumeradores.EnumTipoAccionAuditoria.logout, usrlogin.IdUsuario.ToString(), "Autenticacion", usr, usrlogin, filtro.Username, filtro.Ip);

                ConfiguracionNegocio.SessionUsuario(new Comun.Entidades.UsuarioPerfil.MODLoginUsuario
                {
                    UserName = filtro.Username,
                    IP       = filtro.Ip
                }, Comun.Enumeradores.EnumSession._cierre);
            }
        }
        public async Task <LoginResponse> Login([FromBody] LoginRequestModel prmLogin)
        {
            LoginResponse   respuesta      = null;
            string          codigoMensaje  = "COMUNES.ERRORSERVICIO";
            IUsuarioNegocio usuarioNegocio = FabricaNegocio.CrearUsuarioNegocio;

            try
            {
                if (String.IsNullOrEmpty(prmLogin.Username) || String.IsNullOrEmpty(prmLogin.Password))
                {
                    respuesta = new LoginResponse(HttpStatusCode.BadRequest, "LOGIN.RTA004");
                }
                else
                {
                    var usuarioExterno = await usuarioNegocio.ValidarUsuarioServicioExterno(prmLogin.Username, prmLogin.Password, false);

                    bool usuarioOk = usuarioExterno.Item1;
                    codigoMensaje = usuarioExterno.Item2;

                    if (usuarioOk)
                    {
                        var usuarioBD = usuarioNegocio.ObtenerUsuario(prmLogin.Username);

                        if (usuarioBD != null)
                        {
                            if (usuarioBD.Activo)
                            {
                                respuesta = new LoginResponse(usuarioBD, this.GenerateTokenJWT(prmLogin.Username));
                                var usrLogin = new Comun.Entidades.UsuarioPerfil.MODLoginUsuario {
                                    IdUsuario = usuarioBD.IdUsuario,
                                    UserName  = usuarioBD.UserName,
                                    IP        = prmLogin.Ip,
                                    Token     = respuesta.Token
                                };
                                if (ConfiguracionNegocio.SessionUsuario(usrLogin, Comun.Enumeradores.EnumSession._inicio))
                                {
                                    usuarioNegocio.ActualizarUltimaFechaLogin(prmLogin.Username);
                                }
                                else
                                {
                                    respuesta = new LoginResponse(HttpStatusCode.BadRequest, "LOGIN.RTA006");
                                }
                                var aud = FabricaNegocio.CrearAuditoriaNegocio;
                                var usr = new MODLoginUsuario();
                                aud.CrearRastroAuditoria(Comun.Enumeradores.EnumTipoAccionAuditoria.login, usuarioBD.IdUsuario.ToString(), "Autenticacion", usr, usrLogin, prmLogin.Username, prmLogin.Ip);
                            }
                            else
                            {
                                respuesta = new LoginResponse(HttpStatusCode.BadRequest, "LOGIN.RTA005");
                            }
                        }
                        else
                        {
                            respuesta = new LoginResponse(HttpStatusCode.BadRequest, "LOGIN.RTA003");
                        }
                    }
                    else
                    {
                        respuesta = new LoginResponse(HttpStatusCode.BadRequest, codigoMensaje);
                    }
                }
            }
            catch (Exception ex)
            {
                Log.WriteLog(ex, "AutenticacionController.Login", JsonSerializer.Serialize(prmLogin), ErrorType.Error);
                respuesta = new LoginResponse(HttpStatusCode.InternalServerError, codigoMensaje);
            }

            return(respuesta);
        }