Optional SAZ module configuration
 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);
 }
示例#2
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);
 }
示例#6
0
 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;
 }
示例#7
0
 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;
 }