users/model.go

65 lines
1.3 KiB
Go

package users
import "golang.org/x/crypto/bcrypt"
type User struct {
ID string `json:"id"`
Username string `json:"username"`
Role string `json:"role"`
HashedPassword []byte `json:"-"`
}
func (u *User) SetPassword(password string) error {
hashed, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
if err != nil {
return err
}
u.HashedPassword = hashed
return nil
}
func (u *User) ComparePassword(password string) error {
return bcrypt.CompareHashAndPassword(u.HashedPassword, []byte(password))
}
type InfoResponse struct {
Version string `json:"version"`
}
type ErrorResponse struct {
Status int `json:"status"`
Message string `json:"message"`
}
type CreateUserRequest struct {
Username string `json:"username"`
Password string `json:"password"`
Role string `json:"role"`
}
type CreateUserResponse struct {
Message string `json:"message"`
User User `json:"user"`
}
type SetPasswordRequest struct {
NewPassword string `json:"newPassword"`
}
type VerifyRequest struct {
Password string `json:"password"`
}
// Messages
type MsgUserUpdate struct {
Message string `json:"message"`
ID string `json:"id"`
}
type MsgUserCreate struct {
Message string `json:"message"`
User User `json:"user"`
}