user.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. // ReadUserByGithubUserID finds a single user based on their github user id
  41. func (repo *UserRepository) ReadUserByGithubUserID(id int64) (*models.User, error) {
  42. user := &models.User{}
  43. if err := repo.db.Where("github_user_id = ?", id).First(&user).Error; err != nil {
  44. return nil, err
  45. }
  46. return user, nil
  47. }
  48. // UpdateUser modifies an existing User in the database
  49. func (repo *UserRepository) UpdateUser(user *models.User) (*models.User, error) {
  50. if err := repo.db.Save(user).Error; err != nil {
  51. return nil, err
  52. }
  53. return user, nil
  54. }
  55. // DeleteUser deletes a single user using their unique id
  56. func (repo *UserRepository) DeleteUser(user *models.User) (*models.User, error) {
  57. if err := repo.db.Delete(&user).Error; err != nil {
  58. return nil, err
  59. }
  60. return user, nil
  61. }
  62. // CheckPassword checks the input password is correct for the provided user id.
  63. func (repo *UserRepository) CheckPassword(id int, pwd string) (bool, error) {
  64. u := &models.User{}
  65. if err := repo.db.First(u, id).Error; err != nil {
  66. return false, err
  67. }
  68. if err := bcrypt.CompareHashAndPassword([]byte(u.Password), []byte(pwd)); err != nil {
  69. return false, err
  70. }
  71. return true, nil
  72. }