backstage_service.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /*
  2. * @description:登陆相关数据操作
  3. * @Author: CP
  4. * @Date: 2020-09-02 09:56:28
  5. * @FilePath: \construction_management\services\backstage_service.go
  6. */
  7. package services
  8. import (
  9. "errors"
  10. "log"
  11. "net/http"
  12. "net/url"
  13. "github.com/kataras/iris/v12"
  14. "go.mod/comm"
  15. "go.mod/conf"
  16. "go.mod/lib"
  17. "go.mod/web/viewmodels"
  18. )
  19. //定义项目用户Service接口
  20. type BackstageService interface {
  21. ValidRuleLogin(ctx iris.Context) (viewmodels.StaffCld, error)
  22. ValidCldStaff(loginData viewmodels.StaffCld, writer http.ResponseWriter) (*viewmodels.ResultCld, error)
  23. Out(ctx iris.Context) error
  24. }
  25. //返回service操作类
  26. type backstageService struct {
  27. // projectAccountDao *dao.ProjectAccountDao
  28. // projectDao *dao.ProjectDao
  29. }
  30. //创建项目用户service
  31. func NewBackstageService() BackstageService {
  32. return &backstageService{
  33. // projectAccountDao: dao.NewProjectAccountDao(datasource.InstanceDbMaster()),
  34. // projectDao: dao.NewProjectDao(datasource.InstanceDbMaster()),
  35. }
  36. }
  37. // 登陆验证
  38. func (s *backstageService) ValidRuleLogin(ctx iris.Context) (viewmodels.StaffCld, error) {
  39. loginVaild := viewmodels.StaffCld{}
  40. err := ctx.ReadJSON(&loginVaild)
  41. if err != nil {
  42. log.Println("ReadForm转换异常, error=", err)
  43. return loginVaild, err
  44. }
  45. err = loginVaild.ValidateLogin()
  46. if err != nil {
  47. log.Println("登录验证, error=", err)
  48. return loginVaild, err
  49. }
  50. return loginVaild, nil
  51. }
  52. // 验证项目用户登陆相关
  53. func (s *backstageService) ValidCldStaff(loginData viewmodels.StaffCld, writer http.ResponseWriter) (*viewmodels.ResultCld, error) {
  54. // 1.验证CLD账号密码
  55. cld := lib.NewCld()
  56. result, err := cld.LoginValid(loginData)
  57. if err != nil {
  58. return nil, err
  59. }
  60. if result.Code != 0 {
  61. return nil, errors.New(result.Msg)
  62. }
  63. // 2.写入登录态
  64. // 加密用户标识
  65. identity, err := comm.AesEncrypt(result.Data.UserName, conf.CookieSecret)
  66. if err != nil {
  67. return nil, err
  68. }
  69. // 加密项目标识
  70. category, err := comm.AesEncrypt(result.Data.UserName, conf.CookieSecret)
  71. if err != nil {
  72. return nil, err
  73. }
  74. digitalToken := comm.CreateSign(conf.CookieSecret + identity)
  75. // 设置cookie
  76. maxAge := 60 * 60 * 24 * 7
  77. params := url.Values{}
  78. params.Add("identity", identity)
  79. params.Add("attachedIdentity", category)
  80. params.Add("digitalToken", digitalToken)
  81. c := &http.Cookie{
  82. Name: "cmBackstage",
  83. Value: params.Encode(),
  84. Path: "/",
  85. MaxAge: maxAge,
  86. HttpOnly: true,
  87. }
  88. http.SetCookie(writer, c)
  89. return &result.Data, nil
  90. }
  91. // 登出
  92. func (s *backstageService) Out(ctx iris.Context) error {
  93. // 移除cookie
  94. ctx.RemoveCookie("cmBackstage")
  95. return nil
  96. }