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"` }