예제 #1
0
        /// <summary>
        /// Create a new FiftyOneJsProvider
        /// </summary>
        public FiftyOneJsProvider()
        {
            var pipeline = WebPipeline.GetInstance().Pipeline;
            var headersAffectingJavaScript = new List <string>();
            // Get evidence filters for all elements that have
            // JavaScript properties.
            var filters = pipeline.FlowElements
                          .Where(e => e.Properties.Any(p =>
                                                       p.Type != null &&
                                                       p.Type == typeof(JavaScript)))
                          .Select(e => e.EvidenceKeyFilter);

            foreach (var filter in filters)
            {
                // If the filter is a white list or derived type then
                // get all HTTP header evidence keys from white list
                // and add them to the headers that could affect the
                // generated JavaScript.
                var whitelist = filter as EvidenceKeyFilterWhitelist;
                if (whitelist != null)
                {
                    var headerPrefix = Core.Constants.EVIDENCE_HTTPHEADER_PREFIX +
                                       Core.Constants.EVIDENCE_SEPERATOR;
                    headersAffectingJavaScript.AddRange(whitelist.Whitelist
                                                        .Where(entry => entry.Key.StartsWith(
                                                                   headerPrefix, StringComparison.OrdinalIgnoreCase))
                                                        .Select(entry => entry.Key.Substring(
                                                                    entry.Key.IndexOf(Core.Constants.EVIDENCE_SEPERATOR,
                                                                                      StringComparison.OrdinalIgnoreCase) + 1)));
                }
            }
            _headersAffectingJavaScript = new StringValues(headersAffectingJavaScript.ToArray());
        }
 /// <summary>
 /// Create a new FiftyOneJsProvider
 /// </summary>
 public FiftyOneJsProvider()
 {
     using (var loggerFactory = new LoggerFactory())
     {
         var logger = loggerFactory.CreateLogger <ClientsidePropertyService>();
         _clientsidePropertyService = new ClientsidePropertyService(
             WebPipeline.GetInstance().Pipeline, logger);
     }
 }
        /// <summary>
        /// Gets the <see cref="HttpBrowserCapabilities"/> object for the
        /// specified <see cref="HttpRequest"/>.
        /// </summary>
        /// <param name="request">
        /// The <see cref="HttpRequest"/> to get the browser capabilities for.
        /// </param>
        /// <returns>
        /// The browser capabilities for the specified
        /// <see cref="HttpRequest"/>.
        /// </returns>
        public override HttpBrowserCapabilities GetBrowserCapabilities(
            HttpRequest request)
        {
            HttpBrowserCapabilities caps;
            var baseCaps = base.GetBrowserCapabilities(request);

            var flowData = WebPipeline.Process(request);

            if (flowData != null)
            {
                // A provider is present so 51Degrees can be used to override
                // some of the returned values.
                caps = new PipelineCapabilities(
                    baseCaps,
                    request,
                    flowData);

                // Copy the adapters from the original.
                var adapters = baseCaps.Adapters.GetEnumerator();
                while (adapters.MoveNext())
                {
                    caps.Adapters.Add(adapters.Key, adapters.Value);
                }

                // Copy the browsers from the original to prevent the Browsers
                // property returning null.
                if (baseCaps.Browsers != null)
                {
                    foreach (string browser in baseCaps.Browsers)
                    {
                        caps.AddBrowser(browser);
                    }
                }
            }
            else
            {
                // No 51Degrees flow data is present so we have to use
                // the base capabilities only.
                caps = baseCaps;
            }
            return(caps);
        }
예제 #4
0
        /// <summary>
        /// Constructor
        /// </summary>
        public SetHeadersProvider()
        {
            var pipeline = WebPipeline.GetInstance().Pipeline;

            _setHeadersElement = pipeline.GetElement <ISetHeadersElement>();
        }