dkforest

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

commit a831a9f7ba853ec18ccf93f7fc95755b99cee978
parent da3c0d97c212cbe1b3e61d472df611e63a7b27a7
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Sat, 25 Mar 2023 13:19:02 -0700

improve captcha template

Diffstat:
Mpkg/web/handlers/data.go | 99+++++++++++++++++++++++++++++++++++++++++--------------------------------------
Mpkg/web/handlers/handlers.go | 2+-
Mpkg/web/public/views/pages/captcha-tmpl.gohtml | 3+++
Mpkg/web/web.go | 2+-
4 files changed, 57 insertions(+), 49 deletions(-)

diff --git a/pkg/web/handlers/data.go b/pkg/web/handlers/data.go @@ -24,16 +24,17 @@ type homeAttackData struct { } type loginData struct { - Autofocus int64 - Username string - Password string - Error string - HomeUsersList bool - CaptchaRequired bool - ErrCaptcha string - CaptchaID string - CaptchaImg string - Online []managers.UserInfo + Autofocus int64 + Username string + Password string + Error string + HomeUsersList bool + CaptchaRequired bool + ErrCaptcha string + CaptchaID string + CaptchaImg string + CaptchaAnswerImg string + Online []managers.UserInfo } type sessionsTwoFactorData struct { @@ -73,6 +74,7 @@ type signupData struct { Password string RePassword string CaptchaImg string + CaptchaAnswerImg string CaptchaID string Captcha string CaptchaSec int64 @@ -85,6 +87,7 @@ type signupData struct { type byteRoadChallengeData struct { ActiveTab string CaptchaImg string + CaptchaAnswerImg string CaptchaID string Captcha string Username string @@ -111,6 +114,7 @@ type forgotPasswordData struct { Captcha string CaptchaID string CaptchaImg string + CaptchaAnswerImg string ErrCaptcha string GpgMode bool ToBeSignedMessage string @@ -371,6 +375,7 @@ type chatData struct { IsSubscribed bool CaptchaID string CaptchaImg string + CaptchaAnswerImg string ErrGuestUsername string ErrCaptcha string TutoSecs int64 @@ -399,45 +404,49 @@ type roomChatSettingsData struct { } type chatCreateRoomData struct { - RoomName string - Password string - IsListed bool - IsEphemeral bool - Error string - ErrorRoomName string - CaptchaImg string - CaptchaID string - Captcha string - ErrCaptcha string + RoomName string + Password string + IsListed bool + IsEphemeral bool + Error string + ErrorRoomName string + CaptchaImg string + CaptchaAnswerImg string + CaptchaID string + Captcha string + ErrCaptcha string } type captchaData struct { - Ts int64 - Seed int64 - CaptchaSec int64 - Frames []string - CaptchaImg string - CaptchaID string - ShowAnswer bool - Answer string - Captcha string - Success string - Error string + Ts int64 + Seed int64 + CaptchaSec int64 + Frames []string + CaptchaImg string + CaptchaAnswerImg string + CaptchaID string + ShowAnswer bool + Answer string + Captcha string + Success string + Error string } type captchaRequiredData struct { CaptchaDescription string CaptchaID string CaptchaImg string + CaptchaAnswerImg string ErrCaptcha string } type bhcData struct { - CaptchaImg string - CaptchaID string - Captcha string - Success string - Error string + CaptchaImg string + CaptchaAnswerImg string + CaptchaID string + Captcha string + Success string + Error string } type adminData struct { @@ -844,17 +853,13 @@ type adminGistsData struct { } type adminCreateGistData struct { - ActiveTab string - IsEdit bool - Name string - Content string - Password string - Error string - ErrorName string - CaptchaImg string - CaptchaID string - Captcha string - ErrCaptcha string + ActiveTab string + IsEdit bool + Name string + Content string + Password string + Error string + ErrorName string } type publicProfileData struct { diff --git a/pkg/web/handlers/handlers.go b/pkg/web/handlers/handlers.go @@ -3879,7 +3879,7 @@ func CaptchaHandler(c echo.Context) error { data.ShowAnswer = true } setCaptcha := func(seed int64) { - data.CaptchaID, data.Answer, data.CaptchaImg, _ = captcha.NewWithSolution(seed) + data.CaptchaID, data.Answer, data.CaptchaImg, data.CaptchaAnswerImg = captcha.NewWithSolution(seed) } data.Seed = time.Now().UnixNano() data.Ts = time.Now().UnixMilli() diff --git a/pkg/web/public/views/pages/captcha-tmpl.gohtml b/pkg/web/public/views/pages/captcha-tmpl.gohtml @@ -9,6 +9,9 @@ </style> <div> <img src="data:image/png;base64,{{ .Data.CaptchaImg }}" alt="captcha" class="captcha-img" /> + {{ if .Data.CaptchaAnswerImg }} + <img src="data:image/png;base64,{{ .Data.CaptchaAnswerImg }}" alt="captcha answer" class="captcha-img" /> + {{ end }} <div><a href="/captcha-help">Need help to solve the captcha?</a></div> </div> {{ end }} \ No newline at end of file diff --git a/pkg/web/web.go b/pkg/web/web.go @@ -209,7 +209,7 @@ func getMainServer(db *database.DkfDB, i18nBundle *i18n.Bundle, renderer *tmp.Te authGroup.GET("/chat", handlers.ChatHandler) authGroup.POST("/chat", handlers.ChatHandler, middlewares.AuthRateLimitMiddleware(1*time.Second, 2)) authGroup.GET("/chat/help", handlers.ChatHelpHandler) - authGroup.GET("/chat/create-room", handlers.ChatCreateRoomHandler) + authGroup.GET("/chat/create-room", handlers.ChatCreateRoomHandler, middlewares.AuthRateLimitMiddleware(1*time.Second, 2)) authGroup.POST("/chat/create-room", handlers.ChatCreateRoomHandler, middlewares.AuthRateLimitMiddleware(1*time.Second, 2)) authGroup.GET("/chat/:roomName/archive", handlers.ChatArchiveHandler) authGroup.GET("/chat/:roomName/delete", handlers.ChatDeleteHandler)