private static void AddCorsMessageHandler(this HttpConfiguration httpConfiguration)
        {
            object corsEnabled;

            if (!httpConfiguration.Properties.TryGetValue(CorsEnabledKey, out corsEnabled))
            {
                Action <HttpConfiguration> defaultInitializer = httpConfiguration.Initializer;
                httpConfiguration.Initializer = config =>
                {
                    if (!config.Properties.TryGetValue(CorsEnabledKey, out corsEnabled))
                    {
                        // Execute this in the Initializer to ensure that the CorsMessageHandler is added last.
                        config.MessageHandlers.Add(new CorsMessageHandler(config));

                        ITraceWriter traceWriter = config.Services.GetTraceWriter();

                        if (traceWriter != null)
                        {
                            ICorsPolicyProviderFactory factory = config.GetCorsPolicyProviderFactory();
                            config.SetCorsPolicyProviderFactory(new CorsPolicyProviderFactoryTracer(factory, traceWriter));
                            ICorsEngine corsEngine = config.GetCorsEngine();
                            config.SetCorsEngine(new CorsEngineTracer(corsEngine, traceWriter));
                        }

                        config.Properties[CorsEnabledKey] = true;
                    }
                    defaultInitializer(config);
                };
            }
        }
        public CorsPolicyProviderFactoryTracer(ICorsPolicyProviderFactory innerPolicyProviderFactory, ITraceWriter traceWriter)
        {
            Contract.Assert(innerPolicyProviderFactory != null);
            Contract.Assert(traceWriter != null);

            _innerPolicyProviderFactory = innerPolicyProviderFactory;
            _traceWriter = traceWriter;
        }
        public void GetCorsPolicyProviderFactory_ReturnsDefaultCorsPolicyProviderFactory()
        {
            HttpConfiguration          config          = new HttpConfiguration();
            ICorsPolicyProviderFactory providerFactory = config.GetCorsPolicyProviderFactory();

            Assert.NotNull(providerFactory);
            Assert.IsType(typeof(AttributeBasedPolicyProviderFactory), providerFactory);
        }
        public CorsPolicyProviderFactoryTracer(ICorsPolicyProviderFactory innerPolicyProviderFactory, ITraceWriter traceWriter)
        {
            Contract.Assert(innerPolicyProviderFactory != null);
            Contract.Assert(traceWriter != null);

            _innerPolicyProviderFactory = innerPolicyProviderFactory;
            _traceWriter = traceWriter;
        }
        public void GetCorsPolicyProviderFactory_ReturnsTheCustomCorsPolicyProviderFactory()
        {
            ICorsPolicyProviderFactory mockFactory = new Mock <ICorsPolicyProviderFactory>().Object;
            HttpConfiguration          config      = new HttpConfiguration();

            config.SetCorsPolicyProviderFactory(mockFactory);
            ICorsPolicyProviderFactory providerFactory = config.GetCorsPolicyProviderFactory();

            Assert.Same(mockFactory, providerFactory);
        }
Example #6
0
        private async Task <CorsPolicy> GetCorsPolicyAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            CorsPolicy corsPolicy = null;
            ICorsPolicyProviderFactory corsPolicyProviderFactory = _httpConfiguration.GetCorsPolicyProviderFactory();
            ICorsPolicyProvider        corsPolicyProvider        = corsPolicyProviderFactory.GetCorsPolicyProvider(request);

            if (corsPolicyProvider != null)
            {
                corsPolicy = await corsPolicyProvider.GetCorsPolicyAsync(request, cancellationToken);
            }
            return(corsPolicy);
        }
        public void EnableCors_AddsCorsPolicyProvider()
        {
            HttpConfiguration config = new HttpConfiguration();

            config.MessageHandlers.Clear();
            EnableCorsAttribute policyProvider = new EnableCorsAttribute();

            config.EnableCors(policyProvider);
            config.Initializer(config);

            ICorsPolicyProviderFactory          providerFactory          = config.GetCorsPolicyProviderFactory();
            AttributeBasedPolicyProviderFactory attributeProviderFactory = Assert.IsType <AttributeBasedPolicyProviderFactory>(providerFactory);

            Assert.Same(policyProvider, attributeProviderFactory.DefaultPolicyProvider);
        }
        /// <summary>
        /// Sets the <see cref="ICorsPolicyProviderFactory"/> on the <see cref="HttpConfiguration"/>.
        /// </summary>
        /// <param name="httpConfiguration">The <see cref="HttpConfiguration"/>.</param>
        /// <param name="corsPolicyProviderFactory">The <see cref="ICorsPolicyProviderFactory"/>.</param>
        /// <exception cref="System.ArgumentNullException">
        /// httpConfiguration
        /// or
        /// corsPolicyProviderFactory
        /// </exception>
        public static void SetCorsPolicyProviderFactory(
            this HttpConfiguration httpConfiguration,
            ICorsPolicyProviderFactory corsPolicyProviderFactory
            )
        {
            if (httpConfiguration == null)
            {
                throw new ArgumentNullException("httpConfiguration");
            }
            if (corsPolicyProviderFactory == null)
            {
                throw new ArgumentNullException("corsPolicyProviderFactory");
            }

            httpConfiguration.Properties[CorsPolicyProviderFactoryKey] = corsPolicyProviderFactory;
        }
        public void EnableCors_AddsTracers_WhenTracingIsEnabled()
        {
            HttpConfiguration config    = new HttpConfiguration();
            ITraceWriter      traceMock = new Mock <ITraceWriter>().Object;

            config.Services.Replace(typeof(ITraceWriter), traceMock);
            config.MessageHandlers.Clear();
            EnableCorsAttribute policyProvider = new EnableCorsAttribute();

            config.EnableCors(policyProvider);
            config.Initializer(config);

            ICorsPolicyProviderFactory providerFactory = config.GetCorsPolicyProviderFactory();

            Assert.IsType(typeof(CorsPolicyProviderFactoryTracer), providerFactory);
        }
        /// <summary>
        /// Sets the <see cref="ICorsPolicyProviderFactory"/> on the <see cref="HttpConfiguration"/>.
        /// </summary>
        /// <param name="httpConfiguration">The <see cref="HttpConfiguration"/>.</param>
        /// <param name="corsPolicyProviderFactory">The <see cref="ICorsPolicyProviderFactory"/>.</param>
        /// <exception cref="System.ArgumentNullException">
        /// httpConfiguration
        /// or
        /// corsPolicyProviderFactory
        /// </exception>
        public static void SetCorsPolicyProviderFactory(this HttpConfiguration httpConfiguration, ICorsPolicyProviderFactory corsPolicyProviderFactory)
        {
            if (httpConfiguration == null)
            {
                throw new ArgumentNullException("httpConfiguration");
            }
            if (corsPolicyProviderFactory == null)
            {
                throw new ArgumentNullException("corsPolicyProviderFactory");
            }

            httpConfiguration.Properties[CorsPolicyProviderFactoryKey] = corsPolicyProviderFactory;
        }