package model import ( "errors" "github.com/andreanidouglas/auth-go/dao" "github.com/andreanidouglas/auth-go/internals" ) type AuthUser struct { Id string `json:"id"` Username string `json:"username"` PasswordHash string `json:"passwordHash,omitempty"` } func (u *AuthUser) AuthenticateUser(repo *dao.UserRepository, c *internals.Crypt) (string, error) { user, err := repo.GetUserByUsername(u.Username) if err != nil { return "", err } err = c.CheckPasswordHash(u.PasswordHash, user.PasswordHash) if err != nil { return "", err } return user.Id, nil } type GetUser struct { Id string `json:"id"` Username string `json:"username"` } func (u *GetUser) GetAllUsers(repo *dao.UserRepository) ([]GetUser, error) { var res = []GetUser{} users, err := repo.GetAllUsers() if err != nil { return []GetUser{}, err } for _, u := range users { user := GetUser{Username: u.Username, Id: u.Id} res = append(res, user) } return res, nil } type CreateUser struct { Username string `json:"username"` Password string `json:"password"` } func (u *CreateUser) CreateUser(repo *dao.UserRepository, c *internals.Crypt) (string, error) { _, err := repo.GetUserByUsername(u.Username) if err == nil { return "", errors.New("user already exists") } hashed_password, err := c.HashPassword(u.Password) if err != nil { return "", err } id := repo.AddUser(u.Username, hashed_password) return id, nil }