all repos

onasty @ 8d12ded160112b9aaec9da33a654837cdf791505

a one-time notes service

onasty/internal/models/user.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
fix: don't return "wrong credentials" (#201), 9 months ago
1
package models
2
3
import (
4
	"errors"
5
	"net/mail"
6
	"time"
7
8
	"github.com/gofrs/uuid/v5"
9
)
10
11
var (
12
	ErrUserEmailIsAlreadyInUse = errors.New("user: email is already in use")
13
	ErrUserIsAlreadyVerified   = errors.New("user: user is already verified")
14
	ErrUserIsNotActivated      = errors.New("user: user is not activated")
15
	ErrUserNotFound            = errors.New("user: not found")
16
17
	ErrResetPasswordTokenAlreadyUsed = errors.New("reset password token is already used")
18
	ErrVerificationTokenNotFound     = errors.New("user: verification token not found")
19
20
	ErrUserInvalidEmail    = errors.New("user: invalid email")
21
	ErrUserInvalidPassword = errors.New("user: password too short, minimum 6 chars")
22
)
23
24
type User struct {
25
	ID          uuid.UUID
26
	Email       string
27
	Activated   bool
28
	Password    string
29
	CreatedAt   time.Time
30
	LastLoginAt time.Time
31
}
32
33
func (u User) Validate() error {
34
	_, err := mail.ParseAddress(u.Email)
35
	if err != nil {
36
		return ErrUserInvalidEmail
37
	}
38
39
	return u.ValidatePassword()
40
}
41
42
func (u User) ValidatePassword() error {
43
	if len(u.Password) < 6 {
44
		return ErrUserInvalidPassword
45
	}
46
	return nil
47
}
48
49
func (u User) IsActivated() bool {
50
	return u.Activated
51
}