Пример #1
0
        public static void Login(InfoCliente infoCliente, UsuarioEntity datosLogin, bool isPassHash = false, TipoAplicacion idAplicacion = TipoAplicacion.ORDENES)
        {
            UsuarioEntity usuario                = ValidateUser(datosLogin.Username);
            UsuarioEntity partyFather            = new UsuarioEntity();
            var           configuracionSeguridad = CachingManager.Instance.GetConfiguracionSeguridad();

            ValidarAccesoAlSistema(usuario.IdUsuario);
            string userPass = isPassHash ? datosLogin.Pass : MAETools.HashMD5(datosLogin.Pass);

            if (usuario.Pass != userPass)
            {
                ManejarErrorDeAutenticacion(usuario, configuracionSeguridad, idAplicacion);
            }
            ValidarReseteoPassword(usuario);
            ValidarDiasCambioPassword(configuracionSeguridad.DiasCambioPassword, usuario);
            UserHelper.ValidaUsuarioActivo(configuracionSeguridad.MaximoDiasInactividad, usuario);

            if (usuario.Expiracion.HasValue && usuario.Expiracion.Value.Date <= DateTime.Now)
            {
                UserHelper.BlockUsuarios(usuario.IdUsuario, (byte)LogCodigoAccionSeguridad.UsuarioBloqueadoPorCtaExpirada);
                AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_CUENTA_EXPIRADA, false, usuario.Username);
            }

            if (usuario.Proceso)
            {
                SessionHelper.InitSession(infoCliente, usuario, idAplicacion);
            }

            if (datosLogin.Agencia != null)
            {
                using (OrdenesContext mcc = new OrdenesContext())
                {
                    partyFather = (from d in mcc.Usuario where d.Username.Equals(datosLogin.Agencia) select d).FirstOrDefault();
                    PartyHierarchyEntity ph = (from d in mcc.PartyHierarchyEntities where d.IdPartyFather.Equals(partyFather.IdPersona) && d.IdPartyHijo.Equals(usuario.IdPersona) select d).FirstOrDefault();
                    if (ph == null)
                    {
                        AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_USUARIO_NO_HABILITADO_AGENCIA, false, usuario.Username, usuario.Agencia);
                    }
                }
            }
        }
Пример #2
0
        private static Guid DoLogIn(string userName, string Password, InfoCliente infoCliente, TipoAplicacion tipoAplicacion, string NombreAgencia = null, bool passHashed = false, bool isValid = false)
        {
            UsuarioEntity usuario = new UsuarioEntity();

            usuario.Username = userName;
            usuario.Pass     = Password;
            usuario.Agencia  = NombreAgencia;
            ResponseDoubleAuthentication response = new ResponseDoubleAuthentication();

            Login(infoCliente, usuario, idAplicacion: tipoAplicacion);

            var configuracionSeguridad = CachingManager.Instance.GetConfiguracionSeguridad();

            if (!configuracionSeguridad.TieneDobleFactor || (configuracionSeguridad.TieneDobleFactor && isValid))
            {
                using (OrdenesContext mcc = new OrdenesContext())
                {
                    usuario = (from d in mcc.Usuario where d.Username.Equals(userName) select d).FirstOrDefault();
                }
                SessionHelper.InitSession(infoCliente, usuario, idAplicacion: tipoAplicacion);
                SetLoginExitoso(MAEUserSession.Instancia.IdUsuario);

                return(MAEUserSession.Instancia.InternalId);
            }

            var url = OrdenesApplication.Instance.ContextoAplicacion.Urls.Find(f => f.TipoUrl == ConfiguracionSistemaURLsEnumDestino.DoubleAuthentication);

            Guid guidToken = Guid.NewGuid();

            //var telefono = CachingManager.Instance.GetPersonaById((int)CachingManager.Instance.GetUsuarioByUsername(userName).IdPersona).Phone;
            //response = OrdenesApplication.Instance.DoubleAuthenticationService.GetToken(guidToken, telefono, url.Url);


            //if (!response.IsOk)
            //{
            //    throw new M4TraderApplicationException(response.Error);
            //}

            return(guidToken);
        }
Пример #3
0
        private static void ManejarErrorDeAutenticacion(UsuarioEntity usuario, ConfiguracionSeguridadEntity configuracionSeguridad, TipoAplicacion idAplicacion = TipoAplicacion.ORDENES)
        {
            string codigo = CodeMensajes.ERR_AUTHENTICATEUSUARIO;

            usuario.CantidadIntentos = IncreaseIntentos(usuario);

            if (configuracionSeguridad.CantidadIntentosMaximo > 0)
            {
                if (usuario.CantidadIntentos >= configuracionSeguridad.CantidadIntentosMaximo)
                {
                    UserHelper.BlockUsuarios(usuario.IdUsuario, (byte)LogCodigoAccionSeguridad.MaximosIntentos);
                    codigo = CodeMensajes.ERR_ALCANZO_MAXIMO_INTENTOS;
                }
            }
            AdministradorControlErrores.EnviarExcepcion(codigo, false, usuario.Username);
        }
Пример #4
0
        public static M4TraderUserSessionLogin Login(string userName, string password, InfoCliente infoCliente, TipoAplicacion tipoAplicacion, string NombreAgencia = null, bool passHashed = false)
        {
            UserValido resultValidacion = new UserValido();

            try
            {
                resultValidacion = ValidateUser(userName, password, infoCliente, tipoAplicacion, NombreAgencia, passHashed);
            }

            catch (SessionException ex)
            {
                resultValidacion.NeedNewPassword = true;
                resultValidacion.IsOK            = false;
                resultValidacion.MensajeError    = ex.Code;
                resultValidacion.TokenGuid       = "";
            }
            MAEUserSession usuarioSession = null;

            if (MAEUserSession.InstanciaCargada)
            {
                usuarioSession = MAEUserSession.Instancia;
            }


            M4TraderUserSessionLogin userSessionLogin = new M4TraderUserSessionLogin()
            {
                Ok = resultValidacion.IsOK,
                DobleAutenticacion        = CachingManager.Instance.GetConfiguracionSeguridad().TieneDobleFactor,
                Message                   = resultValidacion.MensajeError,
                NeedNewPassword           = resultValidacion.NeedNewPassword,
                TokenGuid                 = resultValidacion.TokenGuid,
                SessionId                 = (usuarioSession == null) ? "" : usuarioSession.ID,
                IdUsuario                 = usuarioSession.IdUsuario,
                IdTipoPersona             = usuarioSession.IdTipoPersona,
                UserName                  = (usuarioSession == null) ? "" : usuarioSession.UserName,
                EstadoSistema             = (usuarioSession == null) ? "" : usuarioSession.EstadoSistema,
                TipoPersona               = (usuarioSession == null) ? "" : UserHelper.getNombreTipoPersona(usuarioSession.IdTipoPersona),
                NombrePersona             = (usuarioSession == null) ? "" : UserHelper.GetNombrePersona(usuarioSession.IdPersona),
                FechaSistema              = CachingManager.Instance.GetFechaSistema().FechaSistema,
                FechaFinalizacionSesion   = (usuarioSession == null) ? DateTime.Now : usuarioSession.FechaFinalizacion,
                JavascriptAllowedCommands = (usuarioSession == null) ? new System.Collections.Generic.Dictionary <string, string>() :usuarioSession.JavascriptAllowedCommands,
                PermisosUsuario           = (usuarioSession == null) ? new System.Collections.Generic.Dictionary <string, bool>() : usuarioSession.PermisosUsuario,
                LoginRealizado            = (usuarioSession == null) ? false : usuarioSession.LoginRealizado,
            };

            return(userSessionLogin);
        }
Пример #5
0
        private static UserValido ValidateUser(string UserName, string Password, InfoCliente infoCliente, TipoAplicacion tipoAplicacion, string NombreAgencia = null, bool passHashed = false, bool isValid = false)
        {
            var configuracionSeguridad = CachingManager.Instance.GetConfiguracionSeguridad();

            Guid       tokenGuid;
            UserValido response = new UserValido();

            response.IsOK = false;
            try
            {
                if (string.IsNullOrEmpty(UserName) || string.IsNullOrEmpty(Password))
                {
                    response.MensajeError = "El nombre de usuario y la contraseña no pueden estar vacíos.";
                    response.IsOK         = false;
                    return(response);
                }

                tokenGuid = DoLogIn(UserName, Password, infoCliente, tipoAplicacion, NombreAgencia, passHashed, isValid);

                if (tokenGuid != Guid.Empty)
                {
                    response.IsOK      = true;
                    response.TokenGuid = tokenGuid.ToString();
                    int          IdUsuario           = CachingManager.Instance.GetUsuarioByUsername(UserName).IdUsuario;
                    DTOPortfolio portfolioPorDefecto = CachingManager.Instance.GetPortfolioDefaultByIdUsuario(IdUsuario);
                    if (portfolioPorDefecto == null)
                    {
                        response.MensajeError = "El Usuario debe tener al menos un portfolio por defecto!.";
                        response.IsOK         = false;
                        return(response);
                    }
                }
                else
                {
                    response.MensajeError = "Verifique el nombre de usuario y contraseña.";
                    response.IsOK         = false;
                }
            }
            catch (M4TraderApplicationException ex)
            {
                if (ex.Codigo == "W100002")
                {
                    response.MensajeError    = "Por políticas de seguridad debe cambiar la contraseña.";
                    response.IsOK            = false;
                    response.NeedNewPassword = true;
                    return(response);
                }
                else
                {
                    response.MensajeError = ex.Message;
                    response.IsOK         = false;
                }
            }
            catch (SessionException ex)
            {
                if (ex.Code == "W100002")
                {
                    response.NeedNewPassword = true;
                    response.MensajeError    = "Por políticas de seguridad debe cambiar la contraseña.";
                    response.IsOK            = false;
                    return(response);
                }
                else
                {
                    response.MensajeError = ex.Message;
                    response.IsOK         = false;
                }
            }
            catch (Exception ex)
            {
                response.MensajeError = ex.Message;
                response.IsOK         = false;
            }
            return(response);
        }
Пример #6
0
        public static TokenResult ValidateToken(string userName, string token, string iP, Guid guidToken, string browser, TipoAplicacion idAplicacion)
        {
            var         result      = OrdenesApplication.Instance.DoubleAuthenticationService.ValidateToken(guidToken, userName, token);
            TokenResult tokenResult = new TokenResult();

            if (result)
            {
                UsuarioEntity usuario     = CachingManager.Instance.GetUsuarioByUsername(userName);
                InfoCliente   infoCliente = new InfoCliente(Utils.GetIpAddress(), browser);

                SessionHelper.InitSession(infoCliente, usuario, idAplicacion);
                tokenResult.Ok       = true;
                tokenResult.IdSesion = MAEUserSession.Instancia.ID;
                return(tokenResult);
            }
            else
            {
                tokenResult.Ok = false;
            }
            return(tokenResult);
        }
Пример #7
0
        public static void InitSession(InfoCliente infoCliente, UsuarioEntity usuario, TipoAplicacion idAplicacion = TipoAplicacion.ORDENES)
        {
            MAEUserSession userSession            = new MAEUserSession();
            var            configuracionSeguridad = CachingManager.Instance.GetConfiguracionSeguridad();

            userSession.IdPersona             = (int)usuario.IdPersona;
            userSession.IdUsuario             = usuario.IdUsuario;
            userSession.Ip                    = infoCliente.Ip;
            userSession.Dispositivo           = infoCliente.Dispositivo;
            userSession.FechaInicio           = DateTime.Now;
            userSession.FechaFinalizacion     = MAEDateTimeTools.DateTimeAdd(DateTime.Now, configuracionSeguridad.TimeOutInicialSesion, "s");
            userSession.IdAplicacion          = (byte)idAplicacion;
            userSession.UltimaActualizacion   = usuario.UltimaActualizacion;
            userSession.ConfiguracionRegional = usuario.ConfiguracionRegional;

            //AESEncryptor encryptor = new AESEncryptor();
            //userSession.Global = encryptor.GetUniqueKey();
            //SecurityHelper.GetRSAKey(ref userSession);
            var clientKeyPair = PublicKeyBox.GenerateKeyPair();
            var serverKeyPair = PublicKeyBox.GenerateKeyPair();

            userSession.PrivateKey = Convert.ToBase64String(clientKeyPair.PrivateKey);
            userSession.PublicKey  = Convert.ToBase64String(clientKeyPair.PublicKey);

            userSession.ClientPublic              = Convert.ToBase64String(clientKeyPair.PublicKey);
            userSession.ClientSecret              = Convert.ToBase64String(clientKeyPair.PrivateKey);
            userSession.ServerPublic              = Convert.ToBase64String(serverKeyPair.PublicKey);
            userSession.ServerSecret              = Convert.ToBase64String(serverKeyPair.PrivateKey);
            userSession.Nonce                     = Convert.ToBase64String(PublicKeyBox.GenerateNonce());
            userSession.AllowedCommands           = new Dictionary <string, Type>();
            userSession.JavascriptAllowedCommands = new Dictionary <string, string>();
            userSession.PermisosUsuario           = new Dictionary <string, bool>();
            List <Permiso>           PermisosUsuario = CachingManager.Instance.GetAllPermisosByIdUsuario(userSession.IdUsuario);
            Dictionary <string, int> mapeoAcciones   = new Dictionary <string, int>();
            var Acciones = CachingManager.Instance.GetAllAcciones();

            OrdenesApplication.Instance.GetComandosHabilitados(idAplicacion)
            .ForEach(cmd =>
            {
                var k = OrdenesApplication.Instance.Encryptor.DynamicEncryption(cmd.FullName);
                userSession.AllowedCommands.Add(k, cmd.CommandType);
                userSession.JavascriptAllowedCommands.Add(cmd.Key, k);
                mapeoAcciones.Add(k, cmd.IdAccion);
            });
            foreach (KeyValuePair <string, int> kv in mapeoAcciones)
            {
                Permiso p = PermisosUsuario.Find(x => x.IdAccion == kv.Value);
                if (p != null)
                {
                    var  permisoAccion = Acciones.Find(x => x.IdAccion == kv.Value).HabilitarPermisos;
                    bool habilitado    = (p.Permisos & permisoAccion) != 0;
                    userSession.PermisosUsuario.Add(kv.Key, habilitado);
                }
            }
            CreateSesiones(userSession, (byte)idAplicacion);
            InsertarLogSeguridad((byte)LogCodigoAccionSeguridad.InicioSesion, "Inicio de sesión exitoso", (byte)idAplicacion);
        }
        public static void Login(InfoCliente infoCliente, UsuarioEntity datosLogin, bool isPassHash = false, TipoAplicacion idAplicacion = TipoAplicacion.ORDENES)
        {
            UsuarioEntity usuario = ValidateUser(datosLogin.Username);
            var           configuracionSeguridad = CachingManager.Instance.GetConfiguracionSeguridad();

            ValidarAccesoAlSistema(usuario.IdUsuario);
            string userPass = isPassHash ? datosLogin.Pass : MAETools.HashMD5(datosLogin.Pass);

            if (usuario.Pass != userPass)
            {
                ManejarErrorDeAutenticacion(usuario, configuracionSeguridad, idAplicacion);
            }
            ValidarReseteoPassword(usuario);
            ValidarDiasCambioPassword(configuracionSeguridad.DiasCambioPassword, usuario);
            UserHelper.ValidaUsuarioActivo(configuracionSeguridad.MaximoDiasInactividad, usuario);

            if (usuario.Expiracion.HasValue && usuario.Expiracion.Value.Date <= DateTime.Now)
            {
                UserHelper.BlockUsuarios(usuario.IdUsuario, (byte)LogCodigoAccionSeguridad.UsuarioBloqueadoPorCtaExpirada);
                AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_CUENTA_EXPIRADA, false, usuario.Username);
            }

            if (usuario.Proceso)
            {
                SessionHelper.InitSession(infoCliente, usuario, idAplicacion);
            }
        }