public void ProcessRequest(HttpContextBase context)
        {
            var url = context.Request.Url.AbsolutePath;

            if (string.IsNullOrEmpty(config.ResourcePhysicalPath))
            {
                config.ResourcePhysicalPath = hostingEnvironment.MapPath(config.ResourceVirtualPath);
            }

            RRTracer.Trace("Beginning to serve {0}", url);
            var sig = uriBuilder.ParseSignature(url);

            if (sig == Guid.Empty.RemoveDashes())
            {
                return;
            }
            var etag = context.Request.Headers["If-None-Match"];

            etag = etag == null ? string.Empty : etag.Replace("\"", "");
            if (sig == etag || store.SendContent(url, context.Response))
            {
                context.Response.Cache.SetETag(string.Format(@"""{0}""", sig));
                context.Response.Cache.SetCacheability(HttpCacheability.Public);
                context.Response.Expires = 60 * 24 * 360; //LITTLE under A YEAR
                if (sig == etag)
                {
                    context.Response.StatusCode = 304;
                }
                else if (url.EndsWith(".css", StringComparison.OrdinalIgnoreCase))
                {
                    context.Response.ContentType = "text/css";
                }
                else if (url.EndsWith(".js", StringComparison.OrdinalIgnoreCase))
                {
                    context.Response.ContentType = "application/x-javascript";
                }
                else if (url.EndsWith(".png", StringComparison.OrdinalIgnoreCase))
                {
                    context.Response.ContentType = "image/png";
                }
                if (context.ApplicationInstance != null)
                {
                    context.ApplicationInstance.CompleteRequest();
                }
            }
            RRTracer.Trace("Finished serving {0}", url);
        }
예제 #2
0
        public void ProcessRequest(HttpContextBase context)
        {
            var url = context.Request.Url.AbsolutePath;

            url = url.EndsWith("/") ? url : url + "/";
            if (string.IsNullOrEmpty(configuration.ResourcePhysicalPath))
            {
                configuration.ResourcePhysicalPath = hostingEnvironment.MapPath(configuration.ResourceVirtualPath);
            }
            var user = context.User == null ? string.Empty : context.User.Identity.Name;

            if ((configuration.AuthorizedUserList.AllowsAnonymous() || configuration.AuthorizedUserList.Contains(user)) &&
                ipFilter.IsAuthorizedIpAddress(context))
            {
                if (url.ToLowerInvariant().Contains("/flushfailures/"))
                {
                    queue.ClearFailures();
                    RRTracer.Trace("Failures Cleared");
                }
                else
                {
                    var key = uriBuilder.ParseKey(url.ToLower().Replace("/flush/rrflush.aspx/", "-flush"));
                    if (key == Guid.Empty)
                    {
                        key = uriBuilder.ParseKey(url.ToLower().Replace("/flush/", "-flush"));
                    }
                    store.Flush(key);
                    RRTracer.Trace("{0} Flushed {1}", user, key);
                }
                if (HttpContext.Current != null)
                {
                    context.Response.Redirect(string.Format("{0}/dashboard", configuration.ResourceAbsolutePath));
                }
            }
            else
            {
                context.Response.StatusCode = 401;
            }
        }