예제 #1
0
        protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
        {
            HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];

            if (authCookie != null)
            {
                JavaScriptSerializer      serializer = new JavaScriptSerializer();
                FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
                var data = Peach.DecriptText(authTicket.UserData);
                CustomPrincipalTicket _dataTicket          = serializer.Deserialize <CustomPrincipalTicket>(data);
                CustomPrincipal       CustomPrincipalLogin = new CustomPrincipal(authTicket.Name);

                CustomPrincipalLogin.CID     = _dataTicket.CID;
                CustomPrincipalLogin.Usuario = _dataTicket.Usuario;

                CustomPrincipalLogin.Unidad_CID    = _dataTicket.Unidad_CID;
                CustomPrincipalLogin.Unidad_Nombre = _dataTicket.Unidad_Nombre;

                CustomPrincipalLogin.OrganoServicio_CID    = _dataTicket.OrganoServicio_CID;
                CustomPrincipalLogin.OrganoServicio_Nombre = _dataTicket.OrganoServicio_Nombre;
                CustomPrincipalLogin.OrganoServicio_Abr    = _dataTicket.OrganoServicio_Abr;

                if (_dataTicket.Perfil_CID != null)
                {
                    CustomPrincipalLogin.Perfil_CID    = _dataTicket.Perfil_CID;
                    CustomPrincipalLogin.Perfil_Nombre = _dataTicket.Perfil_Nombre;
                }

                HttpContext.Current.User = CustomPrincipalLogin;
            }
        }
        public ActionResult Perfil(PerfilLoginModel model)
        {
            if (ModelState.IsValid)
            {
                // Ticket de cookie
                CustomPrincipalTicket _dataTicket = new CustomPrincipalTicket
                {
                    CID                   = User.CID,
                    Usuario               = User.Usuario,
                    Unidad_Nombre         = User.Unidad_Nombre,
                    OrganoServicio_CID    = User.OrganoServicio_CID,
                    OrganoServicio_Nombre = User.OrganoServicio_Nombre,
                    OrganoServicio_Abr    = User.OrganoServicio_Abr,
                    Rol_Accion            = User.Rol_Accion,
                    Perfil_CID            = model.Perfil.CID,
                    Perfil_Nombre         = model.SelectPerfil
                };

                SessionHelper.DestroyUserSession();

                JavaScriptSerializer serializer = new JavaScriptSerializer();
                string userData = serializer.Serialize(_dataTicket);
                SessionHelper.AddUserToSession(Peach.EncriptText(userData));
            }
            else
            {
                AddToastMessage("Error", "El modelo de datos de seleccion de perfil no es válido", BootstrapAlertType.danger);
            }

            return(RedirectToAction("Index", "Home"));
        }
        public ActionResult Login(BELogin model)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            BLUsuario            oblUsuario = new BLUsuario();

            try
            {
                if (ModelState.IsValid)
                {
                    var _usr = model.user.Trim().ToUpper();
                    var _pwd = Peach.EncriptText(Crypto.CryptoProvider.TripleDES, model.pass.Trim());

                    var responser = oblUsuario.getUsuario_byLogin(_usr, _pwd);

                    if (responser.Estado == ResponserEstado.Ok)
                    {
                        BEUsuario UserData = (BEUsuario)responser.DataContent;
                        if (UserData.IsDominio == 1)
                        {
                            var DominioResult = BLUsuario.ValidaDominio(new BELogin {
                                user = _usr, pass = model.pass.Trim()
                            });
                            if (!DominioResult)
                            {
                                AddToastMessage(string.Empty, "Su contraseña no es correcta. Utilice su contraseña de dominio.", BootstrapAlertType.danger);
                                return(View());
                            }
                        }

                        // :Ticket de cookie
                        CustomPrincipalTicket _dataTicket = new CustomPrincipalTicket
                        {
                            CID                   = UserData.CID,
                            Usuario               = UserData.Apellidos,
                            Unidad_Nombre         = UserData.Unidad.Nombre,
                            OrganoServicio_CID    = UserData.OrganoServicio.CID,
                            OrganoServicio_Nombre = UserData.OrganoServicio.Nombre,
                            OrganoServicio_Abr    = UserData.OrganoServicio.Abreviatura,
                            Rol_Accion            = (UsuarioRolType)UserData.Rol.IntValue
                        };

                        // :Perfiles
                        int num_perfiles = (UserData.Perfiles != null) ? UserData.Perfiles.ToList().Count() : 1;
                        if (num_perfiles == 1)
                        {
                            // :Tiene un perfil => adiciona al ticket
                            _dataTicket.Perfil_CID    = UserData.Perfil.CID;
                            _dataTicket.Perfil_Nombre = UserData.Perfil.Nombre;
                        }

                        // :Serializa, encripta, genera la cookie y establece la sesión
                        string userData = serializer.Serialize(_dataTicket);
                        SessionHelper.AddUserToSession(Peach.EncriptText(userData));

                        if (num_perfiles == 1)
                        {
                            // :Home
                            return(RedirectToAction("Index", "Home"));
                        }
                        else
                        {
                            // Redirecciona a la página para la selección de perfil
                            TempData["jJ0PG6Fk"] = UserData.Perfiles;
                            return(RedirectToAction("Perfil", "Account"));
                        }
                    }
                    else
                    {
                        AddToastMessage(string.Empty, responser.Mensaje, responser.TipoAlerta);
                        return(View());
                    }
                }
                else
                {
                    AddToastMessage("Acceso no permitido", "Sus credenciales de acceso no son válidas", BootstrapAlertType.danger);
                    return(View());
                }
            }
            catch (Exception ex)
            {
                AddToastMessage("Error", ex.Message, BootstrapAlertType.danger);
            }

            return(View());
        }