protected string Sanitise(IErrorditeConfiguration configuration, string key, string value)
        {
            foreach (var paramToSanitise in configuration.SanitisedParams)
            {
                if (paramToSanitise.Match == SanitiseMatchType.Exact && paramToSanitise.Name.ToLowerInvariant() == key.ToLowerInvariant())
                    return "***SECRET***";
                if (paramToSanitise.Match == SanitiseMatchType.Contains && key.Contains(paramToSanitise.Name))
                    return "***SECRET***";
            }

            return value;
        }
        public ErrorData Collect(Exception exception, IErrorditeConfiguration configuration)
        {
            if (exception == null)
                return new ErrorData();

            var data = new ErrorData();

            foreach (var key in exception.Data.Keys)
            {
                AddIfNotEmpty(string.Format("Exception.{0}", key), Sanitise(configuration, key.ToString(), exception.Data[key].ToString()), data);
            }

            return data;
        }
        public ErrorData Collect(Exception e, IErrorditeConfiguration configuration)
        {
            var context = HttpContext.Current;

            if (context == null)
                return null;

            var data = new ErrorData();

            AddIfNotEmpty("HttpMethod", context.Request.HttpMethod, data);

            if(context.Request.UrlReferrer != null)
                AddIfNotEmpty("Referrer", context.Request.UrlReferrer.AbsoluteUri, data);

            if (context.Request.Form.Count > 0)
            {
                foreach(var key in context.Request.Form.Keys)
                {
                    AddIfNotEmpty(string.Format("Form.{0}", key),
                        Sanitise(configuration, key.ToString(), context.Request.Form[key.ToString()]),
                        data);
                }
            }

            if (context.Request.Headers.Count > 0)
            {
                foreach (string key in context.Request.Headers.Keys)
                {
                    switch (key)
                    {
                        case "User-Agent":
                            continue;
                    }

                    AddIfNotEmpty(string.Format("Header.{0}", key),
                        Sanitise(configuration, key, context.Request.Headers[key]),
                        data);
                }
            }

            return data;
        }