fix: move signin handler #181

This commit is contained in:
2024-10-03 23:23:16 +02:00
parent cc3747b226
commit cbf5b39294
4 changed files with 31 additions and 27 deletions

View File

@@ -2,6 +2,8 @@ package handler
import ( import (
"me-fit/service" "me-fit/service"
"me-fit/template"
"me-fit/template/auth"
"me-fit/types" "me-fit/types"
"me-fit/utils" "me-fit/utils"
@@ -30,7 +32,7 @@ func NewHandlerAuth(db *sql.DB, service service.ServiceAuth, serverSettings *typ
func (handler HandlerAuthImpl) handle(router *http.ServeMux) { 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 // 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/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/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)) router.Handle("/auth/delete-account", service.HandleDeleteAccountPage(handler.db, handler.serverSettings))
@@ -51,6 +53,28 @@ var (
securityWaitDuration = 250 * time.Millisecond 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 { func (handler HandlerAuthImpl) handleSignIn() http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) {
user, err := utils.WaitMinimumTime(securityWaitDuration, func() (*service.User, error) { user, err := utils.WaitMinimumTime(securityWaitDuration, func() (*service.User, error) {

View File

@@ -27,6 +27,6 @@ func GetHandler(d *sql.DB, serverSettings *types.ServerSettings) http.Handler {
return middleware.Logging(middleware.EnableCors(serverSettings, router)) 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) return middleware.EnsureValidSession(db, h)
} }

View File

@@ -9,8 +9,8 @@ import (
) )
func handleWorkout(db *sql.DB, router *http.ServeMux, serverSettings *types.ServerSettings) { func handleWorkout(db *sql.DB, router *http.ServeMux, serverSettings *types.ServerSettings) {
router.Handle("/workout", auth(db, service.HandleWorkoutPage(db, serverSettings))) router.Handle("/workout", authMiddleware(db, service.HandleWorkoutPage(db, serverSettings)))
router.Handle("POST /api/workout", auth(db, service.HandleWorkoutNewComp(db))) router.Handle("POST /api/workout", authMiddleware(db, service.HandleWorkoutNewComp(db)))
router.Handle("GET /api/workout", auth(db, service.HandleWorkoutGetComp(db))) router.Handle("GET /api/workout", authMiddleware(db, service.HandleWorkoutGetComp(db)))
router.Handle("DELETE /api/workout/{id}", auth(db, service.HandleWorkoutDeleteComp(db))) router.Handle("DELETE /api/workout/{id}", authMiddleware(db, service.HandleWorkoutDeleteComp(db)))
} }

View File

@@ -77,27 +77,7 @@ func (service ServiceAuthImpl) SignIn(email string, password string) (*User, err
return NewUser(user), nil return NewUser(user), nil
} }
func HandleSignInPage(db *sql.DB, serverSettings *types.ServerSettings) http.HandlerFunc { // TODO
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, "/")
}
}
}
func HandleSignUpPage(db *sql.DB, serverSettings *types.ServerSettings) http.HandlerFunc { func HandleSignUpPage(db *sql.DB, serverSettings *types.ServerSettings) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) {