|
@@ -8,13 +8,11 @@ package services
|
|
|
|
|
|
import (
|
|
import (
|
|
"errors"
|
|
"errors"
|
|
- "fmt"
|
|
|
|
"log"
|
|
"log"
|
|
"net/http"
|
|
"net/http"
|
|
|
|
+ "net/url"
|
|
"strconv"
|
|
"strconv"
|
|
- "time"
|
|
|
|
|
|
|
|
- "github.com/iris-contrib/middleware/jwt"
|
|
|
|
"github.com/kataras/iris/v12"
|
|
"github.com/kataras/iris/v12"
|
|
"go.mod/comm"
|
|
"go.mod/comm"
|
|
"go.mod/conf"
|
|
"go.mod/conf"
|
|
@@ -28,7 +26,8 @@ import (
|
|
//定义项目用户Service接口
|
|
//定义项目用户Service接口
|
|
type LoginService interface {
|
|
type LoginService interface {
|
|
ValidRule(ctx iris.Context) (viewmodels.Login, error)
|
|
ValidRule(ctx iris.Context) (viewmodels.Login, error)
|
|
- ValidProjectAccount(viewmodels.Login, http.ResponseWriter) error
|
|
|
|
|
|
+ ValidProjectAccount(viewmodels.Login, http.ResponseWriter) (*viewmodels.ProjectAccount, error)
|
|
|
|
+ Out(ctx iris.Context) error
|
|
}
|
|
}
|
|
|
|
|
|
//返回service操作类
|
|
//返回service操作类
|
|
@@ -63,85 +62,132 @@ func (s *loginService) ValidRule(ctx iris.Context) (viewmodels.Login, error) {
|
|
}
|
|
}
|
|
|
|
|
|
// 验证项目用户登陆相关
|
|
// 验证项目用户登陆相关
|
|
-func (s *loginService) ValidProjectAccount(loginData viewmodels.Login, writer http.ResponseWriter) error {
|
|
|
|
|
|
+func (s *loginService) ValidProjectAccount(loginData viewmodels.Login, writer http.ResponseWriter) (*viewmodels.ProjectAccount, error) {
|
|
projectInfo := models.CmProject{}
|
|
projectInfo := models.CmProject{}
|
|
// 工程项目是否存在
|
|
// 工程项目是否存在
|
|
projectInfo.Code = loginData.Code
|
|
projectInfo.Code = loginData.Code
|
|
- fmt.Println(projectInfo.Code)
|
|
|
|
s.projectDao.Get(&projectInfo)
|
|
s.projectDao.Get(&projectInfo)
|
|
if projectInfo.Id == 0 {
|
|
if projectInfo.Id == 0 {
|
|
- return errors.New("工程建设管理员还未创建拉取项目,禁止登录")
|
|
|
|
|
|
+ return nil, errors.New("工程建设管理员还未创建项目,禁止登录")
|
|
}
|
|
}
|
|
// 获得项目用户
|
|
// 获得项目用户
|
|
- projectAccountInfo := s.projectAccountDao.Get(projectInfo.UserId)
|
|
|
|
|
|
+
|
|
|
|
+ projectAccountInfo := s.projectAccountDao.Get(projectInfo.UserId, projectInfo.Id)
|
|
if projectAccountInfo.Id == 0 {
|
|
if projectAccountInfo.Id == 0 {
|
|
- return errors.New("工程建设管理员不存在,禁止登录")
|
|
|
|
|
|
+ return nil, errors.New("工程建设管理员不存在,禁止登录")
|
|
}
|
|
}
|
|
- // 验证密码
|
|
|
|
|
|
+ // 验证密码-TODO
|
|
Jlzf := lib.NewJlzf()
|
|
Jlzf := lib.NewJlzf()
|
|
err := Jlzf.LoginValid(loginData)
|
|
err := Jlzf.LoginValid(loginData)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return err
|
|
|
|
|
|
+ return nil, err
|
|
}
|
|
}
|
|
|
|
|
|
// 加密用户标识
|
|
// 加密用户标识
|
|
identity, err := comm.AesEncrypt(strconv.Itoa(projectAccountInfo.Id), conf.CookieSecret)
|
|
identity, err := comm.AesEncrypt(strconv.Itoa(projectAccountInfo.Id), conf.CookieSecret)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return err
|
|
|
|
|
|
+ return nil, err
|
|
}
|
|
}
|
|
// 加密项目标识
|
|
// 加密项目标识
|
|
projectId, err := comm.AesEncrypt(strconv.Itoa(projectAccountInfo.ProjectId), conf.CookieSecret)
|
|
projectId, err := comm.AesEncrypt(strconv.Itoa(projectAccountInfo.ProjectId), conf.CookieSecret)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return err
|
|
|
|
|
|
+ return nil, err
|
|
}
|
|
}
|
|
- // jwt token
|
|
|
|
- token := jwt.NewTokenWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
|
|
|
|
- // 根据需求,可以存一些必要的数据
|
|
|
|
- "identity": identity,
|
|
|
|
- "project": projectId,
|
|
|
|
- // 签发人
|
|
|
|
- "iss": "cm",
|
|
|
|
- // 签发时间
|
|
|
|
- "iat": time.Now().Unix(),
|
|
|
|
- // 设定过期时间,便于测试,设置7天过期
|
|
|
|
- "exp": time.Now().Add(72 * time.Hour * time.Duration(1)).Unix(),
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- // 使用设置的秘钥,签名生成jwt字符串
|
|
|
|
- tokenString, _ := token.SignedString([]byte(conf.SignSecret))
|
|
|
|
- fmt.Println(tokenString)
|
|
|
|
|
|
+
|
|
|
|
+ digitalToken := comm.CreateSign(conf.CookieSecret + strconv.Itoa(projectAccountInfo.Id))
|
|
|
|
+
|
|
|
|
+ // 设置cookie
|
|
maxAge := 60 * 60 * 24 * 7
|
|
maxAge := 60 * 60 * 24 * 7
|
|
- // params := url.Values{}
|
|
|
|
- // params.Add("token", tokenString)
|
|
|
|
|
|
+ params := url.Values{}
|
|
|
|
+ params.Add("identity", identity)
|
|
|
|
+ params.Add("attachedIdentity", projectId)
|
|
|
|
+ params.Add("digitalToken", digitalToken)
|
|
c := &http.Cookie{
|
|
c := &http.Cookie{
|
|
- Name: "cm",
|
|
|
|
- Value: tokenString, //params.Encode(),
|
|
|
|
- Path: "/",
|
|
|
|
- MaxAge: maxAge,
|
|
|
|
|
|
+ Name: "cm",
|
|
|
|
+ Value: params.Encode(),
|
|
|
|
+ Path: "/",
|
|
|
|
+ MaxAge: maxAge,
|
|
|
|
+ HttpOnly: true,
|
|
}
|
|
}
|
|
http.SetCookie(writer, c)
|
|
http.SetCookie(writer, c)
|
|
|
|
|
|
- // // 加密用户标识 生成数字证书
|
|
|
|
- // identity, err := comm.AesEncrypt(strconv.Itoa(projectAccountInfo.Id), conf.CookieSecret)
|
|
|
|
- // if err != nil {
|
|
|
|
- // return err
|
|
|
|
- // }
|
|
|
|
- // digitalToken := comm.CreateSign(conf.CookieSecret + strconv.Itoa(projectAccountInfo.Id))
|
|
|
|
-
|
|
|
|
- // // 设置cookie
|
|
|
|
- // maxAge := 60 * 60 * 24 * 7
|
|
|
|
- // params := url.Values{}
|
|
|
|
- // params.Add("identity", identity)
|
|
|
|
- // params.Add("digitalToken", digitalToken)
|
|
|
|
- // c := &http.Cookie{
|
|
|
|
- // Name: "cm",
|
|
|
|
- // Value: params.Encode(),
|
|
|
|
- // Path: "/",
|
|
|
|
- // MaxAge: maxAge,
|
|
|
|
- // }
|
|
|
|
- // http.SetCookie(writer, c)
|
|
|
|
// TODO--分布式会话--后续需要在加入
|
|
// TODO--分布式会话--后续需要在加入
|
|
|
|
|
|
|
|
+ viewAccountData := comm.MakeProjectAccountVM(projectAccountInfo)
|
|
|
|
+ return &viewAccountData, nil
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// TODO -替换jwt
|
|
|
|
+// 验证项目用户登陆相关
|
|
|
|
+// func (s *loginService) ValidProjectAccount(loginData viewmodels.Login, writer http.ResponseWriter) error {
|
|
|
|
+// projectInfo := models.CmProject{}
|
|
|
|
+// // 工程项目是否存在
|
|
|
|
+// projectInfo.Code = loginData.Code
|
|
|
|
+// s.projectDao.Get(&projectInfo)
|
|
|
|
+// if projectInfo.Id == 0 {
|
|
|
|
+// return errors.New("工程建设管理员还未创建项目,禁止登录")
|
|
|
|
+// }
|
|
|
|
+// // 获得项目用户
|
|
|
|
+// projectAccountInfo := s.projectAccountDao.Get(projectInfo.UserId, projectInfo.Id)
|
|
|
|
+// if projectAccountInfo.Id == 0 {
|
|
|
|
+// return errors.New("工程建设管理员不存在,禁止登录")
|
|
|
|
+// }
|
|
|
|
+// // 验证密码-TODO
|
|
|
|
+// Jlzf := lib.NewJlzf()
|
|
|
|
+// err := Jlzf.LoginValid(loginData)
|
|
|
|
+// if err != nil {
|
|
|
|
+// return err
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// // 加密用户标识
|
|
|
|
+// identity, err := comm.AesEncrypt(strconv.Itoa(projectAccountInfo.Id), conf.CookieSecret)
|
|
|
|
+// if err != nil {
|
|
|
|
+// return err
|
|
|
|
+// }
|
|
|
|
+// // 加密项目标识
|
|
|
|
+// projectId, err := comm.AesEncrypt(strconv.Itoa(projectAccountInfo.ProjectId), conf.CookieSecret)
|
|
|
|
+// if err != nil {
|
|
|
|
+// return err
|
|
|
|
+// }
|
|
|
|
+// // jwt token
|
|
|
|
+// token := jwt.NewTokenWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
|
|
|
|
+// // 根据需求,可以存一些必要的数据
|
|
|
|
+// "identity": identity,
|
|
|
|
+// "project": projectId,
|
|
|
|
+// // 签发人
|
|
|
|
+// "iss": "cm",
|
|
|
|
+// // 签发时间
|
|
|
|
+// "iat": time.Now().Unix(),
|
|
|
|
+// // 设定过期时间,便于测试,设置7天过期
|
|
|
|
+// "exp": time.Now().Add(72 * time.Hour * time.Duration(1)).Unix(),
|
|
|
|
+// })
|
|
|
|
+
|
|
|
|
+// // 使用设置的秘钥,签名生成jwt字符串
|
|
|
|
+// tokenString, _ := token.SignedString([]byte(conf.SignSecret))
|
|
|
|
+// fmt.Println(tokenString)
|
|
|
|
+// maxAge := 60 * 60 * 24 * 7
|
|
|
|
+// // params := url.Values{}
|
|
|
|
+// // params.Add("token", tokenString)
|
|
|
|
+// c := &http.Cookie{
|
|
|
|
+// Name: "cm",
|
|
|
|
+// Value: tokenString, //params.Encode(),
|
|
|
|
+// Path: "/",
|
|
|
|
+// MaxAge: maxAge,
|
|
|
|
+// //HttpOnly: true,
|
|
|
|
+// }
|
|
|
|
+// http.SetCookie(writer, c)
|
|
|
|
+
|
|
|
|
+// // TODO--分布式会话--后续需要在加入
|
|
|
|
+
|
|
|
|
+// return nil
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// 登出
|
|
|
|
+func (s *loginService) Out(ctx iris.Context) error {
|
|
|
|
+ // 作废jwt token
|
|
|
|
+
|
|
|
|
+ // 移除cookie
|
|
|
|
+ ctx.RemoveCookie("cm")
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
|
|
|
|
@@ -165,3 +211,23 @@ func (s *loginService) ValidProjectAccount(loginData viewmodels.Login, writer ht
|
|
// Account: ctx.FormValue("account"),
|
|
// Account: ctx.FormValue("account"),
|
|
// Password: ctx.FormValue("password"),
|
|
// Password: ctx.FormValue("password"),
|
|
// }
|
|
// }
|
|
|
|
+
|
|
|
|
+// // 加密用户标识 生成数字证书
|
|
|
|
+// identity, err := comm.AesEncrypt(strconv.Itoa(projectAccountInfo.Id), conf.CookieSecret)
|
|
|
|
+// if err != nil {
|
|
|
|
+// return err
|
|
|
|
+// }
|
|
|
|
+// digitalToken := comm.CreateSign(conf.CookieSecret + strconv.Itoa(projectAccountInfo.Id))
|
|
|
|
+
|
|
|
|
+// // 设置cookie
|
|
|
|
+// maxAge := 60 * 60 * 24 * 7
|
|
|
|
+// params := url.Values{}
|
|
|
|
+// params.Add("identity", identity)
|
|
|
|
+// params.Add("digitalToken", digitalToken)
|
|
|
|
+// c := &http.Cookie{
|
|
|
|
+// Name: "cm",
|
|
|
|
+// Value: params.Encode(),
|
|
|
|
+// Path: "/",
|
|
|
|
+// MaxAge: maxAge,
|
|
|
|
+// }
|
|
|
|
+// http.SetCookie(writer, c)
|