public static void AddRequestToSession(byte[] req, ElmahMailSAZConfig config, HttpSessionStateBase session) { var reqs = ((List<byte[]>)session[sessionKey]); reqs.Add(req); if (config.KeepLastNRequests.HasValue && reqs.Count > config.KeepLastNRequests) reqs.RemoveAt(0); }
public void Init(HttpApplication context) { var mailModule = context.Modules.AsEnumerable().OfType<ErrorMailModule>().FirstOrDefault(); if (mailModule == null) throw new Exception(string.Format("{0} requires {1} to be installed before it", GetType().Name, typeof(ErrorMailModule).Name)); config = (ElmahMailSAZConfig) ConfigurationManager.GetSection("elmah/errorMailSAZ") ?? new ElmahMailSAZConfig(); mailModule.Mailing += MailModuleMailing; mailModule.Mailed += MailModuleMailed; }
public static string SerializeRequestToSAZ(HttpSessionStateBase session, ElmahMailSAZConfig config) { var filename = Path.GetTempFileName(); var sessions = ((IEnumerable<byte[]>)HttpContext.Current.Session[sessionKey]).Select(b => new Session(b, null)).ToArray(); var ok = SAZ.WriteSessionArchive(filename, sessions, config.Password); if (!ok) { File.Delete(filename); return null; } return filename; }
public static Attachment MailModuleMailing(HttpContextBase context, ElmahMailSAZConfig config) { var saz = SerializeRequestToSAZ(context.Session, config); if (saz == null) return null; var saz2 = saz + ".saz"; File.Move(saz, saz2); var attachment = new Attachment(saz2); context.Items[sazFilenameKey] = saz2; context.Items[attachmentKey] = attachment; return attachment; }
public static byte[] SerializeRequest(ElmahMailSAZConfig config, HttpContextBase context) { if (config == null) throw new ArgumentNullException("config"); if (context == null) throw new ArgumentNullException("context"); var request = context.Request; if (config.ExcludedUrls.Any(rx => rx.IsMatch(request.RawUrl))) return null; if (!(context.CurrentHandler is IRequiresSessionState)) return null; return request.SerializeRequestToBytes(config.RenameHost); }
public static string SerializeRequestToSAZ(ElmahMailSAZConfig config, HttpRequestBase request) { if (config == null) throw new ArgumentNullException("config"); if (request == null) throw new ArgumentNullException("request"); var filename = Path.GetTempFileName(); var session = new Session(request.SerializeRequestToBytes(config.RenameHost), null); var ok = SAZ.WriteSessionArchive(filename, new[] {session}, config.Password); if (!ok) { File.Delete(filename); return null; } return filename; }
public static Attachment MailModuleMailing(ElmahMailSAZConfig config, HttpContextBase context) { if (config == null) throw new ArgumentNullException("config"); if (context == null) throw new ArgumentNullException("context"); if (config.ExcludedUrls.Any(rx => rx.IsMatch(context.Request.RawUrl))) return null; var saz = SerializeRequestToSAZ(config, context.Request); if (saz == null) return null; var saz2 = saz + ".saz"; File.Move(saz, saz2); var attachment = new Attachment(saz2); context.Items[sazFilenameKey] = saz2; context.Items[attachmentKey] = attachment; return attachment; }
public object Create(object parent, object configContext, XmlNode section) { var moduleConfig = new ElmahMailSAZConfig(); var excludes = GetChild(section, "exclude"); if (excludes != null) { foreach (XmlNode n in excludes.ChildNodes) moduleConfig.ExcludedUrls.Add(new Regex(n.InnerText, RegexOptions.Compiled | RegexOptions.IgnoreCase)); } var password = GetChild(section, "password"); if (password != null) moduleConfig.Password = password.InnerText; var keepLastNRequests = GetChild(section, "keepLastNRequests"); if (keepLastNRequests != null) moduleConfig.KeepLastNRequests = int.Parse(keepLastNRequests.InnerText); var renameHost = GetChild(section, "renameHost"); if (renameHost != null) moduleConfig.RenameHost = renameHost.InnerText; return moduleConfig; }
public void Init(HttpApplication context) { var mailModule = context.Modules.AsEnumerable().OfType<ErrorMailModule>().FirstOrDefault(); if (mailModule == null) throw new Exception(string.Format("{0} requires {1} to be installed before it", GetType().Name, typeof(ErrorMailModule).Name)); var sessionStateModule = GetSessionStateModule(context); if (sessionStateModule == null) throw new Exception(string.Format("{0} requires ASP.NET session", GetType().Name)); sessionStateModule.Start += SessionStart; context.PreRequestHandlerExecute += PreRequestHandlerExecute; config = (ElmahMailSAZConfig) ConfigurationManager.GetSection("elmah/errorMailSAZ") ?? new ElmahMailSAZConfig(); mailModule.Mailing += MailModuleMailing; mailModule.Mailed += MailModuleMailed; }