diff options
| author | mo khan <mo@mokhan.ca> | 2025-05-11 19:56:54 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2025-05-11 21:22:02 -0600 |
| commit | 61a24b36f334b709f0eac0dd7746f83719747963 (patch) | |
| tree | 8930c6539c2158969be83aaa0fc058fc49e0f0ef /app/controllers | |
| parent | 5cc8d582127abed58433c85526d03a257748ca0c (diff) | |
refactor: use same cookie names as envoy plugin
Diffstat (limited to 'app/controllers')
| -rw-r--r-- | app/controllers/sessions/controller.go | 15 | ||||
| -rw-r--r-- | app/controllers/sessions/controller_test.go | 54 |
2 files changed, 34 insertions, 35 deletions
diff --git a/app/controllers/sessions/controller.go b/app/controllers/sessions/controller.go index bf7d813..2853358 100644 --- a/app/controllers/sessions/controller.go +++ b/app/controllers/sessions/controller.go @@ -100,22 +100,19 @@ func (c *Controller) Create(w http.ResponseWriter, r *http.Request) { return } - encoded, err := tokens.ToBase64String() - if err != nil { - pls.LogError(r.Context(), err) - w.WriteHeader(http.StatusBadRequest) - return - } - web.ExpireCookie(w, cfg.CSRFCookie) - web.WriteCookie(w, web.NewCookie(cfg.SessionCookie, encoded)) + web.WriteCookie(w, web.NewCookie(cfg.IDTokenCookie, tokens.IDToken.String())) + web.WriteCookie(w, web.NewCookie(cfg.BearerTokenCookie, tokens.AccessToken)) + web.WriteCookie(w, web.NewCookie(cfg.RefreshTokenCookie, tokens.RefreshToken)) c.redirectTo(w, r, "/dashboard") } func (c *Controller) Destroy(w http.ResponseWriter, r *http.Request) { web.ExpireCookie(w, cfg.CSRFCookie) - web.ExpireCookie(w, cfg.SessionCookie) + web.ExpireCookie(w, cfg.IDTokenCookie) + web.ExpireCookie(w, cfg.BearerTokenCookie) + web.ExpireCookie(w, cfg.RefreshTokenCookie) c.redirectTo(w, r, "/") } diff --git a/app/controllers/sessions/controller_test.go b/app/controllers/sessions/controller_test.go index 9b701d6..00e3f4e 100644 --- a/app/controllers/sessions/controller_test.go +++ b/app/controllers/sessions/controller_test.go @@ -1,9 +1,6 @@ package sessions import ( - "encoding/base64" - "encoding/json" - "fmt" "net/http" "net/url" "testing" @@ -133,29 +130,28 @@ func TestSessions(t *testing.T) { return ck }) - cookie := x.Find(cookies, func(item *http.Cookie) bool { - return item.Name == xcfg.SessionCookie - }) - data, err := base64.URLEncoding.DecodeString(web.CookieValueFrom(cookie)) - require.NoError(t, err) - tokens := map[string]interface{}{} - require.NoError(t, json.Unmarshal(data, &tokens)) - t.Run("stores the id token in a session cookie", func(t *testing.T) { - require.NotEmpty(t, tokens["id_token"]) + cookie := x.Find(cookies, func(item *http.Cookie) bool { + return item.Name == xcfg.IDTokenCookie + }) - idToken := srv.Verify(tokens["id_token"].(string)) + require.NotNil(t, cookie) + + idToken := srv.Verify(cookie.Value) assert.Equal(t, user.Subject, idToken.Subject) }) t.Run("stores the access token in a session cookie", func(t *testing.T) { - assert.NotEmpty(t, tokens["access_token"]) - assert.Equal(t, "bearer", tokens["token_type"]) + cookie := x.Find(cookies, func(item *http.Cookie) bool { + return item.Name == xcfg.BearerTokenCookie + }) + + require.NotNil(t, cookie) keypair, err := mockoidc.DefaultKeypair() require.NoError(t, err) - token, err := keypair.VerifyJWT(tokens["access_token"].(string), nil) + token, err := keypair.VerifyJWT(cookie.Value, nil) require.NoError(t, err) sub, err := token.Claims.GetSubject() @@ -164,12 +160,15 @@ func TestSessions(t *testing.T) { }) t.Run("stores the refresh token in a session cookie", func(t *testing.T) { - assert.NotEmpty(t, tokens["refresh_token"]) + cookie := x.Find(cookies, func(item *http.Cookie) bool { + return item.Name == xcfg.RefreshTokenCookie + }) + require.NotNil(t, cookie) keypair, err := mockoidc.DefaultKeypair() require.NoError(t, err) - token, err := keypair.VerifyJWT(tokens["refresh_token"].(string), nil) + token, err := keypair.VerifyJWT(cookie.Value, nil) require.NoError(t, err) sub, err := token.Claims.GetSubject() @@ -183,11 +182,13 @@ func TestSessions(t *testing.T) { }) t.Run("applies the appropriate cookie settings", func(t *testing.T) { - assert.Equal(t, "/", cookie.Path) - assert.Equal(t, xcfg.SessionCookie, cookie.Name) - assert.True(t, cookie.HttpOnly) - assert.True(t, cookie.Secure) - assert.NotEmpty(t, cookie.Value) + x.Each(cookies, func(cookie *http.Cookie) { + t.Logf("%v: %v\n", cookie.Name, cookie.Value) + assert.Equal(t, "/", cookie.Path) + assert.NotEmpty(t, cookie.Name) + assert.True(t, cookie.HttpOnly) + assert.True(t, cookie.Secure) + }) }) }) }) @@ -204,7 +205,6 @@ func TestSessions(t *testing.T) { require.Equal(t, http.StatusOK, w.Code) items, err := serde.FromJSON[map[string]interface{}](w.Body) require.NoError(t, err) - fmt.Printf("%v\n", items) assert.Equal(t, srv.Issuer(), items["iss"]) }) @@ -219,7 +219,7 @@ func TestSessions(t *testing.T) { t.Run("POST /session/destroy", func(t *testing.T) { t.Run("clears the session cookie", func(t *testing.T) { - cookie := web.NewCookie(xcfg.SessionCookie, "value") + cookie := web.NewCookie(xcfg.IDTokenCookie, "value") r, w := test.RequestResponse("POST", "/session/destroy", test.WithCookie(cookie)) mux.ServeHTTP(w, r) @@ -229,7 +229,9 @@ func TestSessions(t *testing.T) { expected := []string{ "__csrf=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Max-Age=0; HttpOnly; Secure", - "__s=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Max-Age=0; HttpOnly; Secure", + "id_token=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Max-Age=0; HttpOnly; Secure", + "bearer_token=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Max-Age=0; HttpOnly; Secure", + "refresh_token=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Max-Age=0; HttpOnly; Secure", } assert.ElementsMatch(t, expected, w.Header().Values("Set-Cookie")) }) |
