Skip to content

Commit c98f0c1

Browse files
authored
Demonstrate header removal (#16)
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com>
1 parent ea16f14 commit c98f0c1

7 files changed

Lines changed: 35 additions & 5 deletions

File tree

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ RUN cp /build/target/aarch64-unknown-linux-gnu/debug/librust_module.so /build/ar
2828
RUN cp /build/target/x86_64-unknown-linux-gnu/debug/librust_module.so /build/amd64_librust_module.so
2929

3030
# Finally, copy the built library to the final image.
31-
FROM envoyproxy/envoy-dev:4a113b5118003682833ba612202eb68628861ac6 AS envoy
31+
FROM envoyproxy/envoy-dev:726958228dc292f65b5acde26162a3645a99b067 AS envoy
3232
ARG TARGETARCH
3333
ENV ENVOY_DYNAMIC_MODULES_SEARCH_PATH=/usr/local/lib
3434
COPY --from=rust_builder /build/${TARGETARCH}_librust_module.so /usr/local/lib/librust_module.so

ENVOY_VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4a113b5118003682833ba612202eb68628861ac6
1+
726958228dc292f65b5acde26162a3645a99b067

integration/envoy.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,9 @@ static_resources:
5050
filter_config: |
5151
{
5252
"request_headers": [["X-Envoy-Header", "envoy-header"], ["X-Envoy-Header2", "envoy-header2"]],
53-
"response_headers": [["Foo", "bar"], ["Foo2", "bar2"]]
53+
"remove_request_headers": ["apple"],
54+
"response_headers": [["Foo", "bar"], ["Foo2", "bar2"]],
55+
"remove_response_headers": ["Access-Control-Allow-Credentials"]
5456
}
5557
- name: envoy.filters.http.router
5658
typed_config:

integration/main_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,12 @@ func TestIntegration(t *testing.T) {
149149

150150
require.Equal(t, "envoy-header", headersBody.Headers["X-Envoy-Header"])
151151
require.Equal(t, "envoy-header2", headersBody.Headers["X-Envoy-Header2"])
152+
require.NotContains(t, headersBody.Headers, "apple")
152153

153154
// We also need to check that the response headers were mutated.
154155
require.Equal(t, "bar", resp.Header.Get("Foo"))
155156
require.Equal(t, "bar2", resp.Header.Get("Foo2"))
157+
require.Equal(t, "", resp.Header.Get("Access-Control-Allow-Credentials"))
156158
return true
157159
}, 30*time.Second, 200*time.Millisecond)
158160
})

rust/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ repository = "https://github.com/envoyproxy/dynamic-modules-example"
88

99
[dependencies]
1010
# The SDK version must match the Envoy version due to the strict compatibility requirements.
11-
envoy-proxy-dynamic-modules-rust-sdk = { git = "https://github.com/envoyproxy/envoy", rev = "4a113b5118003682833ba612202eb68628861ac6" }
11+
envoy-proxy-dynamic-modules-rust-sdk = { git = "https://github.com/envoyproxy/envoy", rev = "726958228dc292f65b5acde26162a3645a99b067" }
1212
serde = { version = "1.0", features = ["derive"] }
1313
serde_json = "1.0"
1414
rand = "0.9.0"

rust/src/http_header_mutation.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ use serde::{Deserialize, Serialize};
77
#[derive(Serialize, Deserialize, Debug)]
88
pub struct FilterConfig {
99
request_headers: Vec<(String, String)>,
10+
remove_request_headers: Vec<String>,
1011
response_headers: Vec<(String, String)>,
12+
remove_response_headers: Vec<String>,
1113
}
1214

1315
impl FilterConfig {
@@ -32,7 +34,9 @@ impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
3234
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
3335
Box::new(Filter {
3436
request_headers: self.request_headers.clone(),
37+
remove_request_headers: self.remove_request_headers.clone(),
3538
response_headers: self.response_headers.clone(),
39+
remove_response_headers: self.remove_response_headers.clone(),
3640
})
3741
}
3842
}
@@ -42,7 +46,9 @@ impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
4246
/// This sets the request and response headers to the values specified in the filter config.
4347
pub struct Filter {
4448
request_headers: Vec<(String, String)>,
49+
remove_request_headers: Vec<String>,
4550
response_headers: Vec<(String, String)>,
51+
remove_response_headers: Vec<String>,
4652
}
4753

4854
/// This implements the [`envoy_proxy_dynamic_modules_rust_sdk::HttpFilter`] trait.
@@ -55,6 +61,9 @@ impl<EHF: EnvoyHttpFilter> HttpFilter<EHF> for Filter {
5561
for (key, value) in &self.request_headers {
5662
envoy_filter.set_request_header(key, value.as_bytes());
5763
}
64+
for key in &self.remove_request_headers {
65+
envoy_filter.remove_request_header(key);
66+
}
5867
abi::envoy_dynamic_module_type_on_http_filter_request_headers_status::Continue
5968
}
6069

@@ -66,6 +75,9 @@ impl<EHF: EnvoyHttpFilter> HttpFilter<EHF> for Filter {
6675
for (key, value) in &self.response_headers {
6776
envoy_filter.set_response_header(key, value.as_bytes());
6877
}
78+
for key in &self.remove_response_headers {
79+
envoy_filter.remove_response_header(key);
80+
}
6981
abi::envoy_dynamic_module_type_on_http_filter_response_headers_status::Continue
7082
}
7183
}
@@ -80,7 +92,9 @@ mod tests {
8092
let mut envoy_filter = envoy_proxy_dynamic_modules_rust_sdk::MockEnvoyHttpFilter::new();
8193
let mut filter = Filter {
8294
request_headers: vec![("X-Foo".to_string(), "bar".to_string())],
95+
remove_request_headers: vec!["To-Remove".to_string()],
8396
response_headers: vec![("X-Bar".to_string(), "foo".to_string())],
97+
remove_response_headers: vec!["To-Remove".to_string()],
8498
};
8599

86100
envoy_filter
@@ -90,13 +104,25 @@ mod tests {
90104
assert_eq!(value, b"bar");
91105
return true;
92106
});
107+
envoy_filter
108+
.expect_remove_request_header()
109+
.returning(|key| {
110+
assert_eq!(key, "To-Remove");
111+
return true;
112+
});
93113
envoy_filter
94114
.expect_set_response_header()
95115
.returning(|key, value| {
96116
assert_eq!(key, "X-Bar");
97117
assert_eq!(value, b"foo");
98118
return true;
99119
});
120+
envoy_filter
121+
.expect_remove_response_header()
122+
.returning(|key| {
123+
assert_eq!(key, "To-Remove");
124+
return true;
125+
});
100126
assert_eq!(
101127
filter.on_request_headers(&mut envoy_filter, false),
102128
abi::envoy_dynamic_module_type_on_http_filter_request_headers_status::Continue

0 commit comments

Comments
 (0)