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); } }
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; } }
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(); } }
/// <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; }
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(); } }