protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            //Comprobando si puedo setear la sesión con la cookie. El If de adentro es 'por las dudas'
            if ((Session["Nombre"].Equals(String.Empty) || Session["IdUsuario"].Equals(String.Empty)) &&
                Request.Cookies["Usuario"] != null)
            {
                if (Request.Cookies["Usuario"]["IdUsuario"] != null &&
                    Request.Cookies["Usuario"]["Nombre"] != null)
                {
                    Session["IdUsuario"] = CryptHandler.Decrypt(Request.Cookies["Usuario"]["IdUsuario"].ToString());
                    Session["Nombre"]    = CryptHandler.Decrypt(Request.Cookies["Usuario"]["Nombre"].ToString());
                }
            }

            /*Si se entra en algún ActionResult del Home, no hago nada. Los métodos de ese
             * controller tienen diferentes validaciones. Si no se cumple, entonces si generalizo
             * con lo de abajo.*/
            string controllerName = this.ControllerContext.RouteData.Values["controller"].ToString();

            if (controllerName.Equals("Home"))
            {
                return;
            }

            //Si no tenes permiso te mando al login con la url como parametro
            if (Session["Nombre"].Equals(String.Empty))
            {
                string    urlIntentada = Request.Url.ToString();
                UrlHelper u            = new UrlHelper(this.ControllerContext.RequestContext);
                string    urlNueva     = u.Action("Login",
                                                  "Home",
                                                  new { ReturnUrl = urlIntentada });
                filterContext.Result = Redirect(urlNueva);
            }
        }
예제 #2
0
        public ActionResult Login(Login login)
        {
            try
            {
                Usuario usuario = new Usuario();

                if (!ModelState.IsValid)
                {
                    return(View("Login", login));
                }
                else
                {
                    usuario = _usuarioService.Login(login);

                    if (usuario != null)
                    {
                        //No permitiendo logearse a un user inactivo
                        if (usuario.Activo == 0)
                        {
                            ViewBag.msg = "Necesitas activar tu cuenta primero.";

                            return(View("Login"));
                        }

                        //Seteando la sesión
                        Session["IdUsuario"] = usuario.IdUsuario;
                        Session["Nombre"]    = usuario.Nombre;

                        if (login.Recordarme)
                        {
                            Response.Cookies["Usuario"]["IdUsuario"] = CryptHandler.Crypt(usuario.IdUsuario.ToString());
                            Response.Cookies["Usuario"]["Nombre"]    = CryptHandler.Crypt(usuario.Nombre);
                            Response.Cookies["Usuario"].Expires      = DateTime.Now.AddDays(90);
                        }

                        /*Si se intento entrar a una URL que
                         * requiere logearse, te devuelvo a esa. Si no,
                         * al Index*/
                        string destino = HttpUtility.ParseQueryString(Request.UrlReferrer.Query)["ReturnUrl"];
                        if (destino != null)
                        {
                            return(Redirect(destino));
                        }

                        return(RedirectToAction("Index"));
                    }
                    else
                    {
                        ViewData["MensajeOK"] = "Usuario o contraseña incorrecto.";

                        return(View("Login", login));
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }
예제 #3
0
        public PacketCrypt(byte[] sessionkey, uint build)
        {
            sessionkey.CopyTo(SessionKey, 0);

            EncodeHandler = EncodeImpl;
            DecodeHandler = DecodeImpl;

            if (build >= 8606 && build < 9614)
            {
                ApplyHMACKey();
            }
            else if (build >= 9614)
            {
                InitCryptors();
            }
        }
예제 #4
0
        /// <summary>
        /// ARC4 encryption 3.1.0+
        /// </summary>
        /// <param name="sessionkey"></param>
        private void InitCryptors()
        {
            var(EncoderKey, DecoderKey) = LoadKeys();

            ARC4Encrypt = new ARC4();
            ARC4Decrypt = new ARC4();

            ARC4Encrypt.SetKey(HMAC.ComputeHash(EncoderKey, SessionKey));
            ARC4Decrypt.SetKey(HMAC.ComputeHash(DecoderKey, SessionKey));

            // drop 1024 bytes
            ARC4Encrypt.Process(new byte[0x400], 0x400);
            ARC4Decrypt.Process(new byte[0x400], 0x400);

            EncodeHandler = ARC4Encrypt.Process;
            DecodeHandler = ARC4Decrypt.Process;
        }
예제 #5
0
        public PacketCrypt(byte[] sessionkey, uint build)
        {
            SessionKey = sessionkey;
            Array.Resize(ref SessionKey, 40);
            Key           = new byte[4];
            EncodeHandler = EncodeImpl;
            DecodeHandler = DecodeImpl;

            if (build >= 8606 && build < 9614)
            {
                ApplyHMACKey();
            }
            else if (build >= 9614)
            {
                InitCryptors();
            }
        }