// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// **** DO NOT EDIT - this file was automatically generated. ****
syntax = "proto3";

package cast.v2;

option optimize_for = LITE_RUNTIME;

// A collection of rules.
message UrlRequestRewriteRules {
  // The order of rules specifies the order in which they will be applied.
  repeated UrlRequestRewriteRule rules = 1;
}

message UrlRequestRewriteRule {
  // Specifies the action to be taken for a UrlRequestRewriteRule.
  enum UrlRequestAction {
    // Default value.
    ACTION_UNSPECIFIED = 0;
    // Allow the request to be processed.
    ALLOW = 1;
    // Block the request.
    DENY = 2;
  }

  // Set of hosts to apply the rules to. If not set, the rule will apply to
  // every request, independent of host.
  repeated string host_filters = 1;

  // Set of schemes to apply the rules to. If not set, the rule will apply to
  // every request, independent of scheme.
  repeated string scheme_filters = 2;

  // URL request rewrites to apply.
  repeated UrlRequestRewrite rewrites = 3;

  // Specifies the action to take for requests matching the filter criteria.
  // Requests are allowed by default.
  UrlRequestAction action = 4;
}

message UrlRequestRewrite {
  oneof action {
    // Adds a set of headers to a URL request.
    UrlRequestRewriteAddHeaders add_headers = 1;

    // Removes a header based on the presence of a pattern in the URL query.
    UrlRequestRewriteRemoveHeader remove_header = 2;

    // Substitutes a pattern in the URL query.
    UrlRequestRewriteSubstituteQueryPattern substitute_query_pattern = 3;

    // Replaces a URL if the original URL ends with a pattern.
    UrlRequestRewriteReplaceUrl replace_url = 4;

    // Appends to the URL query.
    UrlRequestRewriteAppendToQuery append_to_query = 5;
  }
}

// An HTTP header field.
message UrlHeader {
  string name = 1;
  string value = 2;
}

// Adds `headers` to the URL request. If a header is already present in the
// original URL request, it will be overwritten.
// - `headers` must be set.
// - Each [`UrlHeader`] in `headers` must have a valid HTTP header name and
// value,
//   per [RFC 7230
//   section  3.2](https://tools.ietf.org/html/rfc7230#section-3.2).
message UrlRequestRewriteAddHeaders {
  repeated UrlHeader headers = 1;
}

// If `query_pattern` is in the URL query, removes `header_name` from the list
// of headers. If `query_pattern` is not set, removes `header_name` from the
// list of headers unconditionally.
// - `header_name` must be set.
// - `header_name` must be a valid HTTP header name, per
//   [RFC 7230 section 3.2](https://tools.ietf.org/html/rfc7230#section-3.2).
message UrlRequestRewriteRemoveHeader {
  string query_pattern = 1;
  string header_name = 2;
}

// If `pattern` is found in the URL request query, replaces it with
// `substitution`.
// - `pattern` and `substitution` must be set.
// - `substitution` must be a valid
//   [URL-query string](https://url.spec.whatwg.org/#url-query-string).
message UrlRequestRewriteSubstituteQueryPattern {
  string pattern = 1;
  string substitution = 2;
}

// If the URL in the URL request ends with `url_ends_with`, rewrites the URL to
// `new_url`.
// - `url_ends_with` and `new_url` must be set.
// - `url_ends_with` must be a valid
//   [path-relative-URL
//   string](https://url.spec.whatwg.org/#path-relative-url-string).
// - `new_url` must be a [valid URL
// string](https://url.spec.whatwg.org/#valid-url-string).
message UrlRequestRewriteReplaceUrl {
  string url_ends_with = 1;
  string new_url = 2;
}

// Appends `query` to the URL query. If the URL request already has a query,
// `query` will be appended to it, preceded by `&`. Otherwise, the URL's query
// will be set to `query`.
// - `query` must be set.
// - `query` must be a valid [URL-query
// string](https://url.spec.whatwg.org/#url-query-string).
message UrlRequestRewriteAppendToQuery {
  string query = 1;
}
