/* * This file is part of sdbapi * Copyright (C) 2023 Jonni Liljamo * * Licensed under GPL-3.0-only. * See LICENSE for licensing information. */ package models import ( "time" "golang.org/x/crypto/bcrypt" "gorm.io/gorm" ) type User struct { ID string `json:"id" gorm:"primarykey;type:uuid;default:gen_random_uuid()"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` DeletedAt gorm.DeletedAt `json:"-" gorm:"index"` Username string `json:"username" gorm:"unique"` Email string `json:"-" gorm:"unique"` Password string `json:"-"` } type UserCreateInput struct { Username string `json:"username"` Email string `json:"email"` Password string `json:"password"` } // hash a users password func (user *User) HashPwd(password string) error { hash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { return err } user.Password = string(hash) return nil } func (user *User) VerifyPwd(password string) error { err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(password)) if err != nil { return err } return nil } type UserPub struct { ID string `json:"id"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` Username string `json:"username"` } // Convert a user to UserPub, which can be returned safely func (user *User) ToPub() UserPub { return UserPub{ ID: user.ID, CreatedAt: user.CreatedAt, UpdatedAt: user.UpdatedAt, Username: user.Username, } }