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); }
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); }
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); }