public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) { if (context.HttpContext.Connection.RemoteIpAddress == null) { return("off"); } return(context.HttpContext.Connection.RemoteIpAddress.AddressFamily == AddressFamily.InterNetworkV6 ? "on" : "off"); }
public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackRefernces, BackReferenceCollection conditionBackReferences) { var queryString = context.HttpContext.Request.QueryString.ToString(); if (!string.IsNullOrEmpty(queryString)) { return(queryString.Substring(1)); } return(queryString); }
public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) { var pattern = Url.Evaluate(context, ruleBackReferences, conditionBackReferences); var response = context.HttpContext.Response; var pathBase = context.HttpContext.Request.PathBase; if (EscapeBackReferences) { // because escapebackreferences will be encapsulated by the pattern, just escape the pattern pattern = Uri.EscapeDataString(pattern); } if (string.IsNullOrEmpty(pattern)) { response.Headers[HeaderNames.Location] = pathBase.HasValue ? pathBase.Value : "/"; return; } if (pattern.IndexOf("://", StringComparison.Ordinal) == -1 && pattern[0] != '/') { pattern = '/' + pattern; } response.StatusCode = StatusCode; // url can either contain the full url or the path and query // always add to location header. // TODO check for false positives var split = pattern.IndexOf('?'); if (split >= 0 && QueryStringAppend) { var query = context.HttpContext.Request.QueryString.Add( QueryString.FromUriComponent( pattern.Substring(split))); // not using the response.redirect here because status codes may be 301, 302, 307, 308 response.Headers[HeaderNames.Location] = pathBase + pattern.Substring(0, split) + query; } else { // If the request url has a query string and the target does not, append the query string // by default. if (QueryStringDelete) { response.Headers[HeaderNames.Location] = pathBase + pattern; } else { response.Headers[HeaderNames.Location] = pathBase + pattern + context.HttpContext.Request.QueryString; } } context.Result = RuleResult.EndResponse; }
public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) { // PERF as we share the string builder across the context, we need to make a new one here to evaluate // lowercase segments. var tempBuilder = context.Builder; context.Builder = new StringBuilder(64); var pattern = _pattern.Evaluate(context, ruleBackReferences, conditionBackReferences); context.Builder = tempBuilder; return(pattern.ToLowerInvariant()); }
public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) { var oldBuilder = context.Builder; // PERF // Because we need to be able to evaluate multiple nested patterns, // we provided a new string builder and evaluate the new pattern, // and restore it after evaluation. context.Builder = new StringBuilder(64); var pattern = _pattern.Evaluate(context, ruleBackReferences, conditionBackReferences); context.Builder = oldBuilder; return(UrlEncoder.Default.Encode(pattern)); }
public static MatchResults Evaluate(ConditionCollection conditions, RewriteContext context, BackReferenceCollection backReferences) { BackReferenceCollection prevBackReferences = null; MatchResults condResult = null; var orSucceeded = false; foreach (var condition in conditions) { if (orSucceeded && conditions.Grouping == LogicalGrouping.MatchAny) { continue; } if (orSucceeded) { orSucceeded = false; continue; } condResult = condition.Evaluate(context, backReferences, prevBackReferences); var currentBackReferences = condResult.BackReferences; if (conditions.Grouping == LogicalGrouping.MatchAny) { orSucceeded = condResult.Success; } else if (!condResult.Success) { return(condResult); } if (condResult.Success && conditions.TrackAllCaptures && prevBackReferences != null) { prevBackReferences.Add(currentBackReferences); currentBackReferences = prevBackReferences; } prevBackReferences = currentBackReferences; } return(new MatchResults { BackReferences = prevBackReferences, Success = condResult.Success }); }
public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) { var response = context.HttpContext.Response; response.StatusCode = StatusCode; if (!string.IsNullOrEmpty(StatusReason)) { context.HttpContext.Features.Get <IHttpResponseFeature>().ReasonPhrase = StatusReason; } if (!string.IsNullOrEmpty(StatusDescription)) { var content = Encoding.UTF8.GetBytes(StatusDescription); response.ContentLength = content.Length; response.ContentType = "text/plain; charset=utf-8"; response.Body.Write(content, 0, content.Length); } context.Result = RuleResult.EndResponse; context.Logger?.CustomResponse(context.HttpContext.Request.GetEncodedUrl()); }
public abstract string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences);
public MatchResults Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) { var pattern = Input.Evaluate(context, ruleBackReferences, conditionBackReferences); return(Match.Evaluate(pattern, context)); }
public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) { var key = _pattern.Evaluate(context, ruleBackReferences, conditionBackReferences).ToLowerInvariant(); return(_rewriteMap[key]); }
public static MatchResults Evaluate(IEnumerable <Condition> conditions, RewriteContext context, BackReferenceCollection backReferences) { return(Evaluate(conditions, context, backReferences, trackAllCaptures: false)); }
public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) { return(context.HttpContext.Connection.RemotePort.ToString(CultureInfo.InvariantCulture)); }
public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) { context.HttpContext.Abort(); context.Result = RuleResult.EndResponse; context.Logger?.AbortedRequest(context.HttpContext.Request.Path + context.HttpContext.Request.QueryString); }
public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) { return(_uriMatchPart == UriMatchPart.Full ? context.HttpContext.Request.GetEncodedUrl() : (string)context.HttpContext.Request.Path); }
// Explicitly say that nothing happens public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) { context.Result = Result; }
public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) { return(context.HttpContext.Request.Method); }
public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) { context.HttpContext.Response.StatusCode = StatusCodes.Status410Gone; context.Result = RuleResult.EndResponse; }
public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) { var pattern = Url.Evaluate(context, ruleBackReferences, conditionBackReferences); var request = context.HttpContext.Request; if (string.IsNullOrEmpty(pattern)) { pattern = "/"; } if (EscapeBackReferences) { // because escapebackreferences will be encapsulated by the pattern, just escape the pattern pattern = Uri.EscapeDataString(pattern); } // TODO PERF, substrings, object creation, etc. if (pattern.IndexOf(Uri.SchemeDelimiter, StringComparison.Ordinal) >= 0) { string scheme; HostString host; PathString path; QueryString query; FragmentString fragment; UriHelper.FromAbsolute(pattern, out scheme, out host, out path, out query, out fragment); if (query.HasValue) { if (QueryStringAppend) { request.QueryString = request.QueryString.Add(query); } else { request.QueryString = query; } } else if (QueryStringDelete) { request.QueryString = QueryString.Empty; } request.Scheme = scheme; request.Host = host; request.Path = path; } else { var split = pattern.IndexOf('?'); if (split >= 0) { var path = pattern.Substring(0, split); if (path[0] == '/') { request.Path = PathString.FromUriComponent(path); } else { request.Path = PathString.FromUriComponent('/' + path); } if (QueryStringAppend) { request.QueryString = request.QueryString.Add( QueryString.FromUriComponent( pattern.Substring(split))); } else { request.QueryString = QueryString.FromUriComponent( pattern.Substring(split)); } } else { if (pattern[0] == '/') { request.Path = PathString.FromUriComponent(pattern); } else { request.Path = PathString.FromUriComponent('/' + pattern); } if (QueryStringDelete) { request.QueryString = QueryString.Empty; } } } context.Result = Result; }
public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReference) { switch (_portion) { case DateTimePortion.Year: return(DateTimeOffset.UtcNow.Year.ToString(CultureInfo.InvariantCulture)); case DateTimePortion.Month: return(DateTimeOffset.UtcNow.Month.ToString(CultureInfo.InvariantCulture)); case DateTimePortion.Day: return(DateTimeOffset.UtcNow.Day.ToString(CultureInfo.InvariantCulture)); case DateTimePortion.Hour: return(DateTimeOffset.UtcNow.Hour.ToString(CultureInfo.InvariantCulture)); case DateTimePortion.Minute: return(DateTimeOffset.UtcNow.Minute.ToString(CultureInfo.InvariantCulture)); case DateTimePortion.Second: return(DateTimeOffset.UtcNow.Second.ToString(CultureInfo.InvariantCulture)); case DateTimePortion.DayOfWeek: return(((int)DateTimeOffset.UtcNow.DayOfWeek).ToString(CultureInfo.InvariantCulture)); case DateTimePortion.Time: return(DateTimeOffset.UtcNow.ToString(CultureInfo.InvariantCulture)); default: return(string.Empty); } }
public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) { return(context.HttpContext.Connection.LocalIpAddress?.ToString()); }
public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) { return(ruleBackReferences[_index]); }
public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) { return(context.HttpContext.Features.Get <IHttpRequestFeature>()?.Protocol); }
public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) { var options = GetOrCreateOptions(); context.HttpContext.Response.Cookies.Append(Name, Value ?? string.Empty, options); }
public abstract void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences);
public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) { return(context.HttpContext.GetServerVariable(_variableName) ?? _fallbackThunk().Evaluate(context, ruleBackReferences, conditionBackReferences)); }