package model import ( "time" "github.com/labstack/echo-contrib/session" "github.com/labstack/echo/v4" "gitnet.fr/deblan/budget/database/manager" "golang.org/x/crypto/bcrypt" ) type User struct { ID uint `gorm:"primaryKey"` Username string `gorm:"unique"` Password string DisplayName string CreatedAt time.Time UpdatedAt time.Time } func NewUser(username, password, displayName string) *User { user := User{ Username: username, DisplayName: displayName, } user.UpdatePassword(password) return &user } func (u *User) UpdatePassword(password string) { hashedPassword, _ := bcrypt.GenerateFromPassword([]byte(password), 1000) u.Password = string(hashedPassword) } func (u *User) HasPassword(password string) bool { return bcrypt.CompareHashAndPassword([]byte(u.Password), []byte(password)) == nil } func LoadSessionUser(c echo.Context) *User { sess, err := session.Get("session", c) if err != nil { return nil } value := sess.Values["user"] if value == nil { return nil } id := value.(uint) var count int64 db := manager.Get() db.Db.Model(User{}).Where("id = ?", id).Count(&count) if count == 0 { return nil } var user User manager.Get().Db.Model(User{}).Where("id = ?", id).Find(&user) return &user }