|
@@ -0,0 +1,110 @@
|
|
|
+/*
|
|
|
+ * @description:登陆相关数据操作
|
|
|
+ * @Author: CP
|
|
|
+ * @Date: 2020-09-02 09:56:28
|
|
|
+ * @FilePath: \construction_management\services\backstage_service.go
|
|
|
+ */
|
|
|
+package services
|
|
|
+
|
|
|
+import (
|
|
|
+ "errors"
|
|
|
+ "log"
|
|
|
+ "net/http"
|
|
|
+ "net/url"
|
|
|
+
|
|
|
+ "github.com/kataras/iris/v12"
|
|
|
+ "go.mod/comm"
|
|
|
+ "go.mod/conf"
|
|
|
+ "go.mod/lib"
|
|
|
+ "go.mod/web/viewmodels"
|
|
|
+)
|
|
|
+
|
|
|
+//定义项目用户Service接口
|
|
|
+type BackstageService interface {
|
|
|
+ ValidRuleLogin(ctx iris.Context) (viewmodels.StaffCld, error)
|
|
|
+ ValidCldStaff(loginData viewmodels.StaffCld, writer http.ResponseWriter) (*viewmodels.ResultCld, error)
|
|
|
+ Out(ctx iris.Context) error
|
|
|
+}
|
|
|
+
|
|
|
+//返回service操作类
|
|
|
+type backstageService struct {
|
|
|
+ // projectAccountDao *dao.ProjectAccountDao
|
|
|
+ // projectDao *dao.ProjectDao
|
|
|
+}
|
|
|
+
|
|
|
+//创建项目用户service
|
|
|
+func NewBackstageService() BackstageService {
|
|
|
+ return &backstageService{
|
|
|
+ // projectAccountDao: dao.NewProjectAccountDao(datasource.InstanceDbMaster()),
|
|
|
+ // projectDao: dao.NewProjectDao(datasource.InstanceDbMaster()),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 登陆验证
|
|
|
+func (s *backstageService) ValidRuleLogin(ctx iris.Context) (viewmodels.StaffCld, error) {
|
|
|
+ loginVaild := viewmodels.StaffCld{}
|
|
|
+ err := ctx.ReadJSON(&loginVaild)
|
|
|
+ if err != nil {
|
|
|
+ log.Println("ReadForm转换异常, error=", err)
|
|
|
+ return loginVaild, err
|
|
|
+ }
|
|
|
+
|
|
|
+ err = loginVaild.ValidateLogin()
|
|
|
+ if err != nil {
|
|
|
+ log.Println("登录验证, error=", err)
|
|
|
+ return loginVaild, err
|
|
|
+ }
|
|
|
+ return loginVaild, nil
|
|
|
+}
|
|
|
+
|
|
|
+// 验证项目用户登陆相关
|
|
|
+func (s *backstageService) ValidCldStaff(loginData viewmodels.StaffCld, writer http.ResponseWriter) (*viewmodels.ResultCld, error) {
|
|
|
+
|
|
|
+ // 1.验证CLD账号密码
|
|
|
+ cld := lib.NewCld()
|
|
|
+ result, err := cld.LoginValid(loginData)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ if result.Code != 0 {
|
|
|
+ return nil, errors.New(result.Msg)
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2.写入登录态
|
|
|
+ // 加密用户标识
|
|
|
+ identity, err := comm.AesEncrypt(result.Data.UserName, conf.CookieSecret)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ // 加密项目标识
|
|
|
+ category, err := comm.AesEncrypt(result.Data.UserName, conf.CookieSecret)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ digitalToken := comm.CreateSign(conf.CookieSecret + identity)
|
|
|
+
|
|
|
+ // 设置cookie
|
|
|
+ maxAge := 60 * 60 * 24 * 7
|
|
|
+ params := url.Values{}
|
|
|
+ params.Add("identity", identity)
|
|
|
+ params.Add("attachedIdentity", category)
|
|
|
+ params.Add("digitalToken", digitalToken)
|
|
|
+ c := &http.Cookie{
|
|
|
+ Name: "cmBackstage",
|
|
|
+ Value: params.Encode(),
|
|
|
+ Path: "/",
|
|
|
+ MaxAge: maxAge,
|
|
|
+ HttpOnly: true,
|
|
|
+ }
|
|
|
+ http.SetCookie(writer, c)
|
|
|
+
|
|
|
+ return &result.Data, nil
|
|
|
+}
|
|
|
+
|
|
|
+// 登出
|
|
|
+func (s *backstageService) Out(ctx iris.Context) error {
|
|
|
+ // 移除cookie
|
|
|
+ ctx.RemoveCookie("cmBackstage")
|
|
|
+ return nil
|
|
|
+}
|