user.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package gorm
  2. import (
  3. "github.com/porter-dev/porter/internal/models"
  4. "github.com/porter-dev/porter/internal/repository"
  5. "golang.org/x/crypto/bcrypt"
  6. "gorm.io/gorm"
  7. )
  8. // UserRepository uses gorm.DB for querying the database
  9. type UserRepository struct {
  10. db *gorm.DB
  11. }
  12. // NewUserRepository returns a DefaultUserRepository which uses
  13. // gorm.DB for querying the database
  14. func NewUserRepository(db *gorm.DB) repository.UserRepository {
  15. return &UserRepository{db}
  16. }
  17. // CreateUser adds a new User row to the Users table in the database
  18. func (repo *UserRepository) CreateUser(user *models.User) (*models.User, error) {
  19. if err := repo.db.Create(user).Error; err != nil {
  20. return nil, err
  21. }
  22. return user, nil
  23. }
  24. // ReadUser finds a single user based on their unique id
  25. func (repo *UserRepository) ReadUser(id uint) (*models.User, error) {
  26. user := &models.User{}
  27. if err := repo.db.Where("id = ?", id).First(&user).Error; err != nil {
  28. return nil, err
  29. }
  30. return user, nil
  31. }
  32. // ReadUserByEmail finds a single user based on their unique email
  33. func (repo *UserRepository) ReadUserByEmail(email string) (*models.User, error) {
  34. user := &models.User{}
  35. if err := repo.db.Where("email = ?", email).First(&user).Error; err != nil {
  36. return nil, err
  37. }
  38. return user, nil
  39. }
  40. // UpdateUser modifies an existing User in the database
  41. func (repo *UserRepository) UpdateUser(user *models.User) (*models.User, error) {
  42. if err := repo.db.Save(user).Error; err != nil {
  43. return nil, err
  44. }
  45. return user, nil
  46. }
  47. // DeleteUser deletes a single user using their unique id
  48. func (repo *UserRepository) DeleteUser(user *models.User) (*models.User, error) {
  49. if err := repo.db.Delete(&user).Error; err != nil {
  50. return nil, err
  51. }
  52. return user, nil
  53. }
  54. // CheckPassword checks the input password is correct for the provided user id.
  55. func (repo *UserRepository) CheckPassword(id int, pwd string) (bool, error) {
  56. u := &models.User{}
  57. if err := repo.db.First(u, id).Error; err != nil {
  58. return false, err
  59. }
  60. if err := bcrypt.CompareHashAndPassword([]byte(u.Password), []byte(pwd)); err != nil {
  61. return false, err
  62. }
  63. return true, nil
  64. }