Skip to content

Commit 8fde1dd

Browse files
committed
Remove port from redirect location when scheme and port are well known
1 parent 72b6fc1 commit 8fde1dd

File tree

2 files changed

+58
-36
lines changed

2 files changed

+58
-36
lines changed

internal/nginx/config/servers.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -198,24 +198,25 @@ func createReturnValForRedirectFilter(filter *v1beta1.HTTPRequestRedirectFilter,
198198
port := listenerPort
199199
if filter.Port != nil {
200200
port = int32(*filter.Port)
201-
} else {
202-
if filter.Scheme != nil {
203-
if *filter.Scheme == "http" {
204-
port = 80
205-
} else if *filter.Scheme == "https" {
206-
port = 443
207-
}
208-
}
209201
}
210202

203+
hostnamePort := fmt.Sprintf("%s:%d", hostname, port)
204+
211205
scheme := "$scheme"
212206
if filter.Scheme != nil {
213207
scheme = *filter.Scheme
208+
if filter.Port == nil {
209+
// Don't specify the port in the return url if the scheme is
210+
// well known and the port is not specified by the user
211+
if *filter.Scheme == "http" || *filter.Scheme == "https" {
212+
hostnamePort = hostname
213+
}
214+
}
214215
}
215216

216217
return &http.Return{
217218
Code: code,
218-
Body: fmt.Sprintf("%s://%s:%d$request_uri", scheme, hostname, port),
219+
Body: fmt.Sprintf("%s://%s$request_uri", scheme, hostnamePort),
219220
}
220221
}
221222

internal/nginx/config/servers_test.go

Lines changed: 48 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -880,20 +880,25 @@ func TestCreateLocationsRootPath(t *testing.T) {
880880
}
881881

882882
func TestCreateReturnValForRedirectFilter(t *testing.T) {
883-
const listenerPort = 123
883+
const listenerPortCustom = 123
884+
const listenerPortHTTP = 80
885+
const listenerPortHTTPS = 443
884886

885887
tests := []struct {
886-
filter *v1beta1.HTTPRequestRedirectFilter
887-
expected *http.Return
888-
msg string
888+
filter *v1beta1.HTTPRequestRedirectFilter
889+
expected *http.Return
890+
msg string
891+
listenerPort int32
889892
}{
890893
{
891-
filter: nil,
892-
expected: nil,
893-
msg: "filter is nil",
894+
filter: nil,
895+
expected: nil,
896+
listenerPort: listenerPortCustom,
897+
msg: "filter is nil",
894898
},
895899
{
896-
filter: &v1beta1.HTTPRequestRedirectFilter{},
900+
filter: &v1beta1.HTTPRequestRedirectFilter{},
901+
listenerPort: listenerPortCustom,
897902
expected: &http.Return{
898903
Code: http.StatusFound,
899904
Body: "$scheme://$host:123$request_uri",
@@ -902,11 +907,12 @@ func TestCreateReturnValForRedirectFilter(t *testing.T) {
902907
},
903908
{
904909
filter: &v1beta1.HTTPRequestRedirectFilter{
905-
Scheme: helpers.GetStringPointer("https"),
906-
Hostname: (*v1beta1.PreciseHostname)(helpers.GetStringPointer("foo.example.com")),
910+
Scheme: helpers.GetPointer("https"),
911+
Hostname: helpers.GetPointer(v1beta1.PreciseHostname("foo.example.com")),
907912
Port: (*v1beta1.PortNumber)(helpers.GetInt32Pointer(2022)),
908-
StatusCode: helpers.GetIntPointer(101),
913+
StatusCode: helpers.GetPointer(101),
909914
},
915+
listenerPort: listenerPortCustom,
910916
expected: &http.Return{
911917
Code: 101,
912918
Body: "https://foo.example.com:2022$request_uri",
@@ -915,44 +921,59 @@ func TestCreateReturnValForRedirectFilter(t *testing.T) {
915921
},
916922
{
917923
filter: &v1beta1.HTTPRequestRedirectFilter{
918-
Scheme: helpers.GetStringPointer("https"),
919-
Hostname: (*v1beta1.PreciseHostname)(helpers.GetStringPointer("foo.example.com")),
920-
StatusCode: helpers.GetIntPointer(101),
924+
Hostname: helpers.GetPointer(v1beta1.PreciseHostname("foo.example.com")),
925+
StatusCode: helpers.GetPointer(101),
926+
},
927+
listenerPort: listenerPortHTTPS,
928+
expected: &http.Return{
929+
Code: 101,
930+
Body: "$scheme://foo.example.com:443$request_uri",
931+
},
932+
msg: "no scheme, listenerPort https, no port is set",
933+
},
934+
{
935+
filter: &v1beta1.HTTPRequestRedirectFilter{
936+
Scheme: helpers.GetPointer("https"),
937+
Hostname: helpers.GetPointer(v1beta1.PreciseHostname("foo.example.com")),
938+
StatusCode: helpers.GetPointer(101),
921939
},
940+
listenerPort: listenerPortHTTPS,
922941
expected: &http.Return{
923942
Code: 101,
924-
Body: "https://foo.example.com:443$request_uri",
943+
Body: "https://foo.example.com$request_uri",
925944
},
926-
msg: "scheme is https, no port is set",
945+
msg: "scheme is https, listenerPort https, no port is set",
927946
},
928947
{
929948
filter: &v1beta1.HTTPRequestRedirectFilter{
930-
Scheme: helpers.GetStringPointer("http"),
931-
Hostname: (*v1beta1.PreciseHostname)(helpers.GetStringPointer("foo.example.com")),
932-
StatusCode: helpers.GetIntPointer(101),
949+
Scheme: helpers.GetPointer("http"),
950+
Hostname: helpers.GetPointer(v1beta1.PreciseHostname("foo.example.com")),
951+
StatusCode: helpers.GetPointer(101),
933952
},
953+
listenerPort: listenerPortHTTP,
934954
expected: &http.Return{
935955
Code: 101,
936-
Body: "http://foo.example.com:80$request_uri",
956+
Body: "http://foo.example.com$request_uri",
937957
},
938-
msg: "scheme is http, no port is set",
958+
msg: "scheme is http, listenerPort http, no port is set",
939959
},
940960
{
941961
filter: &v1beta1.HTTPRequestRedirectFilter{
942-
Scheme: helpers.GetStringPointer("custom"),
943-
Hostname: (*v1beta1.PreciseHostname)(helpers.GetStringPointer("foo.example.com")),
944-
StatusCode: helpers.GetIntPointer(101),
962+
Scheme: helpers.GetPointer("custom"),
963+
Hostname: helpers.GetPointer(v1beta1.PreciseHostname("foo.example.com")),
964+
StatusCode: helpers.GetPointer(101),
945965
},
966+
listenerPort: listenerPortHTTP,
946967
expected: &http.Return{
947968
Code: 101,
948-
Body: "custom://foo.example.com:123$request_uri",
969+
Body: "custom://foo.example.com:80$request_uri",
949970
},
950-
msg: "scheme is custom, no port is set",
971+
msg: "scheme is custom, listenerPort http, no port is set",
951972
},
952973
}
953974

954975
for _, test := range tests {
955-
result := createReturnValForRedirectFilter(test.filter, listenerPort)
976+
result := createReturnValForRedirectFilter(test.filter, test.listenerPort)
956977
if diff := cmp.Diff(test.expected, result); diff != "" {
957978
t.Errorf("createReturnValForRedirectFilter() mismatch %q (-want +got):\n%s", test.msg, diff)
958979
}

0 commit comments

Comments
 (0)