initial commit

This commit is contained in:
matyushev_mo committed 2024-12-06 16:10:35 +03:00
commit e8da0f7874
15 files changed
+722

No files matched your search

+23
View File
@@ -0,0 +1,23 @@
package utils
import (
"fmt"
"net/smtp"
c "desq.com.ru/testjwtauth/config"
)
func NotifyEmail(m string, r string) error {
a := smtp.PlainAuth("", c.SMTPEmail, c.SMTPPassword, c.SMTPHost)
message := "From: " + c.SMTPEmail + "\n" +
"To: " + r + "\n" +
"Subject: Access from an unknown IP\n\n" +
m
if err := smtp.SendMail(fmt.Sprintf("%s:%d", c.SMTPHost, 587), a, c.SMTPEmail, []string{r}, []byte(message)); err != nil {
return fmt.Errorf("failed to send email: %v", err)
}
return nil
}
+43
View File
@@ -0,0 +1,43 @@
package utils
import (
"testing"
"desq.com.ru/testjwtauth/config"
)
func TestNotifyEmail(t *testing.T) {
type args struct {
m string
r string
}
tests := []struct {
name string
args args
wantErr bool
}{
{
name: "WithValidEmail",
args: args{
m: "TestNotifyEmail",
r: config.MockSMTPRecipient,
},
wantErr: false,
},
{
name: "WithInvalidEmail",
args: args{
m: "TestNotifyEmail",
r: "",
},
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if err := NotifyEmail(tt.args.m, tt.args.r); (err != nil) != tt.wantErr {
t.Errorf("NotifyEmail() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}
+36
View File
@@ -0,0 +1,36 @@
package utils
import (
"crypto/rand"
"encoding/base64"
"golang.org/x/crypto/bcrypt"
)
func GenerateToken(l int) (string, error) {
bytes := make([]byte, l)
_, err := rand.Read(bytes)
if err != nil {
return "", err
}
token := base64.StdEncoding.EncodeToString(bytes)
return token, nil
}
func EncodeToken(token string) (string, error) {
encodedToken, err := bcrypt.GenerateFromPassword([]byte(token), bcrypt.DefaultCost)
if err != nil {
return "", err
}
return string(encodedToken), nil
}
func CompareToken(hash string, token string) bool {
eq := bcrypt.CompareHashAndPassword([]byte(hash), []byte(token))
return eq == nil
}
+65
View File
@@ -0,0 +1,65 @@
package utils
import (
"testing"
)
func TestGenerateToken(t *testing.T) {
type args struct {
l int
}
tests := []struct {
name string
args args
wantErr bool
}{
{
name: "GenerateRefreshToken",
args: args{
l: 32,
},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
_, err := GenerateToken(tt.args.l)
if (err != nil) != tt.wantErr {
t.Errorf("GenerateToken() error = %v, wantErr %v", err, tt.wantErr)
return
}
})
}
}
func TestEncodeToken(t *testing.T) {
token, err := GenerateToken(32)
if err != nil {
t.Fatalf("Failed to generate refresh token")
}
type args struct {
token string
}
tests := []struct {
name string
args args
wantErr bool
}{
{
name: "EncodeToken",
args: args{
token: token,
},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
_, err := EncodeToken(tt.args.token)
if (err != nil) != tt.wantErr {
t.Errorf("EncodeToken() error = %v, wantErr %v", err, tt.wantErr)
return
}
})
}
}