fix: move signin handler #181
This commit was merged in pull request #198.
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user