config: add support for set_response_headers in a policy (#2171)

* config: add support for set_response_headers in a policy

* docs: add note about precedence
This commit is contained in:
Caleb Doxsey 2021-05-04 09:43:52 -06:00 committed by GitHub
parent 129df47f9c
commit 69576cffe4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 514 additions and 471 deletions

View file

@ -276,6 +276,7 @@ func (b *Builder) buildPolicyRoutes(options *config.Options, domain string) ([]*
Metadata: &envoy_config_core_v3.Metadata{},
RequestHeadersToAdd: toEnvoyHeaders(policy.SetRequestHeaders),
RequestHeadersToRemove: getRequestHeadersToRemove(options, &policy),
ResponseHeadersToAdd: toEnvoyHeaders(policy.SetResponseHeaders),
}
if policy.Redirect != nil {
action, err := b.buildPolicyRouteRedirectAction(policy.Redirect)

View file

@ -151,6 +151,9 @@ type Policy struct {
// RewriteResponseHeaders rewrites response headers. This can be used to change the Location header.
RewriteResponseHeaders []RewriteHeader `mapstructure:"rewrite_response_headers" yaml:"rewrite_response_headers,omitempty" json:"rewrite_response_headers,omitempty"` //nolint
// SetResponseHeaders sets response headers.
SetResponseHeaders map[string]string `mapstructure:"set_response_headers" yaml:"set_response_headers,omitempty"`
}
// RewriteHeader is a policy configuration option to rewrite an HTTP header.
@ -219,6 +222,7 @@ func NewPolicyFromProto(pb *configpb.Route) (*Policy, error) {
PreserveHostHeader: pb.GetPreserveHostHeader(),
PassIdentityHeaders: pb.GetPassIdentityHeaders(),
KubernetesServiceAccountToken: pb.GetKubernetesServiceAccountToken(),
SetResponseHeaders: pb.GetSetResponseHeaders(),
}
if pb.Redirect.IsSet() {
@ -321,6 +325,7 @@ func (p *Policy) ToProto() (*configpb.Route, error) {
PassIdentityHeaders: p.PassIdentityHeaders,
KubernetesServiceAccountToken: p.KubernetesServiceAccountToken,
Policies: sps,
SetResponseHeaders: p.SetResponseHeaders,
}
if p.Redirect != nil {
pb.Redirect = &configpb.RouteRedirect{

View file

@ -1372,6 +1372,14 @@ Remove Request Headers allows you to remove given request headers. This can be u
```
### Set Response Headers
- Config File Key: `set_response_headers`
- Type: map of `strings` key value pairs
- Optional
Set Response Headers allows you to set static values for the given response headers. These headers will take precedence over the global `set_response_headers`.
### Rewrite Response Headers
- Config File Key: `rewrite_response_headers`
- Type: `object`

View file

@ -1507,6 +1507,14 @@ settings:
- X-Email
- X-Username
```
- name: "Set Response Headers"
keys: ["set_response_headers"]
attributes: |
- Config File Key: `set_response_headers`
- Type: map of `strings` key value pairs
- Optional
doc: |
Set Response Headers allows you to set static values for the given response headers. These headers will take precedence over the global `set_response_headers`.
- name: "Rewrite Response Headers"
keys: ["rewrite_response_headers"]
attributes: |

File diff suppressed because it is too large Load diff

View file

@ -82,6 +82,7 @@ message Route {
map<string, string> set_request_headers = 22;
repeated string remove_request_headers = 23;
map<string, string> set_response_headers = 41;
repeated RouteRewriteHeader rewrite_response_headers = 40;
bool preserve_host_header = 24;