aboutsummaryrefslogtreecommitdiff
path: root/controllers/account.go
diff options
context:
space:
mode:
Diffstat (limited to 'controllers/account.go')
-rw-r--r--controllers/account.go48
1 files changed, 48 insertions, 0 deletions
diff --git a/controllers/account.go b/controllers/account.go
new file mode 100644
index 0000000..86b3ea4
--- /dev/null
+++ b/controllers/account.go
@@ -0,0 +1,48 @@
+package controllers
+
+import (
+ "imageboard/database"
+ "imageboard/models"
+ "imageboard/utils/auth"
+ "imageboard/utils/shortcuts"
+
+ "github.com/gofiber/fiber/v2"
+)
+
+func renderVerifyEmailError(ctx *fiber.Ctx, errorMsg string, statusCode int) error {
+ return shortcuts.RenderWithStatus(ctx, TEMPLATE_VERIFY_EMAIL, fiber.Map{
+ "Error": errorMsg,
+ }, statusCode)
+}
+
+func VerifyEmailController(ctx *fiber.Ctx) error {
+ ctx.Locals("Title", PT_VERIFY_EMAIL)
+ if auth.IsAuthenticated(ctx) {
+ return ctx.Redirect(auth.GetRedirectURL(ctx), fiber.StatusSeeOther)
+ }
+ token := ctx.Query("token")
+ if token == "" {
+ return renderVerifyEmailError(ctx, ERR_VERIFY_EMAIL_MISSING_TOKEN, fiber.StatusBadRequest)
+ }
+
+ emailToken, err := database.VerifyToken(token, models.EmailTokenTypeVerification)
+ if err != nil {
+ return renderVerifyEmailError(ctx, ERR_VERIFY_EMAIL_INVALID_OR_EXPIRED_TOKEN, fiber.StatusBadRequest)
+ }
+
+ user, err := database.GetUserByID(emailToken.UserID)
+ if err != nil {
+ return renderVerifyEmailError(ctx, ERR_VERIFY_EMAIL_USER_NOT_FOUND, fiber.StatusInternalServerError)
+ }
+
+ user.Activate()
+ if err := database.DB.Save(user).Error; err != nil {
+ return renderVerifyEmailError(ctx, ERR_VERIFY_EMAIL_ACTIVATION_FAILED, fiber.StatusInternalServerError)
+ }
+
+ return shortcuts.Render(ctx, TEMPLATE_VERIFY_EMAIL, fiber.Map{
+ "Success": SUCCESS_VERIFY_EMAIL,
+ "Username": user.Username,
+ })
+
+}