Skip to content

Commit 5e28a4e

Browse files
author
a.krudu
committed
fix(filters): fix context loss in httproutefilter processing
Signed-off-by: a.krudu <a.krudu@tbank.ru>
1 parent b58edd7 commit 5e28a4e

File tree

3 files changed

+29
-8
lines changed

3 files changed

+29
-8
lines changed

internal/gatewayapi/filters.go

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -212,20 +212,28 @@ func (t *Translator) processURLRewriteFilter(
212212
return
213213
}
214214

215-
newURLRewrite := &ir.URLRewrite{}
216-
217215
if rewrite.Hostname != nil {
218216
if err := t.validateHostname(string(*rewrite.Hostname)); err != nil {
219217
updateRouteStatusForFilter(filterContext, err.Error())
220218
return
221219
}
222220
redirectHost := string(*rewrite.Hostname)
223-
newURLRewrite.Host = &ir.HTTPHostModifier{
224-
Name: &redirectHost,
221+
if filterContext.URLRewrite == nil {
222+
filterContext.URLRewrite = &ir.URLRewrite{
223+
Host: &ir.HTTPHostModifier{
224+
Name: &redirectHost,
225+
},
226+
}
227+
} else if filterContext.URLRewrite.Host == nil {
228+
filterContext.URLRewrite.Host = &ir.HTTPHostModifier{
229+
Name: &redirectHost,
230+
}
225231
}
226232
}
227233

228234
if rewrite.Path != nil {
235+
var pathModifier *ir.ExtendedHTTPPathModifier
236+
229237
switch rewrite.Path.Type {
230238
case gwapiv1.FullPathHTTPPathModifier:
231239
if rewrite.Path.ReplacePrefixMatch != nil {
@@ -241,7 +249,7 @@ func (t *Translator) processURLRewriteFilter(
241249
return
242250
}
243251
if rewrite.Path.ReplaceFullPath != nil {
244-
newURLRewrite.Path = &ir.ExtendedHTTPPathModifier{
252+
pathModifier = &ir.ExtendedHTTPPathModifier{
245253
HTTPPathModifier: ir.HTTPPathModifier{
246254
FullReplace: rewrite.Path.ReplaceFullPath,
247255
},
@@ -261,7 +269,7 @@ func (t *Translator) processURLRewriteFilter(
261269
return
262270
}
263271
if rewrite.Path.ReplacePrefixMatch != nil {
264-
newURLRewrite.Path = &ir.ExtendedHTTPPathModifier{
272+
pathModifier = &ir.ExtendedHTTPPathModifier{
265273
HTTPPathModifier: ir.HTTPPathModifier{
266274
PrefixMatchReplace: rewrite.Path.ReplacePrefixMatch,
267275
},
@@ -275,9 +283,14 @@ func (t *Translator) processURLRewriteFilter(
275283
rewrite.Path.Type))
276284
return
277285
}
286+
if filterContext.URLRewrite == nil {
287+
filterContext.URLRewrite = &ir.URLRewrite{
288+
Path: pathModifier,
289+
}
290+
} else if filterContext.URLRewrite.Path == nil {
291+
filterContext.URLRewrite.Path = pathModifier
292+
}
278293
}
279-
280-
filterContext.URLRewrite = newURLRewrite
281294
}
282295

283296
func (t *Translator) processRedirectFilter(

internal/gatewayapi/testdata/httproute-with-urlrewrite-filter-regex-match-replace-http.out.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,12 @@ xdsIR:
370370
urlRewrite:
371371
host:
372372
name: rewrite.com
373+
path:
374+
fullReplace: null
375+
prefixMatchReplace: null
376+
regexMatchReplace:
377+
pattern: .*
378+
substitution: foo
373379
- destination:
374380
metadata:
375381
kind: HTTPRoute

internal/gatewayapi/testdata/httproute-with-urlrewrite-hostname-filter.out.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,8 @@ xdsIR:
333333
name: ""
334334
prefix: /header-host-and-path
335335
urlRewrite:
336+
host:
337+
header: my-host
336338
path:
337339
fullReplace: null
338340
prefixMatchReplace: /rewrite

0 commit comments

Comments
 (0)