-
Notifications
You must be signed in to change notification settings - Fork 1
/
user.go
55 lines (44 loc) · 1.14 KB
/
user.go
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
50
51
52
53
54
55
package models
import (
"time"
"github.com/google/uuid"
"golang.org/x/crypto/bcrypt"
"gorm.io/gorm"
"github.com/ikilonchic/WEB_LAB-3-4/pkg/validation"
)
// User ...
type User struct {
ID string `json:"id"`
UserName string `json:"username"`
Email string `json:"email"`
Password string `json:"password"`
Number string `json:"number"`
Male bool `json:"male"`
Country string `json:"country"`
DateOfBirth time.Time `json:"dob"`
About string `json:"about"`
}
// Validate ...
func (u *User) Validate() bool {
return validation.IsEmail(u.Email) && validation.IsPassword(u.Password)
}
// BeforeCreate ...
func (u *User) BeforeCreate(*gorm.DB) error {
if len(u.Password) > 0 {
encod, err := bcrypt.GenerateFromPassword([]byte(u.Password), bcrypt.MinCost)
if err != nil {
return err
}
u.Password = string(encod)
}
u.ID = uuid.New().String()
return nil
}
// Sanitize ...
func (u *User) Sanitize() {
u.Password = ""
}
// ComparePassword ...
func (u *User) ComparePassword(password string) bool {
return bcrypt.CompareHashAndPassword([]byte(u.Password), []byte(password)) == nil
}