Beispiel #1
0
 public ErrorMailHtmlPage(Error error, ErrorMailOptions options = null)
 {
     Error = error;
     if (error.Exception != null)
         ErrorLogEntry = LoggedException.RecallErrorLogEntry(error.Exception);
     Options = options ?? DefaultOptions;
 }
Beispiel #2
0
        public static ErrorMailOptions ParseOptions(IEnumerable<KeyValuePair<string, string>> entries)
        {
            const string sectionName = "fabmail:";
            var section =
                from e in entries
                where e.Key.StartsWith(sectionName, StringComparison.OrdinalIgnoreCase)
                   && !string.IsNullOrEmpty(e.Value)
                group e.Value by e.Key.Substring(sectionName.Length);

            var config = section.ToDictionary(e => e.Key, e => e.AsEnumerable(),
                                              StringComparer.OrdinalIgnoreCase);

            var options = new ErrorMailOptions
            {
                DontSkipEmptyKeys    = config.Find("dont-skip-empty-keys"   )?.LastOrDefault()?.IsTruthy() ?? false,
                ErrorDetailUrlFormat = config.Find("error-detail-url-format")?.LastOrDefault(),
            };

            var passThruFilter = DiagnosticsCollectionSelectors.PassThru;

            var filterSettings =
                from p in new[]
                {
                    new { Prefix = "server-variables-", Setter = ErrorMailOptionsSelectorSetter.ServerVariables },
                    new { Prefix = "form-"            , Setter = ErrorMailOptionsSelectorSetter.Form            },
                    new { Prefix = "query-string-"    , Setter = ErrorMailOptionsSelectorSetter.QueryString     },
                    new { Prefix = "cookies-"         , Setter = ErrorMailOptionsSelectorSetter.Cookies         },
                    new { Prefix = string.Empty       , Setter = ErrorMailOptionsSelectorSetter.ServerVariables
                                                               + ErrorMailOptionsSelectorSetter.Form
                                                               + ErrorMailOptionsSelectorSetter.QueryString
                                                               + ErrorMailOptionsSelectorSetter.Cookies        },
                }
                let filters =
                    from e in new[]
                    {
                        new { Key = "keys"       , Filter = (Func<Regex, DiagnosticsCollectionSelector>) DiagnosticsCollectionSelectors.RegexKeys       },
                        new { Key = "not-keys"   , Filter = (Func<Regex, DiagnosticsCollectionSelector>) DiagnosticsCollectionSelectors.NotRegexKeys    },
                        new { Key = "secret-keys", Filter = (Func<Regex, DiagnosticsCollectionSelector>) DiagnosticsCollectionSelectors.RegexSecretKeys },
                    }
                    let pattern = config.Find(p.Prefix + e.Key)?.LastOrDefault()
                    where !string.IsNullOrEmpty(pattern)
                    select e.Filter(new Regex(pattern))
                select new
                {
                    p.Setter,
                    Filter = filters.Aggregate(passThruFilter, (a, s) => a.Then(s)),

                } into e
                where e.Filter != passThruFilter
                select e;

            foreach (var e in filterSettings)
                e.Setter(options, e.Filter);

            foreach (var key in config.Find("time-zone-id") ?? Enumerable.Empty<string>())
                options.TimeZoneIds.Add(key);

            return options;
        }