From cbf5b39294999a741e48272022c864b8ba5df6f1 Mon Sep 17 00:00:00 2001 From: Tim Wundenberg Date: Thu, 3 Oct 2024 23:23:16 +0200 Subject: [PATCH] fix: move signin handler #181 --- handler/auth.go | 26 +++++++++++++++++++++++++- handler/default.go | 2 +- handler/workout.go | 8 ++++---- service/auth.go | 22 +--------------------- 4 files changed, 31 insertions(+), 27 deletions(-) diff --git a/handler/auth.go b/handler/auth.go index 0c3f79c..9267fee 100644 --- a/handler/auth.go +++ b/handler/auth.go @@ -2,6 +2,8 @@ package handler import ( "me-fit/service" + "me-fit/template" + "me-fit/template/auth" "me-fit/types" "me-fit/utils" @@ -30,7 +32,7 @@ func NewHandlerAuth(db *sql.DB, service service.ServiceAuth, serverSettings *typ func (handler HandlerAuthImpl) handle(router *http.ServeMux) { // Don't use auth middleware for these routes, as it makes redirecting very difficult, if the mail is not yet verified - router.Handle("/auth/signin", service.HandleSignInPage(handler.db, handler.serverSettings)) + router.Handle("/auth/signin", handler.handleSignInPage()) router.Handle("/auth/signup", service.HandleSignUpPage(handler.db, handler.serverSettings)) router.Handle("/auth/verify", service.HandleSignUpVerifyPage(handler.db, handler.serverSettings)) // Hint for the user to verify their email router.Handle("/auth/delete-account", service.HandleDeleteAccountPage(handler.db, handler.serverSettings)) @@ -51,6 +53,28 @@ var ( securityWaitDuration = 250 * time.Millisecond ) +func (handler HandlerAuthImpl) handleSignInPage() http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + user := utils.GetUserFromSession(handler.db, r) + + if user == nil { + userComp := service.UserInfoComp(nil) + signIn := auth.SignInOrUpComp(true) + err := template.Layout(signIn, userComp, handler.serverSettings.Environment).Render(r.Context(), w) + + if err != nil { + utils.LogError("Failed to render sign in page", err) + http.Error(w, "Internal Server Error", http.StatusInternalServerError) + } + + } else if !user.EmailVerified { + utils.DoRedirect(w, r, "/auth/verify") + } else { + utils.DoRedirect(w, r, "/") + } + } +} + func (handler HandlerAuthImpl) handleSignIn() http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { user, err := utils.WaitMinimumTime(securityWaitDuration, func() (*service.User, error) { diff --git a/handler/default.go b/handler/default.go index 3412f1d..be45239 100644 --- a/handler/default.go +++ b/handler/default.go @@ -27,6 +27,6 @@ func GetHandler(d *sql.DB, serverSettings *types.ServerSettings) http.Handler { return middleware.Logging(middleware.EnableCors(serverSettings, router)) } -func auth(db *sql.DB, h http.Handler) http.Handler { +func authMiddleware(db *sql.DB, h http.Handler) http.Handler { return middleware.EnsureValidSession(db, h) } diff --git a/handler/workout.go b/handler/workout.go index 504529d..7252b2d 100644 --- a/handler/workout.go +++ b/handler/workout.go @@ -9,8 +9,8 @@ import ( ) func handleWorkout(db *sql.DB, router *http.ServeMux, serverSettings *types.ServerSettings) { - router.Handle("/workout", auth(db, service.HandleWorkoutPage(db, serverSettings))) - router.Handle("POST /api/workout", auth(db, service.HandleWorkoutNewComp(db))) - router.Handle("GET /api/workout", auth(db, service.HandleWorkoutGetComp(db))) - router.Handle("DELETE /api/workout/{id}", auth(db, service.HandleWorkoutDeleteComp(db))) + router.Handle("/workout", authMiddleware(db, service.HandleWorkoutPage(db, serverSettings))) + router.Handle("POST /api/workout", authMiddleware(db, service.HandleWorkoutNewComp(db))) + router.Handle("GET /api/workout", authMiddleware(db, service.HandleWorkoutGetComp(db))) + router.Handle("DELETE /api/workout/{id}", authMiddleware(db, service.HandleWorkoutDeleteComp(db))) } diff --git a/service/auth.go b/service/auth.go index 655b492..c9a8cd8 100644 --- a/service/auth.go +++ b/service/auth.go @@ -77,27 +77,7 @@ func (service ServiceAuthImpl) SignIn(email string, password string) (*User, err return NewUser(user), nil } -func HandleSignInPage(db *sql.DB, serverSettings *types.ServerSettings) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - user := utils.GetUserFromSession(db, r) - - if user == nil { - userComp := UserInfoComp(nil) - signIn := auth.SignInOrUpComp(true) - err := template.Layout(signIn, userComp, serverSettings.Environment).Render(r.Context(), w) - - if err != nil { - utils.LogError("Failed to render sign in page", err) - http.Error(w, "Internal Server Error", http.StatusInternalServerError) - } - - } else if !user.EmailVerified { - utils.DoRedirect(w, r, "/auth/verify") - } else { - utils.DoRedirect(w, r, "/") - } - } -} +// TODO func HandleSignUpPage(db *sql.DB, serverSettings *types.ServerSettings) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) {