You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

36 lines
933 B
Go

package models
import (
"crypto/rand"
"gorm.io/gorm"
3 years ago
"spahl.ddns.net/jasper/wok-able/auth"
)
const saltSize = 64
type User struct {
ID uint `json:"-" gorm:"primary key"`
Username string `json:"username" gorm:"unique;not null"`
Email string `json:"email" gorm:"unique;not null"`
Password string `json:"password" gorm:"-" binding:"required"`
PasswordHash []byte `json:"-" gorm:"not null"`
Salt []byte `json:"-" gorm:"not null"`
CardDecks []CardDeck `json:"-"`
Cards []Card `json:"-"`
}
type Auth struct {
Username string `json:"username" binding:"required"`
Password string `json:"password" binding:"required"`
}
func (u *User) BeforeCreate(tx *gorm.DB) (err error) {
salt := make([]byte, saltSize)
if _, err = rand.Read(salt[:]); err != nil {
return
}
u.Salt = salt
u.PasswordHash, err = auth.HashPassword(u.Password, u.Salt)
return
}