Skip to content

Commit 9832dce

Browse files
authored
Merge pull request #2 from kauche/config-prefix
Config prefix
2 parents 24e88bb + 6fff6d9 commit 9832dce

File tree

9 files changed

+53
-17
lines changed

9 files changed

+53
-17
lines changed

Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ ARCH := $(shell case $$(uname -m) in (x86_64) echo amd64 ;; (aarch64) echo arm64
33

44
BIN_DIR := ./.bin
55

6-
TINYGO_VERSION := 0.26.0
6+
TINYGO_VERSION := 0.30.0
77
TINYGO := $(abspath $(BIN_DIR)/tinygo-$(TINYGO_VERSION))/bin/tinygo
88

99
DOCKER_NETWORK := proxy-wasm-http-header-rename_default
@@ -31,7 +31,7 @@ test-docker:
3131
--volume "$(shell pwd):/workspace" \
3232
--workdir /workspace \
3333
--network $(DOCKER_NETWORK) \
34-
golang:1.19.5-bullseye make test
34+
golang:1.22.0-bullseye make test
3535

3636
.PHONY: build
3737
build: $(TINYGO)
@@ -45,5 +45,5 @@ build-docker:
4545
--volume "$(shell pwd):/workspace" \
4646
--user "$(shell id -u):$(shell id -g)" \
4747
--workdir /workspace \
48-
golang:1.19.5-bullseye \
48+
golang:1.21.7-bullseye \
4949
make build

compose.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
services:
33
envoy:
4-
image: envoyproxy/envoy:v1.24.1
4+
image: envoyproxy/envoy:v1.29.1
55
ports:
66
- ${PORT-8080}:8080
77
volumes:

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module github.com/kauche/proxy-wasm-http-header-rename
22

3-
go 1.19
3+
go 1.21
44

55
require (
66
github.com/tetratelabs/proxy-wasm-go-sdk v0.20.0

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
2+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
23
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
4+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
35
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
6+
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
47
github.com/tetratelabs/proxy-wasm-go-sdk v0.20.0 h1:i/xtxt/jHXtp/yImhlp4pAWx0eVzIBKOaay3Nu4Iw3k=
58
github.com/tetratelabs/proxy-wasm-go-sdk v0.20.0/go.mod h1:7uUubjgZpmccNAPqSS6Il6CF+tk3BGf4qSCJZp3W8s8=
69
github.com/tidwall/gjson v1.14.4 h1:uo0p8EbA09J7RQaflQ1aBRffTR7xedD2bcIVSYxLnkM=
@@ -10,3 +13,4 @@ github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JT
1013
github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
1114
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
1215
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
16+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

internal/config.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const (
55
configKeyHeader = "header"
66
configKeyKey = "key"
77
configKeyValue = "value"
8+
configKeyPrefix = "prefix"
89
)
910

1011
type pluginConfiguration struct {
@@ -16,6 +17,7 @@ type requestHeaderToRename struct {
1617
}
1718

1819
type headerValue struct {
19-
key string
20-
value string
20+
key string
21+
value string
22+
prefix string
2123
}

internal/http.go

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ type httpContext struct {
1717

1818
func (c *httpContext) OnHttpRequestHeaders(_ int, _ bool) types.Action {
1919
for _, requestHeaderToRename := range c.configuration.requestHeadersToRename {
20-
if err := c.renameRequestHeader(requestHeaderToRename.header.key, requestHeaderToRename.header.value); err != nil {
20+
if err := c.renameRequestHeader(requestHeaderToRename.header); err != nil {
2121
setErrorHTTPResponseWithLog("failed to rename the header: %s", err)
2222
return types.ActionPause
2323
}
@@ -26,22 +26,27 @@ func (c *httpContext) OnHttpRequestHeaders(_ int, _ bool) types.Action {
2626
return types.ActionContinue
2727
}
2828

29-
func (c *httpContext) renameRequestHeader(origName, newName string) error {
30-
value, err := proxywasm.GetHttpRequestHeader(origName)
29+
func (c *httpContext) renameRequestHeader(h headerValue) error {
30+
value, err := proxywasm.GetHttpRequestHeader(h.key)
3131
if err != nil {
3232
if err == types.ErrorStatusNotFound {
3333
return nil
3434
}
3535

36-
return fmt.Errorf("failed to get the original header, `%s`: %w", origName, err)
36+
return fmt.Errorf("failed to get the original header, `%s`: %w", h.key, err)
3737
}
3838

39-
if err := proxywasm.ReplaceHttpRequestHeader(newName, value); err != nil {
40-
return fmt.Errorf("failed to set the new header, `%s`: %w", newName, err)
39+
newValue := value
40+
if h.prefix != "" {
41+
newValue = h.prefix + value
4142
}
4243

43-
if err := proxywasm.RemoveHttpRequestHeader(origName); err != nil {
44-
return fmt.Errorf("failed to delete the original header, `%s`: %w", origName, err)
44+
if err := proxywasm.ReplaceHttpRequestHeader(h.value, newValue); err != nil {
45+
return fmt.Errorf("failed to set the new header, `%s`: %w", h.value, err)
46+
}
47+
48+
if err := proxywasm.RemoveHttpRequestHeader(h.key); err != nil {
49+
return fmt.Errorf("failed to delete the original header, `%s`: %w", h.key, err)
4550
}
4651

4752
return nil

internal/plugin.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,13 @@ func getPluginConfiguration() (*pluginConfiguration, error) {
7575
return nil, errors.New("the header value for renaming is empty")
7676
}
7777

78+
prefix := h.Get(configKeyPrefix).String()
79+
7880
headersToRename[i] = requestHeaderToRename{
7981
header: headerValue{
80-
key: key,
81-
value: value,
82+
key: key,
83+
value: value,
84+
prefix: prefix,
8285
},
8386
}
8487
}

test/e2e_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ func TestE2E(t *testing.T) {
2424

2525
req.Header.Set("original-header-1", "original-header-value-1")
2626
req.Header.Set("original-header-2", "original-header-value-2")
27+
req.Header.Set("original-header-3", "original-header-value-3")
2728

2829
res, err := http.DefaultClient.Do(req)
2930
if err != nil {
@@ -82,6 +83,20 @@ func TestE2E(t *testing.T) {
8283
t.Error("original-header-2 header should be removed")
8384
return
8485
}
86+
87+
newHeader3, ok := echores.Headers["new-header-3"]
88+
if !ok {
89+
t.Error("new-header-3 header is not found")
90+
return
91+
}
92+
if len(newHeader3.Value) != 1 {
93+
t.Errorf("new-header-3 header has invalid number of values: %d", len(newHeader3.Value))
94+
return
95+
}
96+
if newHeader3.Value[0] != "bearer original-header-value-3" {
97+
t.Errorf("the value for new-header-3 is expected to be `bearer original-header-value3`, but got `%s`", newHeader3.Value[0])
98+
return
99+
}
85100
}
86101

87102
func createHTTPRequest(host string) (*http.Request, error) {

test/envoy.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,13 @@ static_resources:
5858
"key": "original-header-2",
5959
"value": "new-header-2"
6060
}
61+
},
62+
{
63+
"header": {
64+
"key": "original-header-3",
65+
"value": "new-header-3",
66+
"prefix": "bearer "
67+
}
6168
}
6269
]
6370
}

0 commit comments

Comments
 (0)