|
1 | 1 | package auth
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "cmp" |
4 | 5 | "compress/flate"
|
5 | 6 | "crypto/rsa"
|
6 | 7 | "crypto/x509"
|
@@ -62,6 +63,19 @@ func newInsecureCookieJar() *insecureCookieJar {
|
62 | 63 | }
|
63 | 64 |
|
64 | 65 | func (jar *insecureCookieJar) SetCookies(u *url.URL, cookies []*http.Cookie) {
|
| 66 | + cookieMap := make(map[string]*http.Cookie) |
| 67 | + for _, c := range jar.store[u.Hostname()] { |
| 68 | + cookieMap[c.Name] = c |
| 69 | + } |
| 70 | + for _, c := range cookies { |
| 71 | + cookieMap[c.Name] = c |
| 72 | + } |
| 73 | + |
| 74 | + cookies = make([]*http.Cookie, 0, len(cookieMap)) |
| 75 | + for _, c := range cookieMap { |
| 76 | + cookies = append(cookies, c) |
| 77 | + } |
| 78 | + |
65 | 79 | jar.store[u.Hostname()] = cookies
|
66 | 80 | }
|
67 | 81 | func (jar *insecureCookieJar) Cookies(u *url.URL) []*http.Cookie {
|
@@ -705,6 +719,7 @@ func TestOIDCSetup(t *testing.T) {
|
705 | 719 | hostname string
|
706 | 720 | filter string
|
707 | 721 | queries []string
|
| 722 | + cookies []*http.Cookie |
708 | 723 | expected int
|
709 | 724 | expectRequest string
|
710 | 725 | expectNoCookies bool
|
@@ -859,11 +874,20 @@ func TestOIDCSetup(t *testing.T) {
|
859 | 874 | filter: `oauthOidcUserInfo("{{ .OIDCServerURL }}", "valid-client", "mysec", "{{ .RedirectURL }}", "", "")`,
|
860 | 875 | expected: 200,
|
861 | 876 | expectCookieName: "skipperOauthOidc",
|
| 877 | + }, { |
| 878 | + msg: "cookies should be forwarded", |
| 879 | + hostname: "skipper.test", |
| 880 | + filter: `oauthOidcUserInfo("{{ .OIDCServerURL }}", "valid-client", "mysec", "{{ .RedirectURL }}", "", "")`, |
| 881 | + cookies: []*http.Cookie{{Name: "please-forward", Value: "me", Domain: "skipper.test", MaxAge: 7200}}, |
| 882 | + expected: 200, |
| 883 | + expectRequest: "please-forward=me", |
| 884 | + expectCookieDomain: "skipper.test", |
862 | 885 | }} {
|
863 | 886 | t.Run(tc.msg, func(t *testing.T) {
|
864 | 887 | backend := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
865 | 888 | requestDump, _ := httputil.DumpRequest(r, false)
|
866 | 889 | assert.Contains(t, string(requestDump), tc.expectRequest, "expected request not fulfilled")
|
| 890 | + assert.NotContains(t, string(requestDump), cmp.Or(tc.expectCookieName, oauthOidcCookieName), "oidc cookie should be dropped") |
867 | 891 | w.Write([]byte("OK"))
|
868 | 892 | }))
|
869 | 893 | defer backend.Close()
|
@@ -949,6 +973,7 @@ func TestOIDCSetup(t *testing.T) {
|
949 | 973 | Timeout: 1 * time.Second,
|
950 | 974 | Jar: newInsecureCookieJar(),
|
951 | 975 | }
|
| 976 | + client.Jar.SetCookies(reqURL, tc.cookies) |
952 | 977 |
|
953 | 978 | // trigger OpenID Connect Authorization Code Flow
|
954 | 979 | resp, err := client.Do(req)
|
|
0 commit comments