aboutsummaryrefslogtreecommitdiff
path: root/controllers/account.go
blob: fa3e0e775f65e860a4b25fa43040aaf531a93bca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package controllers

import (
	"imageboard/config"
	"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, config.TEMPLATE_VERIFY_EMAIL, fiber.Map{
		"Error": errorMsg,
	}, statusCode)
}

func VerifyEmailController(ctx *fiber.Ctx) error {
	ctx.Locals("Title", config.PT_VERIFY_EMAIL)
	if auth.IsAuthenticated(ctx) {
		return ctx.Redirect(auth.GetRedirectURL(ctx), fiber.StatusSeeOther)
	}
	token := ctx.Query("token")
	if token == "" {
		return renderVerifyEmailError(ctx, config.ERR_VERIFY_EMAIL_MISSING_TOKEN, fiber.StatusBadRequest)
	}

	emailToken, err := database.VerifyToken(token, models.EmailTokenTypeVerification)
	if err != nil {
		return renderVerifyEmailError(ctx, config.ERR_VERIFY_EMAIL_INVALID_OR_EXPIRED_TOKEN, fiber.StatusBadRequest)
	}

	user, err := database.GetUserByID(emailToken.UserID)
	if err != nil {
		return renderVerifyEmailError(ctx, config.ERR_VERIFY_EMAIL_USER_NOT_FOUND, fiber.StatusInternalServerError)
	}

	user.Activate()
	if err := database.DB.Save(user).Error; err != nil {
		return renderVerifyEmailError(ctx, config.ERR_VERIFY_EMAIL_ACTIVATION_FAILED, fiber.StatusInternalServerError)
	}

	return shortcuts.Render(ctx, config.TEMPLATE_VERIFY_EMAIL, fiber.Map{
		"Success":  config.SUCCESS_VERIFY_EMAIL,
		"Username": user.Username,
	})

}