public override string?Evaluate(RewriteContext context, BackReferenceCollection?ruleBackReferences, BackReferenceCollection?conditionBackReferences) { return(_literal); }
public override void ApplyAction(RewriteContext context, BackReferenceCollection?ruleBackReferences, BackReferenceCollection?conditionBackReferences) { var options = GetOrCreateOptions(); context.HttpContext.Response.Cookies.Append(Name, Value ?? string.Empty, options); }
public override string?Evaluate(RewriteContext context, BackReferenceCollection?ruleBackReferences, BackReferenceCollection?conditionBackReferences) { var key = _pattern.Evaluate(context, ruleBackReferences, conditionBackReferences).ToLowerInvariant(); return(_rewriteMap[key]); }
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.Response.StatusCode = StatusCodes.Status403Forbidden; context.Result = RuleResult.EndResponse; }
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?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 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(context.HttpContext.GetServerVariable(_variableName) ?? _fallbackThunk().Evaluate(context, ruleBackReferences, conditionBackReferences)); }
public string Evaluate(RewriteContext context, BackReferenceCollection?ruleBackReferences, BackReferenceCollection?conditionBackReferences) { foreach (var pattern in PatternSegments) { context.Builder.Append(pattern.Evaluate(context, ruleBackReferences, conditionBackReferences)); } var retVal = context.Builder.ToString(); context.Builder.Clear(); return(retVal); }
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.Contains(Uri.SchemeDelimiter, StringComparison.Ordinal)) { string scheme; HostString host; PathString path; QueryString query; UriHelper.FromAbsolute(pattern, out scheme, out host, out path, out query, out _); 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?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 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 feature = context.HttpContext.Features.Get <IHttpBodyControlFeature>(); if (feature != null) { feature.AllowSynchronousIO = true; } 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()); }
// 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) { 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?ruleBackReferences, BackReferenceCollection?conditionBackReferences) { return(context.HttpContext.Connection.LocalIpAddress?.ToString()); }
public abstract string?Evaluate(RewriteContext context, BackReferenceCollection?ruleBackReferences, BackReferenceCollection?conditionBackReferences);
public override string?Evaluate(RewriteContext context, BackReferenceCollection?ruleBackReferences, BackReferenceCollection?conditionBackReferences) { return(_uriMatchPart == UriMatchPart.Full ? context.HttpContext.Request.GetEncodedUrl() : (string)context.HttpContext.Request.Path); }
public MatchResults(bool success, BackReferenceCollection?backReferences = null) { Success = success; BackReferences = backReferences; }
public override string?Evaluate(RewriteContext context, BackReferenceCollection?ruleBackReferences, BackReferenceCollection?conditionBackReferences) { return(context.HttpContext.Features.Get <IHttpRequestFeature>()?.Protocol); }
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(Uri.UnescapeDataString(pattern)); }
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.Location = pathBase.HasValue ? pathBase.Value : "/"; return; } if (pattern.IndexOf(Uri.SchemeDelimiter, 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.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.Location = pathBase + pattern; } else { response.Headers.Location = pathBase + pattern + context.HttpContext.Request.QueryString; } } context.Result = RuleResult.EndResponse; }
public override string?Evaluate(RewriteContext context, BackReferenceCollection?ruleBackReferences, BackReferenceCollection?conditionBackReferences) { return(context.HttpContext.Request.Scheme); }
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(condResult !.Success, prevBackReferences)); }