Skip to content

Commit 6fff6d9

Browse files
committed
feat: add prefix feature
1 parent 4371d96 commit 6fff6d9

File tree

5 files changed

+44
-12
lines changed

5 files changed

+44
-12
lines changed

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)