summaryrefslogtreecommitdiff
path: root/app/controllers
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2025-05-11 19:56:54 -0600
committermo khan <mo@mokhan.ca>2025-05-11 21:22:02 -0600
commit61a24b36f334b709f0eac0dd7746f83719747963 (patch)
tree8930c6539c2158969be83aaa0fc058fc49e0f0ef /app/controllers
parent5cc8d582127abed58433c85526d03a257748ca0c (diff)
refactor: use same cookie names as envoy plugin
Diffstat (limited to 'app/controllers')
-rw-r--r--app/controllers/sessions/controller.go15
-rw-r--r--app/controllers/sessions/controller_test.go54
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"))
})