From 6361101d0dedcdda8c2c030b9413378097578c83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Eduardo=20Jer=C3=A9z=20Gir=C3=B3n?= Date: Tue, 23 Jul 2024 14:56:05 -0600 Subject: [PATCH] Add session_id to reqctx --- internal/view/middleware/inject_reqctx.go | 3 ++- internal/view/reqctx/ctx.go | 21 +++++++++++++++------ internal/view/reqctx/ctx_test.go | 9 +++++++-- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/internal/view/middleware/inject_reqctx.go b/internal/view/middleware/inject_reqctx.go index e30afd9..37ffab7 100644 --- a/internal/view/middleware/inject_reqctx.go +++ b/internal/view/middleware/inject_reqctx.go @@ -26,7 +26,8 @@ func (m *Middleware) InjectReqctx(next echo.HandlerFunc) echo.HandlerFunc { } reqctx.SetCtx(c, reqctx.Ctx{ - IsAuthed: true, + IsAuthed: true, + SessionID: user.SessionID, User: dbgen.User{ ID: user.ID, Name: user.Name, diff --git a/internal/view/reqctx/ctx.go b/internal/view/reqctx/ctx.go index 19299df..175e9f2 100644 --- a/internal/view/reqctx/ctx.go +++ b/internal/view/reqctx/ctx.go @@ -2,41 +2,50 @@ package reqctx import ( "github.com/eduardolat/pgbackweb/internal/database/dbgen" + "github.com/google/uuid" "github.com/labstack/echo/v4" ) // Context keys to avoid typos const ( - isAuthedKey = "isAuthed" - userKey = "user" + isAuthedKey = "isAuthed" + sessionIDKey = "sessionId" + userKey = "user" ) // Ctx represents the values passed through a single request context. type Ctx struct { - IsAuthed bool - User dbgen.User + IsAuthed bool + SessionID uuid.UUID + User dbgen.User } // SetCtx inserts values into the Echo request context. func SetCtx(c echo.Context, ctx Ctx) { c.Set(isAuthedKey, ctx.IsAuthed) + c.Set(sessionIDKey, ctx.SessionID) c.Set(userKey, ctx.User) } // GetCtx retrieves values from the Echo request context. func GetCtx(c echo.Context) Ctx { var isAuthed bool + var sessionID uuid.UUID var user dbgen.User if ia, ok := c.Get(isAuthedKey).(bool); ok { isAuthed = ia } + if sid, ok := c.Get(sessionIDKey).(uuid.UUID); ok { + sessionID = sid + } if au, ok := c.Get(userKey).(dbgen.User); ok { user = au } return Ctx{ - IsAuthed: isAuthed, - User: user, + IsAuthed: isAuthed, + SessionID: sessionID, + User: user, } } diff --git a/internal/view/reqctx/ctx_test.go b/internal/view/reqctx/ctx_test.go index 95c4754..6e8864b 100644 --- a/internal/view/reqctx/ctx_test.go +++ b/internal/view/reqctx/ctx_test.go @@ -18,6 +18,8 @@ func TestCtxFuncs(t *testing.T) { Name: "John", } + testSessionID := uuid.New() + e := echo.New() req := httptest.NewRequest(http.MethodGet, "/", nil) rec := httptest.NewRecorder() @@ -25,8 +27,9 @@ func TestCtxFuncs(t *testing.T) { t.Run("Create authentication values in context", func(t *testing.T) { authData := Ctx{ - IsAuthed: true, - User: testUser, + IsAuthed: true, + SessionID: testSessionID, + User: testUser, } SetCtx(c, authData) @@ -34,6 +37,7 @@ func TestCtxFuncs(t *testing.T) { assert.True(t, auth.IsAuthed) assert.Equal(t, testUser, auth.User) + assert.Equal(t, testSessionID, auth.SessionID) assert.Equal(t, testUser.Email, auth.User.Email) }) @@ -46,6 +50,7 @@ func TestCtxFuncs(t *testing.T) { auth := GetCtx(c) assert.True(t, auth.IsAuthed) + assert.Equal(t, uuid.Nil, auth.SessionID) assert.Empty(t, auth.User) }) }