auth.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package service
  2. import (
  3. "baize_scaffold/utm/application/domain/auth"
  4. "baize_scaffold/utm/data_loader"
  5. "baize_scaffold/utm/tools"
  6. "git.sxidc.com/go-framework/baize/framework/binding"
  7. "git.sxidc.com/go-framework/baize/framework/core/api"
  8. "git.sxidc.com/go-framework/baize/framework/core/api/request"
  9. "git.sxidc.com/go-framework/baize/framework/core/api/response"
  10. "git.sxidc.com/go-framework/baize/framework/core/application"
  11. "git.sxidc.com/go-framework/baize/framework/core/domain"
  12. "git.sxidc.com/go-framework/baize/framework/core/infrastructure"
  13. "github.com/pkg/errors"
  14. )
  15. var authService = &AuthService{}
  16. type AuthService struct{}
  17. func (svc *AuthService) Init(appInstance *application.App) error {
  18. svc.root(appInstance)
  19. svc.v1(appInstance)
  20. return nil
  21. }
  22. func (svc *AuthService) Destroy() error {
  23. return nil
  24. }
  25. func (svc *AuthService) root(appInstance *application.App) {
  26. rootBinder := binding.NewBinder(appInstance.ChooseRouter(api.RouterPrefix, ""), nil)
  27. binding.PostBind(rootBinder, &binding.SimpleBindItem[map[string]any]{
  28. Path: "/login",
  29. SendResponseFunc: response.SendMapResponse,
  30. RequestParams: &auth.LoginJsonBody{},
  31. ServiceFunc: func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (map[string]any, error) {
  32. errResponse := map[string]any{
  33. "token": "",
  34. }
  35. jsonBody, err := request.ToConcrete[*auth.LoginJsonBody](params)
  36. if err != nil {
  37. return errResponse, err
  38. }
  39. user, err := data_loader.GetDataLoader().GetUserByUserNameAndPassword(jsonBody.UserName, jsonBody.Password)
  40. if err != nil {
  41. return errResponse, err
  42. }
  43. token, err := tools.NewJWT(user.ID, 0)
  44. if err != nil {
  45. return errResponse, err
  46. }
  47. return map[string]any{
  48. "token": token,
  49. }, nil
  50. },
  51. })
  52. }
  53. func (svc *AuthService) v1(appInstance *application.App) {
  54. v1Binder := binding.NewBinder(appInstance.ChooseRouter(api.RouterPrefix, "v1"), nil)
  55. binding.PostBind(v1Binder, &binding.SimpleBindItem[map[string]any]{
  56. Path: "/checkToken",
  57. SendResponseFunc: response.SendMapResponse,
  58. RequestParams: &auth.CheckTokenJsonBody{},
  59. ServiceFunc: func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (map[string]any, error) {
  60. errResponse := map[string]any{
  61. "tenantId": "",
  62. "tenantName": "",
  63. "userId": "",
  64. "userName": "",
  65. }
  66. jsonBody, err := request.ToConcrete[*auth.CheckTokenJsonBody](params)
  67. if err != nil {
  68. return errResponse, err
  69. }
  70. valid, userID, err := tools.CheckJWT(jsonBody.Token)
  71. if err != nil {
  72. return errResponse, err
  73. }
  74. if !valid {
  75. return errResponse, errors.New("token无效")
  76. }
  77. user, err := data_loader.GetDataLoader().GetUserByID(userID)
  78. if err != nil {
  79. return errResponse, err
  80. }
  81. tenant, err := data_loader.GetDataLoader().GetTenantByID(user.CurrentTenantID)
  82. if err != nil {
  83. return errResponse, err
  84. }
  85. return map[string]any{
  86. "tenantId": tenant.ID,
  87. "tenantName": tenant.Name,
  88. "userId": user.ID,
  89. "userName": user.UserName,
  90. }, nil
  91. },
  92. })
  93. }