Exemple #1
0
 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);
        }
Exemple #3
0
        public override string?Evaluate(RewriteContext context, BackReferenceCollection?ruleBackReferences, BackReferenceCollection?conditionBackReferences)
        {
            var key = _pattern.Evaluate(context, ruleBackReferences, conditionBackReferences).ToLowerInvariant();

            return(_rewriteMap[key]);
        }
Exemple #4
0
 public override string?Evaluate(RewriteContext context, BackReferenceCollection?ruleBackReferences, BackReferenceCollection?conditionBackReferences)
 {
     return(context.HttpContext.Connection.RemotePort.ToString(CultureInfo.InvariantCulture));
 }
Exemple #5
0
 public override void ApplyAction(RewriteContext context, BackReferenceCollection?ruleBackReferences, BackReferenceCollection?conditionBackReferences)
 {
     context.HttpContext.Response.StatusCode = StatusCodes.Status403Forbidden;
     context.Result = RuleResult.EndResponse;
 }
Exemple #6
0
    public MatchResults Evaluate(RewriteContext context, BackReferenceCollection?ruleBackReferences, BackReferenceCollection?conditionBackReferences)
    {
        var pattern = Input.Evaluate(context, ruleBackReferences, conditionBackReferences);

        return(Match.Evaluate(pattern, context));
    }
Exemple #7
0
    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);
        }
    }
Exemple #8
0
 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));
 }
Exemple #10
0
        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);
        }
Exemple #11
0
    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;
    }
Exemple #12
0
        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());
        }
Exemple #13
0
    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());
    }
Exemple #14
0
 // 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());
 }
Exemple #17
0
 public abstract string?Evaluate(RewriteContext context, BackReferenceCollection?ruleBackReferences, BackReferenceCollection?conditionBackReferences);
Exemple #18
0
 public override string?Evaluate(RewriteContext context, BackReferenceCollection?ruleBackReferences, BackReferenceCollection?conditionBackReferences)
 {
     return(_uriMatchPart == UriMatchPart.Full ? context.HttpContext.Request.GetEncodedUrl() : (string)context.HttpContext.Request.Path);
 }
Exemple #19
0
 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);
 }
Exemple #21
0
    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));
    }
Exemple #22
0
    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;
    }
Exemple #23
0
 public override string?Evaluate(RewriteContext context, BackReferenceCollection?ruleBackReferences, BackReferenceCollection?conditionBackReferences)
 {
     return(context.HttpContext.Request.Scheme);
 }
Exemple #24
0
        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));
        }