auth.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package service
  2. import (
  3. "github.com/pkg/errors"
  4. "gorm.io/gorm"
  5. "sghgogs.com/micro/common"
  6. "sghgogs.com/micro/common/errorcode"
  7. pb "sghgogs.com/micro/shopping-service/proto"
  8. "sghgogs.com/micro/shopping-service/utils"
  9. )
  10. func (svc *Service) Login(auth *pb.LoginRequest) (*pb.User, int64, error) {
  11. var user *pb.User
  12. group, err := svc.Repository.GetUserGroup(&pb.GetUserGroupRequest{Code: auth.Code})
  13. if err != nil {
  14. if errors.Is(err, gorm.ErrRecordNotFound) {
  15. return user, 0, errorcode.New(svc.Namespace, common.ErrorMessage[common.InvalidCodeError], 500)
  16. }
  17. return user, 0, errorcode.New(svc.Namespace, err.Error(), 500)
  18. }
  19. if !utils.IsUserGroup(group.ID) {
  20. return user, 0, errorcode.New(svc.Namespace, common.ErrorMessage[common.NotAssignedError], 500)
  21. }
  22. if utils.UserUserGroupID == group.ID {
  23. if exists, err := svc.Repository.IsUserExists(auth.Username); err != nil {
  24. return user, 0, errorcode.New(svc.Namespace, err.Error(), 500)
  25. } else {
  26. if !exists {
  27. return user, 0, errorcode.New(svc.Namespace, common.ErrorMessage[common.AccountDoesNotExist], 400)
  28. }
  29. }
  30. }
  31. if utils.AdminUserGroupID == group.ID {
  32. if exists, err := svc.Repository.IsAdminUserExists(auth.Username); err != nil {
  33. return user, 0, errorcode.New(svc.Namespace, err.Error(), 500)
  34. } else {
  35. if !exists {
  36. return user, 0, errorcode.New(svc.Namespace, common.ErrorMessage[common.AccountDoesNotExist], 400)
  37. }
  38. }
  39. }
  40. login, err := svc.Repository.Login(auth.Username)
  41. if err != nil {
  42. return user, 0, errorcode.New(svc.Namespace, err.Error(), 500)
  43. }
  44. if !utils.CheckPasswordHash(auth.Password, login.Password) {
  45. return user, 0, errorcode.BadRequest(svc.Namespace, common.ErrorMessage[common.IncorrectPasswordErrorCode])
  46. }
  47. res := svc.getUserRes(&login)
  48. if utils.AdminUserGroupID == group.ID {
  49. res.Roles = svc.getBaseRoleRes(login.Roles)
  50. }
  51. return res, group.ID, nil
  52. }
  53. func (svc *Service) Profile(groupID int64, userID int64) (*pb.User, error) {
  54. // Profile
  55. profile, err := svc.Repository.Profile(userID)
  56. if err != nil {
  57. return &pb.User{}, errorcode.New(svc.Namespace, err.Error(), 500)
  58. }
  59. res := svc.getUserRes(&profile)
  60. if utils.AdminUserGroupID == groupID {
  61. res.Roles = svc.getBaseRoleRes(profile.Roles)
  62. }
  63. return res, nil
  64. }