package main import ( "me-fit/middleware" "me-fit/service" "me-fit/template/mail" "me-fit/utils" "database/sql" "net/http" ) func getHandler(db *sql.DB) http.Handler { var router = http.NewServeMux() if utils.Environment == "dev" { router.HandleFunc("/mail/", handleMails) } router.HandleFunc("/", service.HandleIndexAnd404(db)) // Serve static files (CSS, JS and images) router.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("./static/")))) router.Handle("/workout", auth(db, service.HandleWorkoutPage(db))) 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))) // 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(db)) router.Handle("/auth/signup", service.HandleSignUpPage(db)) router.Handle("/auth/verify", service.HandleSignUpVerifyPage(db)) // Hint for the user to verify their email router.Handle("/auth/delete-account", service.HandleDeleteAccountPage(db)) router.Handle("/auth/verify-email", service.HandleSignUpVerifyResponsePage(db)) // The link contained in the email router.Handle("/api/auth/signup", service.HandleSignUpComp(db)) router.Handle("/api/auth/signin", service.HandleSignInComp(db)) router.Handle("/api/auth/signout", service.HandleSignOutComp(db)) router.Handle("/api/auth/delete-account", service.HandleDeleteAccountComp(db)) router.Handle("/api/auth/verify-resend", service.HandleVerifyResendComp(db)) return middleware.Logging(middleware.EnableCors(router)) } func auth(db *sql.DB, h http.Handler) http.Handler { return middleware.EnsureValidSession(db, h) } func handleMails(w http.ResponseWriter, r *http.Request) { if r.URL.Path == "/mail/register" { mail.Register("test-code").Render(r.Context(), w) } }