summaryrefslogtreecommitdiff
path: root/shrine/services/verification.go
blob: a589fd43c6eb8aa4a2f48323d2078e2c951ef547 (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
package services

import (
	"shrine/enums"
	"shrine/messages"
	"shrine/models"
	"shrine/repositories"
	"shrine/types/hypertext"
	"shrine/utils/crypto"
	"shrine/utils/emails"
	"shrine/utils/logger"
	"time"
)

func SendVerification(citizen *models.User, verificationType enums.VerificationType) *hypertext.ServiceError {
	token, err := crypto.GenerateToken()
	if err != nil {
		return fail(enums.Internal, messages.FailedGenerateToken)
	}

	citizen.SetVerification(crypto.HashToken(token), time.Now().Add(24*time.Hour), verificationType)

	if err := repositories.UpdateUser(citizen); err != nil {
		return fail(enums.Internal, messages.FailedStoreToken)
	}

	switch verificationType {
	case enums.Activation:
		if err := emails.SendActivation(citizen.Email, citizen.Username, token); err != nil {
			logger.Errorf("Auth", "Failed to send activation email to %s: %v", citizen.Email, err)
		}
	}

	return nil
}