refactor: replace session key strings with consts
Define KeyPlayerID, KeyUserID, and KeyNickname in the sessions package and use them across all handlers to avoid duplicated magic strings.
This commit is contained in:
@@ -11,6 +11,7 @@ import (
|
|||||||
"github.com/ryanhamamura/games/auth"
|
"github.com/ryanhamamura/games/auth"
|
||||||
"github.com/ryanhamamura/games/db/repository"
|
"github.com/ryanhamamura/games/db/repository"
|
||||||
"github.com/ryanhamamura/games/features/auth/pages"
|
"github.com/ryanhamamura/games/features/auth/pages"
|
||||||
|
appsessions "github.com/ryanhamamura/games/sessions"
|
||||||
)
|
)
|
||||||
|
|
||||||
type LoginSignals struct {
|
type LoginSignals struct {
|
||||||
@@ -65,9 +66,9 @@ func HandleLogin(queries *repository.Queries, sessions *scs.SessionManager) http
|
|||||||
}
|
}
|
||||||
|
|
||||||
sessions.RenewToken(r.Context()) //nolint:errcheck
|
sessions.RenewToken(r.Context()) //nolint:errcheck
|
||||||
sessions.Put(r.Context(), "user_id", user.ID)
|
sessions.Put(r.Context(), appsessions.KeyUserID, user.ID)
|
||||||
sessions.Put(r.Context(), "username", user.Username)
|
sessions.Put(r.Context(), "username", user.Username)
|
||||||
sessions.Put(r.Context(), "nickname", user.Username)
|
sessions.Put(r.Context(), appsessions.KeyNickname, user.Username)
|
||||||
|
|
||||||
redirectURL := "/"
|
redirectURL := "/"
|
||||||
if returnURL := sessions.GetString(r.Context(), "return_url"); returnURL != "" {
|
if returnURL := sessions.GetString(r.Context(), "return_url"); returnURL != "" {
|
||||||
@@ -119,9 +120,9 @@ func HandleRegister(queries *repository.Queries, sessions *scs.SessionManager) h
|
|||||||
}
|
}
|
||||||
|
|
||||||
sessions.RenewToken(r.Context()) //nolint:errcheck
|
sessions.RenewToken(r.Context()) //nolint:errcheck
|
||||||
sessions.Put(r.Context(), "user_id", user.ID)
|
sessions.Put(r.Context(), appsessions.KeyUserID, user.ID)
|
||||||
sessions.Put(r.Context(), "username", user.Username)
|
sessions.Put(r.Context(), "username", user.Username)
|
||||||
sessions.Put(r.Context(), "nickname", user.Username)
|
sessions.Put(r.Context(), appsessions.KeyNickname, user.Username)
|
||||||
|
|
||||||
redirectURL := "/"
|
redirectURL := "/"
|
||||||
if returnURL := sessions.GetString(r.Context(), "return_url"); returnURL != "" {
|
if returnURL := sessions.GetString(r.Context(), "return_url"); returnURL != "" {
|
||||||
|
|||||||
@@ -266,7 +266,7 @@ func HandleSetNickname(store *connect4.Store, sm *scs.SessionManager) http.Handl
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
sm.Put(r.Context(), "nickname", signals.Nickname)
|
sm.Put(r.Context(), sessions.KeyNickname, signals.Nickname)
|
||||||
|
|
||||||
playerID := sessions.GetPlayerID(sm, r)
|
playerID := sessions.GetPlayerID(sm, r)
|
||||||
userID := sessions.GetUserID(sm, r)
|
userID := sessions.GetUserID(sm, r)
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import (
|
|||||||
"github.com/ryanhamamura/games/db/repository"
|
"github.com/ryanhamamura/games/db/repository"
|
||||||
lobbycomponents "github.com/ryanhamamura/games/features/lobby/components"
|
lobbycomponents "github.com/ryanhamamura/games/features/lobby/components"
|
||||||
"github.com/ryanhamamura/games/features/lobby/pages"
|
"github.com/ryanhamamura/games/features/lobby/pages"
|
||||||
|
appsessions "github.com/ryanhamamura/games/sessions"
|
||||||
"github.com/ryanhamamura/games/snake"
|
"github.com/ryanhamamura/games/snake"
|
||||||
|
|
||||||
"github.com/alexedwards/scs/v2"
|
"github.com/alexedwards/scs/v2"
|
||||||
@@ -21,7 +22,7 @@ import (
|
|||||||
// HandleLobbyPage renders the main lobby page with active games for logged-in users.
|
// HandleLobbyPage renders the main lobby page with active games for logged-in users.
|
||||||
func HandleLobbyPage(queries *repository.Queries, sessions *scs.SessionManager, snakeStore *snake.SnakeStore) http.HandlerFunc {
|
func HandleLobbyPage(queries *repository.Queries, sessions *scs.SessionManager, snakeStore *snake.SnakeStore) http.HandlerFunc {
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
userID := sessions.GetString(r.Context(), "user_id")
|
userID := sessions.GetString(r.Context(), appsessions.KeyUserID)
|
||||||
username := sessions.GetString(r.Context(), "username")
|
username := sessions.GetString(r.Context(), "username")
|
||||||
isLoggedIn := userID != ""
|
isLoggedIn := userID != ""
|
||||||
|
|
||||||
@@ -95,7 +96,7 @@ func HandleCreateGame(store *connect4.Store, sessions *scs.SessionManager) http.
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
sessions.Put(r.Context(), "nickname", signals.Nickname)
|
sessions.Put(r.Context(), appsessions.KeyNickname, signals.Nickname)
|
||||||
|
|
||||||
gi := store.Create()
|
gi := store.Create()
|
||||||
sse := datastar.NewSSE(w, r)
|
sse := datastar.NewSSE(w, r)
|
||||||
@@ -137,7 +138,7 @@ func HandleCreateSnakeGame(snakeStore *snake.SnakeStore, sessions *scs.SessionMa
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
sessions.Put(r.Context(), "nickname", signals.Nickname)
|
sessions.Put(r.Context(), appsessions.KeyNickname, signals.Nickname)
|
||||||
|
|
||||||
mode := snake.ModeMultiplayer
|
mode := snake.ModeMultiplayer
|
||||||
if r.URL.Query().Get("mode") == "solo" {
|
if r.URL.Query().Get("mode") == "solo" {
|
||||||
|
|||||||
@@ -277,7 +277,7 @@ func HandleSetNickname(snakeStore *snake.SnakeStore, sm *scs.SessionManager) htt
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
sm.Put(r.Context(), "nickname", signals.Nickname)
|
sm.Put(r.Context(), sessions.KeyNickname, signals.Nickname)
|
||||||
|
|
||||||
playerID := sessions.GetPlayerID(sm, r)
|
playerID := sessions.GetPlayerID(sm, r)
|
||||||
userID := sessions.GetUserID(sm, r)
|
userID := sessions.GetUserID(sm, r)
|
||||||
|
|||||||
@@ -14,6 +14,13 @@ import (
|
|||||||
"github.com/alexedwards/scs/v2"
|
"github.com/alexedwards/scs/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Session key names.
|
||||||
|
const (
|
||||||
|
KeyPlayerID = "player_id"
|
||||||
|
KeyUserID = "user_id"
|
||||||
|
KeyNickname = "nickname"
|
||||||
|
)
|
||||||
|
|
||||||
// SetupSessionManager creates a configured session manager backed by SQLite.
|
// SetupSessionManager creates a configured session manager backed by SQLite.
|
||||||
// Returns the manager and a cleanup function the caller should defer.
|
// Returns the manager and a cleanup function the caller should defer.
|
||||||
func SetupSessionManager(db *sql.DB) (*scs.SessionManager, func()) {
|
func SetupSessionManager(db *sql.DB) (*scs.SessionManager, func()) {
|
||||||
@@ -38,12 +45,12 @@ func SetupSessionManager(db *sql.DB) (*scs.SessionManager, func()) {
|
|||||||
// Authenticated users get their user UUID; guests get a random ID that
|
// Authenticated users get their user UUID; guests get a random ID that
|
||||||
// is generated and persisted on first access.
|
// is generated and persisted on first access.
|
||||||
func GetPlayerID(sm *scs.SessionManager, r *http.Request) player.ID {
|
func GetPlayerID(sm *scs.SessionManager, r *http.Request) player.ID {
|
||||||
pid := sm.GetString(r.Context(), "player_id")
|
pid := sm.GetString(r.Context(), KeyPlayerID)
|
||||||
if pid == "" {
|
if pid == "" {
|
||||||
pid = player.GenerateID(8)
|
pid = player.GenerateID(8)
|
||||||
sm.Put(r.Context(), "player_id", pid)
|
sm.Put(r.Context(), KeyPlayerID, pid)
|
||||||
}
|
}
|
||||||
if userID := sm.GetString(r.Context(), "user_id"); userID != "" {
|
if userID := sm.GetString(r.Context(), KeyUserID); userID != "" {
|
||||||
return player.ID(userID)
|
return player.ID(userID)
|
||||||
}
|
}
|
||||||
return player.ID(pid)
|
return player.ID(pid)
|
||||||
@@ -51,10 +58,10 @@ func GetPlayerID(sm *scs.SessionManager, r *http.Request) player.ID {
|
|||||||
|
|
||||||
// GetUserID returns the authenticated user's UUID, or empty string for guests.
|
// GetUserID returns the authenticated user's UUID, or empty string for guests.
|
||||||
func GetUserID(sm *scs.SessionManager, r *http.Request) string {
|
func GetUserID(sm *scs.SessionManager, r *http.Request) string {
|
||||||
return sm.GetString(r.Context(), "user_id")
|
return sm.GetString(r.Context(), KeyUserID)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetNickname returns the player's display name from the session.
|
// GetNickname returns the player's display name from the session.
|
||||||
func GetNickname(sm *scs.SessionManager, r *http.Request) string {
|
func GetNickname(sm *scs.SessionManager, r *http.Request) string {
|
||||||
return sm.GetString(r.Context(), "nickname")
|
return sm.GetString(r.Context(), KeyNickname)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user