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 } func (u *AuthUser) 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.PasswordHash) if err != nil { return "", err } id := repo.AddUser(u.Username, hashed_password) return id, nil } func (u *AuthUser) GetAllUsers(repo *dao.UserRepository) ([]AuthUser, error) { var res = []AuthUser{} users, err := repo.GetAllUsers() if err != nil { return []AuthUser{}, err } for _, u := range users { user := AuthUser{Username: u.Username, Id: u.Id, PasswordHash: ""} res = append(res, user) } return res, nil }