dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

commit cb1108c936e85348e2b39bd49c8b82d830e8a54f
parent a7b29df7f80e6069c08ec1cf232fb626fa9a44ec
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Sat,  3 Dec 2022 20:07:45 -0500

NoAuth middleware to redirect authenticated users on endpoint that needs no auth

Diffstat:
Mpkg/web/handlers/handlers.go | 24------------------------
Mpkg/web/middlewares/middlewares.go | 10++++++++++
Mpkg/web/web.go | 44+++++++++++++++++++++-----------------------
3 files changed, 31 insertions(+), 47 deletions(-)

diff --git a/pkg/web/handlers/handlers.go b/pkg/web/handlers/handlers.go @@ -207,12 +207,6 @@ func LoginHandler(c echo.Context) error { return c.NoContent(http.StatusNotFound) } - // If already logged in, redirect. - authUser := c.Get("authUser").(*database.User) - if authUser != nil { - return c.Redirect(http.StatusFound, "/") - } - // If first use, redirect. if config.IsFirstUse.IsTrue() { return c.Redirect(http.StatusFound, "/") @@ -235,12 +229,6 @@ func LoginAttackHandler(c echo.Context) error { return c.NoContent(http.StatusNotFound) } - // If already logged in, redirect. - authUser := c.Get("authUser").(*database.User) - if authUser != nil { - return c.Redirect(http.StatusFound, "/") - } - // If first use, redirect. if config.IsFirstUse.IsTrue() { return c.Redirect(http.StatusFound, "/") @@ -688,12 +676,6 @@ func SignupAttackHandler(c echo.Context) error { return c.NoContent(http.StatusNotFound) } - // If already logged in, redirect. - authUser := c.Get("authUser").(*database.User) - if authUser != nil { - return c.Redirect(http.StatusFound, "/") - } - // If first use, redirect. if config.IsFirstUse.IsTrue() { return c.Redirect(http.StatusFound, "/") @@ -1049,12 +1031,6 @@ func generateCaptchaCssFrames(captchaSec int64) (frames []string) { // ForgotPasswordHandler ... func ForgotPasswordHandler(c echo.Context) error { - // If already logged in, redirect. - authUser := c.Get("authUser").(*database.User) - if authUser != nil { - return c.Redirect(http.StatusFound, "/") - } - var data forgotPasswordData data.Step = 1 diff --git a/pkg/web/middlewares/middlewares.go b/pkg/web/middlewares/middlewares.go @@ -462,6 +462,16 @@ func MaybeAuthMiddleware(next echo.HandlerFunc) echo.HandlerFunc { } } +// NoAuthMiddleware redirect to / is the user is authenticated +func NoAuthMiddleware(next echo.HandlerFunc) echo.HandlerFunc { + return func(c echo.Context) error { + if user := c.Get("authUser").(*database.User); user != nil { + return c.Redirect(http.StatusFound, "/") + } + return next(c) + } +} + // SecureMiddleware ... var SecureMiddleware = middleware.SecureWithConfig(middleware.SecureConfig{ XSSProtection: "1; mode=block", diff --git a/pkg/web/web.go b/pkg/web/web.go @@ -66,31 +66,29 @@ func getMainServer() echo.HandlerFunc { e.Use(middlewares.AprilFoolMiddleware()) e.GET("/", handlers.HomeHandler, middlewares.CircuitRateLimitMiddleware(15*time.Second, 4, true)) e.POST("/", handlers.HomeHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false)) - e.GET("/login", handlers.LoginHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false)) - e.POST("/login", handlers.LoginHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false)) - e.GET("/login/:loginToken", handlers.LoginAttackHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false)) - e.POST("/login/:loginToken", handlers.LoginAttackHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 2, false)) - e.GET("/sessions/gpg-two-factor", handlers.SessionsGpgTwoFactorHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false)) - e.POST("/sessions/gpg-two-factor", handlers.SessionsGpgTwoFactorHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 2, false)) - e.GET("/sessions/gpg-sign-two-factor", handlers.SessionsGpgSignTwoFactorHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false)) - e.POST("/sessions/gpg-sign-two-factor", handlers.SessionsGpgSignTwoFactorHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 2, false)) - e.GET("/sessions/two-factor", handlers.SessionsTwoFactorHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false)) - e.POST("/sessions/two-factor", handlers.SessionsTwoFactorHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 2, false)) - e.GET("/sessions/two-factor/recovery", handlers.SessionsTwoFactorRecoveryHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false)) - e.POST("/sessions/two-factor/recovery", handlers.SessionsTwoFactorRecoveryHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 2, false)) - e.GET("/signup", handlers.SignupHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 5, false)) - e.POST("/signup", handlers.SignupHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false)) + e.GET("/login", handlers.LoginHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false), middlewares.NoAuthMiddleware) + e.POST("/login", handlers.LoginHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false), middlewares.NoAuthMiddleware) + e.GET("/login/:loginToken", handlers.LoginAttackHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false), middlewares.NoAuthMiddleware) + e.POST("/login/:loginToken", handlers.LoginAttackHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 2, false), middlewares.NoAuthMiddleware) + e.GET("/sessions/gpg-two-factor", handlers.SessionsGpgTwoFactorHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false), middlewares.NoAuthMiddleware) + e.POST("/sessions/gpg-two-factor", handlers.SessionsGpgTwoFactorHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 2, false), middlewares.NoAuthMiddleware) + e.GET("/sessions/gpg-sign-two-factor", handlers.SessionsGpgSignTwoFactorHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false), middlewares.NoAuthMiddleware) + e.POST("/sessions/gpg-sign-two-factor", handlers.SessionsGpgSignTwoFactorHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 2, false), middlewares.NoAuthMiddleware) + e.GET("/sessions/two-factor", handlers.SessionsTwoFactorHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false), middlewares.NoAuthMiddleware) + e.POST("/sessions/two-factor", handlers.SessionsTwoFactorHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 2, false), middlewares.NoAuthMiddleware) + e.GET("/sessions/two-factor/recovery", handlers.SessionsTwoFactorRecoveryHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false), middlewares.NoAuthMiddleware) + e.POST("/sessions/two-factor/recovery", handlers.SessionsTwoFactorRecoveryHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 2, false), middlewares.NoAuthMiddleware) + e.GET("/signup", handlers.SignupHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 5, false), middlewares.NoAuthMiddleware) + e.POST("/signup", handlers.SignupHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false), middlewares.NoAuthMiddleware) e.GET("/public/css/:signupToken/signup.css", handlers.SignupCss, middlewares.CircuitRateLimitMiddleware(15*time.Second, 4, false)) e.GET("/public/img/:signupToken/:signal/:data", handlers.SignalCss, middlewares.CircuitRateLimitMiddleware(15*time.Second, 4, false)) - e.GET("/signup/invitation", handlers.SignupInvitationHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 5, false)) - e.GET("/signup/invitation/:invitationToken", handlers.SignupInvitationHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 5, false)) - e.POST("/signup/invitation/:invitationToken", handlers.SignupInvitationHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 5, false)) - e.GET("/signup/:signupToken", handlers.SignupAttackHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 5, false)) - e.POST("/signup/:signupToken", handlers.SignupAttackHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 2, false)) - e.GET("/forgot-password", handlers.ForgotPasswordHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false)) - e.POST("/forgot-password", handlers.ForgotPasswordHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 2, false)) - e.GET("/forgot-password/:token", handlers.ForgotPasswordResetHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false)) - e.POST("/forgot-password/:token", handlers.ForgotPasswordResetHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 2, false)) + e.GET("/signup/invitation", handlers.SignupInvitationHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 5, false), middlewares.NoAuthMiddleware) + e.GET("/signup/invitation/:invitationToken", handlers.SignupInvitationHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 5, false), middlewares.NoAuthMiddleware) + e.POST("/signup/invitation/:invitationToken", handlers.SignupInvitationHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 5, false), middlewares.NoAuthMiddleware) + e.GET("/signup/:signupToken", handlers.SignupAttackHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 5, false), middlewares.NoAuthMiddleware) + e.POST("/signup/:signupToken", handlers.SignupAttackHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 2, false), middlewares.NoAuthMiddleware) + e.GET("/forgot-password", handlers.ForgotPasswordHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false), middlewares.NoAuthMiddleware) + e.POST("/forgot-password", handlers.ForgotPasswordHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 2, false), middlewares.NoAuthMiddleware) e.GET("/bhcli", handlers.BhcliHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 5, false)) e.GET("/torchess", handlers.TorchessHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 5, false)) e.GET("/captcha-help", handlers.CaptchaHelpHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 5, false))