Beispiel #1
0
        private bool DispatchRequest(IHttpContext ctx)
        {
            SetupRequestToProperDatabase(ctx);

            CurrentOperationContext.Headers.Value = ctx.Request.Headers;

            if (ctx.RequiresAuthentication &&
                requestAuthorizer.Authorize(ctx) == false)
            {
                return(false);
            }

            try
            {
                OnDispatchingRequest(ctx);

                if (DefaultConfiguration.HttpCompression)
                {
                    AddHttpCompressionIfClientCanAcceptIt(ctx);
                }

                // Cross-Origin Resource Sharing (CORS) is documented here: http://www.w3.org/TR/cors/
                AddAccessControlHeaders(ctx);
                if (ctx.Request.HttpMethod == "OPTIONS")
                {
                    return(false);
                }

                foreach (var requestResponderLazy in RequestResponders)
                {
                    var requestResponder = requestResponderLazy.Value;
                    if (requestResponder.WillRespond(ctx))
                    {
                        requestResponder.Respond(ctx);
                        return(requestResponder.IsUserInterfaceRequest);
                    }
                }
                ctx.SetStatusToBadRequest();
                if (ctx.Request.HttpMethod == "HEAD")
                {
                    return(false);
                }
                ctx.Write(
                    @"
<html>
	<body>
		<h1>Could not figure out what to do</h1>
		<p>Your request didn't match anything that Raven knows to do, sorry...</p>
	</body>
</html>
");
            }
            finally
            {
                CurrentOperationContext.Headers.Value = new NameValueCollection();
                currentDatabase.Value      = DefaultResourceStore;
                currentConfiguration.Value = DefaultConfiguration;
            }
            return(false);
        }
Beispiel #2
0
 private bool SetThreadLocalState(IHttpContext ctx)
 {
     CurrentOperationContext.Headers.Value = new NameValueCollection(ctx.Request.Headers);
     CurrentOperationContext.Headers.Value[Constants.RavenAuthenticatedUser] = "";
     CurrentOperationContext.User.Value = null;
     LogContext.DatabaseName.Value      = CurrentDatabase.Name;
     if (ctx.RequiresAuthentication &&
         requestAuthorizer.Authorize(ctx) == false)
     {
         return(false);
     }
     return(true);
 }
Beispiel #3
0
        private bool DispatchRequest(IHttpContext ctx)
        {
            SetupRequestToProperDatabase(ctx);

            CurrentOperationContext.Headers.Value = new NameValueCollection(ctx.Request.Headers);

            CurrentOperationContext.Headers.Value[Constants.RavenAuthenticatedUser] = "";
            CurrentOperationContext.User.Value = null;
            if (ctx.RequiresAuthentication &&
                requestAuthorizer.Authorize(ctx) == false)
            {
                return(false);
            }

            Action onResponseEnd = null;

            try
            {
                OnDispatchingRequest(ctx);

                if (DefaultConfiguration.HttpCompression)
                {
                    AddHttpCompressionIfClientCanAcceptIt(ctx);
                }

                HandleHttpCompressionFromClient(ctx);

                if (BeforeDispatchingRequest != null)
                {
                    onResponseEnd = BeforeDispatchingRequest(ctx);
                }

                // Cross-Origin Resource Sharing (CORS) is documented here: http://www.w3.org/TR/cors/
                AddAccessControlHeaders(ctx);
                if (ctx.Request.HttpMethod == "OPTIONS")
                {
                    return(false);
                }

                foreach (var requestResponderLazy in RequestResponders)
                {
                    var requestResponder = requestResponderLazy.Value;
                    if (requestResponder.WillRespond(ctx))
                    {
                        var sp = Stopwatch.StartNew();
                        requestResponder.Respond(ctx);
                        sp.Stop();
                        ctx.Response.AddHeader("Temp-Request-Time", sp.ElapsedMilliseconds.ToString("#,# ms", CultureInfo.InvariantCulture));
                        return(requestResponder.IsUserInterfaceRequest);
                    }
                }
                ctx.SetStatusToBadRequest();
                if (ctx.Request.HttpMethod == "HEAD")
                {
                    return(false);
                }
                ctx.Write(
                    @"
<html>
	<body>
		<h1>Could not figure out what to do</h1>
		<p>Your request didn't match anything that Raven knows to do, sorry...</p>
	</body>
</html>
");
            }
            finally
            {
                try
                {
                    CurrentOperationContext.Headers.Value = new NameValueCollection();
                    CurrentOperationContext.User.Value    = null;
                    currentDatabase.Value      = DefaultResourceStore;
                    currentConfiguration.Value = DefaultConfiguration;
                }
                catch
                {
                    // this can happen during system shutdown
                }
                if (onResponseEnd != null)
                {
                    onResponseEnd();
                }
            }
            return(false);
        }