Passed
Pull Request — main (#42)
by Yume
01:11
created

utils.GenerateSecretCode   A

Complexity

Conditions 2

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 5
nop 1
dl 0
loc 7
rs 10
c 0
b 0
f 0
1
package utils
2
3
import (
4
	"crypto/rand"
5
	"crypto/tls"
6
	"encoding/hex"
7
	"fmt"
8
	"github.com/joho/godotenv"
9
	gomail "gopkg.in/mail.v2"
10
	"log"
11
	"math/big"
12
	"os"
13
	"strconv"
14
)
15
16
// GenerateSecretCode generates a secret code
17
func GenerateSecretCode(length int) string {
18
	// Generate a random string of letters and digits
19
	b := make([]byte, length)
20
	if _, err := rand.Read(b); err != nil {
21
		return ""
22
	}
23
	return hex.EncodeToString(b)
24
}
25
26
// GenerateRandomDigit GetRandomNumber returns a random number between min and max
27
func GenerateRandomDigit(min, max int64) (string, error) {
28
	// Set max and min value
29
	randomNumber, err := rand.Int(rand.Reader, big.NewInt(max-min))
30
	if err != nil {
31
		return "0", err
32
	}
33
34
	return strconv.FormatInt(randomNumber.Int64()+min, 10), nil
35
}
36
37
// GetSmtpConfig returns a gomail.Dialer and gomail.Message
38
func getSMTPConfig() (*gomail.Dialer, *gomail.Message) {
39
	// Load the .env file
40
	err := godotenv.Load()
41
	if err != nil {
42
		log.Fatal("Error loading .env file")
43
	}
44
	password := os.Getenv("SMTP_PASSWORD")
45
	host := os.Getenv("SMTP_HOST")
46
	port, _ := strconv.Atoi(os.Getenv("SMTP_PORT"))
47
	from := os.Getenv("SMTP_USER")
48
49
	// Settings for SMTP server
50
	d := gomail.NewDialer(host, port, from, password)
51
	d.TLSConfig = &tls.Config{
52
		InsecureSkipVerify: false,
53
		MaxVersion:         0,
54
		ServerName:         host,
55
	}
56
	m := gomail.NewMessage()
57
	m.SetHeader("From", from)
58
	return d, m
59
}
60
61
// SendEmail sends an email to the given address
62
func SendEmail(email, subject, body string) error {
63
	// Send email
64
65
	d, m := getSMTPConfig()
66
67
	// Set E-Mail receivers
68
	m.SetHeader("To", email)
69
70
	// Set E-Mail subject
71
	m.SetHeader("Subject", subject)
72
73
	// Set E-Mail body. You can set plain text or html with text/html
74
	m.SetBody("text/plain", body)
75
76
	// Now send E-Mail
77
	if err := d.DialAndSend(m); err != nil {
78
		fmt.Println(err)
79
		panic(err)
80
	}
81
	return nil
82
}
83