From c67a7823a6a07d68de9675646d1a91ede729f0ac Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Tue, 10 Dec 2024 13:40:41 -0500 Subject: [PATCH] refactor: move session management to dedicated database module --- cmd/hway/main.go | 7 ++++++- .../database => database/sessions}/models.go | 2 +- .../database => database/sessions}/sqlite.go | 2 +- .../gateway/{session => context}/context.go | 8 ++++---- .../{session => context}/middleware.go | 8 ++++---- .../gateway/{session => context}/session.go | 6 +++--- internal/gateway/handlers/index/data.go | 8 ++++---- internal/gateway/handlers/register/data.go | 6 +++--- internal/gateway/routes.go | 14 ++++---------- internal/gateway/session/checks.go | 19 ------------------- .../vault/{session => context}/context.go | 2 +- .../vault/{session => context}/middleware.go | 2 +- .../vault/{session => context}/session.go | 2 +- internal/vault/handlers/feeds/handlers.go | 2 +- internal/vault/handlers/index/handlers.go | 4 +++- internal/vault/routes.go | 4 ++-- 16 files changed, 39 insertions(+), 57 deletions(-) rename internal/{gateway/database => database/sessions}/models.go (99%) rename internal/{gateway/database => database/sessions}/sqlite.go (98%) rename internal/gateway/{session => context}/context.go (95%) rename internal/gateway/{session => context}/middleware.go (87%) rename internal/gateway/{session => context}/session.go (97%) delete mode 100644 internal/gateway/session/checks.go rename internal/vault/{session => context}/context.go (99%) rename internal/vault/{session => context}/middleware.go (99%) rename internal/vault/{session => context}/session.go (98%) diff --git a/cmd/hway/main.go b/cmd/hway/main.go index 06aac4852..b9671abe7 100644 --- a/cmd/hway/main.go +++ b/cmd/hway/main.go @@ -10,6 +10,7 @@ import ( "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" "github.com/onsonr/sonr/crypto/ucan" + "github.com/onsonr/sonr/internal/database/sessions" "github.com/onsonr/sonr/internal/gateway" "github.com/onsonr/sonr/internal/gateway/config" "github.com/onsonr/sonr/pkg/common/ipfs" @@ -29,12 +30,16 @@ func setupServer(env config.Env) (*echo.Echo, error) { if err != nil { return nil, err } + db, err := sessions.InitDB(env) + if err != nil { + return nil, err + } e := echo.New() e.IPExtractor = echo.ExtractIPDirect() e.Use(middleware.Logger()) e.Use(middleware.Recover()) e.Use(producer.Middleware(ipc, ucan.ServicePermissions)) - gateway.RegisterRoutes(e, env) + gateway.RegisterRoutes(e, env, db) return e, nil } diff --git a/internal/gateway/database/models.go b/internal/database/sessions/models.go similarity index 99% rename from internal/gateway/database/models.go rename to internal/database/sessions/models.go index 578c244ec..f92e1a629 100644 --- a/internal/gateway/database/models.go +++ b/internal/database/sessions/models.go @@ -1,4 +1,4 @@ -package database +package sessions import ( "net/http" diff --git a/internal/gateway/database/sqlite.go b/internal/database/sessions/sqlite.go similarity index 98% rename from internal/gateway/database/sqlite.go rename to internal/database/sessions/sqlite.go index 945ad001d..ea8f40b75 100644 --- a/internal/gateway/database/sqlite.go +++ b/internal/database/sessions/sqlite.go @@ -1,4 +1,4 @@ -package database +package sessions import ( "os" diff --git a/internal/gateway/session/context.go b/internal/gateway/context/context.go similarity index 95% rename from internal/gateway/session/context.go rename to internal/gateway/context/context.go index 4f7dbc7f6..0d75c5683 100644 --- a/internal/gateway/session/context.go +++ b/internal/gateway/context/context.go @@ -1,11 +1,11 @@ -package session +package context import ( "regexp" "strings" "github.com/labstack/echo/v4" - "github.com/onsonr/sonr/internal/gateway/database" + "github.com/onsonr/sonr/internal/database/sessions" "github.com/onsonr/sonr/pkg/common" "github.com/segmentio/ksuid" ) @@ -15,12 +15,12 @@ func (s *HTTPContext) InitSession() error { sessionID := s.getOrCreateSessionID() // Try to load existing session - var sess database.Session + var sess sessions.Session result := s.db.Where("id = ?", sessionID).First(&sess) if result.Error != nil { // Create new session if not found bn, bv, arch, plat, platVer, model := extractBrowserInfo(s.Context) - sess = database.Session{ + sess = sessions.Session{ ID: sessionID, BrowserName: bn, BrowserVersion: bv, diff --git a/internal/gateway/session/middleware.go b/internal/gateway/context/middleware.go similarity index 87% rename from internal/gateway/session/middleware.go rename to internal/gateway/context/middleware.go index 1112a7f78..589d77a16 100644 --- a/internal/gateway/session/middleware.go +++ b/internal/gateway/context/middleware.go @@ -1,11 +1,11 @@ -package session +package context import ( "net/http" "github.com/labstack/echo/v4" + "github.com/onsonr/sonr/internal/database/sessions" "github.com/onsonr/sonr/internal/gateway/config" - "github.com/onsonr/sonr/internal/gateway/database" "gorm.io/gorm" ) @@ -26,7 +26,7 @@ func Middleware(db *gorm.DB, env config.Env) echo.MiddlewareFunc { type HTTPContext struct { echo.Context db *gorm.DB - sess *database.Session + sess *sessions.Session env config.Env } @@ -48,6 +48,6 @@ func NewHTTPContext(c echo.Context, db *gorm.DB) *HTTPContext { } // Session returns the current session -func (s *HTTPContext) Session() *database.Session { +func (s *HTTPContext) Session() *sessions.Session { return s.sess } diff --git a/internal/gateway/session/session.go b/internal/gateway/context/session.go similarity index 97% rename from internal/gateway/session/session.go rename to internal/gateway/context/session.go index 6043987ba..8b3982f78 100644 --- a/internal/gateway/session/session.go +++ b/internal/gateway/context/session.go @@ -1,8 +1,8 @@ -package session +package context import ( "github.com/labstack/echo/v4" - "github.com/onsonr/sonr/internal/gateway/database" + "github.com/onsonr/sonr/internal/database/sessions" ) // ╭───────────────────────────────────────────────────────╮ @@ -160,7 +160,7 @@ func HandleExists(c echo.Context, handle string) (bool, error) { } var count int64 - if err := sess.db.Model(&database.Session{}).Where("user_handle = ?", handle).Count(&count).Error; err != nil { + if err := sess.db.Model(&sessions.Session{}).Where("user_handle = ?", handle).Count(&count).Error; err != nil { return false, err } diff --git a/internal/gateway/handlers/index/data.go b/internal/gateway/handlers/index/data.go index 10d691bc3..09b3077a5 100644 --- a/internal/gateway/handlers/index/data.go +++ b/internal/gateway/handlers/index/data.go @@ -2,12 +2,12 @@ package index import ( "github.com/labstack/echo/v4" - "github.com/onsonr/sonr/internal/gateway/session" + "github.com/onsonr/sonr/internal/gateway/context" ) // Initial users have no authorization, user handle, or vault address func isInitial(c echo.Context) bool { - sess, err := session.Get(c) + sess, err := context.Get(c) if err != nil { return false } @@ -17,7 +17,7 @@ func isInitial(c echo.Context) bool { // Expired users have either a user handle or vault address func isExpired(c echo.Context) bool { - sess, err := session.Get(c) + sess, err := context.Get(c) if err != nil { return false } @@ -27,7 +27,7 @@ func isExpired(c echo.Context) bool { // Returning users have a valid authorization, and either a user handle or vault address func isReturning(c echo.Context) bool { - sess, err := session.Get(c) + sess, err := context.Get(c) if err != nil { return false } diff --git a/internal/gateway/handlers/register/data.go b/internal/gateway/handlers/register/data.go index 8172118b1..475dbf9d8 100644 --- a/internal/gateway/handlers/register/data.go +++ b/internal/gateway/handlers/register/data.go @@ -6,7 +6,7 @@ import ( "net/http" "github.com/labstack/echo/v4" - "github.com/onsonr/sonr/internal/gateway/database" + "github.com/onsonr/sonr/internal/database/sessions" ) type CreateProfileData struct { @@ -35,8 +35,8 @@ func (d CreateProfileData) IsHumanLabel() string { return fmt.Sprintf("What is %d + %d?", d.FirstNumber, d.LastNumber) } -func extractCredentialDescriptor(jsonString string) (*database.Credential, error) { - cred := &database.Credential{} +func extractCredentialDescriptor(jsonString string) (*sessions.Credential, error) { + cred := &sessions.Credential{} // Unmarshal the credential JSON if err := json.Unmarshal([]byte(jsonString), cred); err != nil { return nil, echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("invalid credential format: %v", err)) diff --git a/internal/gateway/routes.go b/internal/gateway/routes.go index 6155d24bf..3c4190222 100644 --- a/internal/gateway/routes.go +++ b/internal/gateway/routes.go @@ -4,25 +4,19 @@ package gateway import ( "github.com/labstack/echo/v4" "github.com/onsonr/sonr/internal/gateway/config" - "github.com/onsonr/sonr/internal/gateway/database" + "github.com/onsonr/sonr/internal/gateway/context" "github.com/onsonr/sonr/internal/gateway/handlers/index" "github.com/onsonr/sonr/internal/gateway/handlers/register" - "github.com/onsonr/sonr/internal/gateway/session" "github.com/onsonr/sonr/pkg/common/response" + "gorm.io/gorm" ) -func RegisterRoutes(e *echo.Echo, env config.Env) error { +func RegisterRoutes(e *echo.Echo, env config.Env, db *gorm.DB) error { // Custom error handler for gateway e.HTTPErrorHandler = response.RedirectOnError("http://localhost:3000") - // Initialize database - db, err := database.InitDB(env) - if err != nil { - return err - } - // Inject session middleware with database connection - e.Use(session.Middleware(db, env)) + e.Use(context.Middleware(db, env)) // Register routes e.GET("/", index.Handler) diff --git a/internal/gateway/session/checks.go b/internal/gateway/session/checks.go deleted file mode 100644 index 947e44c08..000000000 --- a/internal/gateway/session/checks.go +++ /dev/null @@ -1,19 +0,0 @@ -package session - -import "github.com/labstack/echo/v4" - -func IsUniqueHandle(c echo.Context, handle string) bool { - return true -} - -func IsValidFirstName(c echo.Context, firstName string) bool { - return true -} - -func IsValidLastInitial(c echo.Context, lastInitial string) bool { - return true -} - -func IsHuman(c echo.Context, sum int) bool { - return true -} diff --git a/internal/vault/session/context.go b/internal/vault/context/context.go similarity index 99% rename from internal/vault/session/context.go rename to internal/vault/context/context.go index 460998fe3..e959d8f71 100644 --- a/internal/vault/session/context.go +++ b/internal/vault/context/context.go @@ -1,4 +1,4 @@ -package session +package context import ( "regexp" diff --git a/internal/vault/session/middleware.go b/internal/vault/context/middleware.go similarity index 99% rename from internal/vault/session/middleware.go rename to internal/vault/context/middleware.go index 5f2fb701a..b8fb09baa 100644 --- a/internal/vault/session/middleware.go +++ b/internal/vault/context/middleware.go @@ -1,4 +1,4 @@ -package session +package context import ( "encoding/json" diff --git a/internal/vault/session/session.go b/internal/vault/context/session.go similarity index 98% rename from internal/vault/session/session.go rename to internal/vault/context/session.go index 9e05a9181..83fbbcb8d 100644 --- a/internal/vault/session/session.go +++ b/internal/vault/context/session.go @@ -1,4 +1,4 @@ -package session +package context import ( "github.com/labstack/echo/v4" diff --git a/internal/vault/handlers/feeds/handlers.go b/internal/vault/handlers/feeds/handlers.go index 8f61160dd..a978d7f05 100644 --- a/internal/vault/handlers/feeds/handlers.go +++ b/internal/vault/handlers/feeds/handlers.go @@ -6,6 +6,6 @@ import ( "github.com/labstack/echo/v4" ) -func HandleDash(c echo.Context) error { +func Handler(c echo.Context) error { return c.Render(http.StatusOK, "index.templ", nil) } diff --git a/internal/vault/handlers/index/handlers.go b/internal/vault/handlers/index/handlers.go index b322f46b0..c307fa413 100644 --- a/internal/vault/handlers/index/handlers.go +++ b/internal/vault/handlers/index/handlers.go @@ -7,10 +7,12 @@ import ( session "github.com/onsonr/sonr/internal/vault/session" ) -func HandleIndex(c echo.Context) error { +func Handler(c echo.Context) error { + // TODO: Create views if isInitial(c) { // return response.TemplEcho(c, index.InitialView()) } + // TODO: Add authorization check if isExpired(c) { // return response.TemplEcho(c, index.ReturningView()) } diff --git a/internal/vault/routes.go b/internal/vault/routes.go index bc3759ea5..f50cdc646 100644 --- a/internal/vault/routes.go +++ b/internal/vault/routes.go @@ -7,11 +7,11 @@ package vault import ( "github.com/labstack/echo/v4" - session "github.com/onsonr/sonr/internal/vault/session" + "github.com/onsonr/sonr/internal/vault/context" "github.com/onsonr/sonr/internal/vault/types" ) // RegisterRoutes registers the Decentralized Web Node API routes. func RegisterRoutes(e *echo.Echo, config *types.Config) { - e.Use(session.Middleware(config)) + e.Use(context.Middleware(config)) }