diff options
Diffstat (limited to 'controllers/account.go')
| -rw-r--r-- | controllers/account.go | 48 |
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, + }) + +} |
