public ProcessInboundRulesResult GetUrlResults(string url, Database database, NameValueCollection serverVariables = null) { var rewriter = new InboundRewriter(); var rulesEngine = new RulesEngine(database); var inboundRules = rulesEngine.GetInboundRules(); var requestUri = new Uri(url); var siteContext = SiteContextFactory.GetSiteContext(requestUri.Host, requestUri.AbsolutePath, requestUri.Port); rewriter.RequestServerVariables = serverVariables ?? new NameValueCollection(); if (!rewriter.RequestServerVariables.AllKeys.Contains("HTTP_HOST")) { rewriter.RequestServerVariables.Add("HTTP_HOST", requestUri.Host); } if (!rewriter.RequestServerVariables.AllKeys.Contains("HTTPS")) { rewriter.RequestServerVariables.Add("HTTPS", requestUri.Scheme.Equals(Uri.UriSchemeHttps) ? "on" : "off"); } if (!rewriter.RequestServerVariables.AllKeys.Contains("QUERY_STRING") && requestUri.Query.Length > 0) { rewriter.RequestServerVariables.Add("QUERY_STRING", requestUri.Query.Remove(0, 1)); } var results = rewriter.ProcessRequestUrl(requestUri, inboundRules, siteContext, database); return(results); }
public ProcessInboundRulesResult GetUrlResults(string url, Database database, NameValueCollection serverVariables = null) { var rewriter = new InboundRewriter(); var rulesEngine = new RulesEngine(database); var inboundRules = rulesEngine.GetInboundRules(); var requestUri = new Uri(url); var siteContext = SiteContextFactory.GetSiteContext(requestUri.Host, requestUri.AbsolutePath, requestUri.Port); rewriter.RequestServerVariables = serverVariables ?? new NameValueCollection(); if (!rewriter.RequestServerVariables.AllKeys.Contains("HTTP_HOST")) { rewriter.RequestServerVariables.Add("HTTP_HOST", requestUri.Host); } if (!rewriter.RequestServerVariables.AllKeys.Contains("HTTPS")) { rewriter.RequestServerVariables.Add("HTTPS", requestUri.Scheme.Equals(Uri.UriSchemeHttps) ? "on" : "off"); } if (!rewriter.RequestServerVariables.AllKeys.Contains("QUERY_STRING") && requestUri.Query.Length > 0) { rewriter.RequestServerVariables.Add("QUERY_STRING", requestUri.Query.Remove(0, 1)); } var results = rewriter.ProcessRequestUrl(requestUri, inboundRules, siteContext, database); return results; }
internal ProcessInboundRulesResult ProcessUri(Uri requestUri, Database db, InboundRewriter urlRewriter) { var inboundRules = GetInboundRules(db); if (inboundRules == null) { return(null); } return(urlRewriter.ProcessRequestUrl(requestUri, inboundRules)); }
internal ProcessInboundRulesResult ProcessUri(Uri requestUri, Database db, InboundRewriter urlRewriter) { var inboundRules = GetInboundRules(db); if (inboundRules == null) { return null; } return urlRewriter.ProcessRequestUrl(requestUri, inboundRules); }
public void ProcessRequestUrlWithHttpHostReplacement() { var serverVariables = new NameValueCollection { {"HTTP_HOST", "fictitioussite.com"} }; var rewriter = new InboundRewriter(serverVariables, null); var rewriteResult = rewriter.ProcessRequestUrl(new Uri("http://fictitioussite.com/hostreplacement"), InboundRules); var expectedUri = new Uri("http://fictitioussite.com/hostreplaced"); Assert.AreEqual(expectedUri, rewriteResult.RewrittenUri); }
public void ProcessRequestUrlWithCaptureGroups() { var serverVariables = new NameValueCollection { {"HTTP_HOST", "fictitioussite.com"} }; var rewriter = new InboundRewriter(serverVariables, null); var rewriteResult = rewriter.ProcessRequestUrl(new Uri("http://fictitioussite.com/article/1/2"), InboundRules); var expectedUri = new Uri("http://fictitioussite.com/article.aspx?id=1&title=2"); Assert.AreEqual(expectedUri, rewriteResult.RewrittenUri); }
public void ProcessRequestUrlTest() { var serverVariables = new NameValueCollection { {"HTTP_HOST", "fictitioussite.com"} }; var rewriter = new InboundRewriter(serverVariables, null); var rewriteResult = rewriter.ProcessRequestUrl(new Uri("http://fictitioussite.com/john"), InboundRules); var firstInboundRule = InboundRules.First(); var actionToCompare = firstInboundRule.Action as Redirect; var actionRewriteUrl = actionToCompare.RewriteUrl; var actionRewriteUri = new Uri(actionRewriteUrl); Assert.AreEqual(actionRewriteUri, rewriteResult.RewrittenUri); }
public void ProcessRequestUrlWithCustomResponse() { var rewriter = new InboundRewriter(); var newInboundRule = new InboundRule() { Name = "Custom Response Rule", Pattern = "customresponse", Using = Using.ExactMatch, Action = new CustomResponse() { Name = "Custom Response Action", StatusCode = 550, SubStatusCode = 100, ErrorDescription = "Custom Response Because I Said So", Reason = "Custom Response 550" }, MatchType = MatchType.MatchesThePattern }; InboundRules.Insert(0, newInboundRule); var rewriteResult = rewriter.ProcessRequestUrl(new Uri("http://fictitioussite.com/customresponse"), InboundRules); var customResponse = rewriteResult.FinalAction as CustomResponse; Assert.IsNotNull(customResponse); Assert.AreEqual(customResponse.StatusCode, 550); Assert.AreEqual(customResponse.SubStatusCode, 100); Assert.IsTrue(rewriteResult.ProcessedResults.Count == 1); }
public void ProcessRequestUrlWithAbort() { var rewriter = new InboundRewriter(); var newInboundRule = new InboundRule() { Name = "Abort Rule", Pattern = "^abort$", Using = Using.RegularExpressions, Action = new AbortRequest() { Name = "Abort Action" }, MatchType = MatchType.MatchesThePattern }; InboundRules.Insert(1, newInboundRule); var rewriteResult = rewriter.ProcessRequestUrl(new Uri("http://fictitioussite.com/abort"), InboundRules); Assert.IsInstanceOfType(rewriteResult.FinalAction, typeof(AbortRequest)); Assert.IsTrue(rewriteResult.ProcessedResults.Count == 2); }
public void ProcessRequestUrlWithHttpsToHttp() { var serverVariables = new NameValueCollection { {"HTTP_HOST", "www.secured.com"}, {"HTTPS", "on"} }; var rewriter = new InboundRewriter(serverVariables, null); InboundRules = new List<InboundRule>() { new InboundRule() { Name = "Redirect HTTPS to HTTP", Action = new Redirect() { Name = "Redirect", AppendQueryString = true, StatusCode = RedirectStatusCode.Permanent, HttpCacheability = HttpCacheability.NoCache, StopProcessingOfSubsequentRules = true, RewriteUrl = "http://{HTTP_HOST}/{R:1}" }, Conditions = new List<Condition>() { new Condition() { Name = "HTTPS", CheckIfInputString = CheckIfInputString.DoesNotMatchThePattern, IgnoreCase = true, InputString = "{HTTPS}", Pattern = "off" } }, Enabled = true, IgnoreCase = true, Pattern = "(.*)", ConditionLogicalGrouping = LogicalGrouping.MatchAll, Using = Using.RegularExpressions, MatchType = MatchType.MatchesThePattern } }; var inputUrl = "www.secured.com/blah/asdfadsf.htm?test=test"; var inputUri = new Uri("https://" + inputUrl); var result = rewriter.ProcessRequestUrl(inputUri, InboundRules); var expectedUri = new Uri("http://" + inputUrl); var rewrittenUri = result.RewrittenUri; Assert.IsNotNull(rewrittenUri); Assert.AreEqual(rewrittenUri, expectedUri); }
public void ProcessRequestUrlWithMultipleConditionMatchBackReferences() { var serverVariables = new NameValueCollection { {"HTTP_HOST", "fictitioussite.com"}, {"QUERY_STRING", "var1=1&var2=2"} }; var rewriter = new InboundRewriter(serverVariables, null); InboundRules = new List<InboundRule>() { new InboundRule() { Name = "Multiple Variable Rules", Pattern = "^(.*)$", Using = Using.RegularExpressions, Action = new Redirect() { Name = "Redirect to C1 and C2", AppendQueryString = false, HttpCacheability = HttpCacheability.NoCache, StatusCode = RedirectStatusCode.Permanent, RewriteUrl = "http://{HTTP_HOST}/newpage/{C:1}/{C:2}" }, MatchType = MatchType.MatchesThePattern, ConditionLogicalGrouping = LogicalGrouping.MatchAll, Conditions = new List<Condition>() { new Condition() { Name = "C1", CheckIfInputString = CheckIfInputString.MatchesThePattern, InputString = Tokens.QUERY_STRING.Formatted(), Pattern = @"(?:^|&)var1=(\d+)(?:&|$)", IgnoreCase = true }, new Condition() { Name = "C2", CheckIfInputString = CheckIfInputString.MatchesThePattern, InputString = "%{C:1}%_{QUERY_STRING}", Pattern = @"%(.+)%_.*var2=(\d+)(?:&|$)", IgnoreCase = true } } } }; var rewriteResult = rewriter.ProcessRequestUrl(new Uri("http://fictitioussite.com/?var1=1&var2=2"), InboundRules); var expectedUrl = new Uri("http://fictitioussite.com/newpage/1/2"); Assert.AreEqual(expectedUrl, rewriteResult.RewrittenUri); }