|
@@ -10,23 +10,26 @@ import (
|
|
|
"errors"
|
|
|
"log"
|
|
|
"net/http"
|
|
|
- "net/url"
|
|
|
"strconv"
|
|
|
+ "time"
|
|
|
|
|
|
+ "github.com/iris-contrib/middleware/jwt"
|
|
|
"github.com/kataras/iris/v12"
|
|
|
"go.mod/comm"
|
|
|
"go.mod/conf"
|
|
|
"go.mod/dao"
|
|
|
"go.mod/datasource"
|
|
|
"go.mod/lib"
|
|
|
+ "go.mod/models"
|
|
|
"go.mod/web/viewmodels"
|
|
|
)
|
|
|
|
|
|
//定义项目用户Service接口
|
|
|
type LoginService interface {
|
|
|
ValidRule(ctx iris.Context) (viewmodels.Login, error)
|
|
|
- ValidProjectAccount(viewmodels.Login, http.ResponseWriter) (*viewmodels.ProjectAccount, error)
|
|
|
+ ValidProjectAccount(viewmodels.Login, http.ResponseWriter) (error, string)
|
|
|
Out(ctx iris.Context) error
|
|
|
+ CrtateAccount(viewmodels.Login) error
|
|
|
}
|
|
|
|
|
|
//返回service操作类
|
|
@@ -61,142 +64,149 @@ func (s *loginService) ValidRule(ctx iris.Context) (viewmodels.Login, error) {
|
|
|
}
|
|
|
|
|
|
// 验证项目用户登陆相关
|
|
|
-func (s *loginService) ValidProjectAccount(loginData viewmodels.Login, writer http.ResponseWriter) (*viewmodels.ProjectAccount, error) {
|
|
|
+// func (s *loginService) ValidProjectAccount(loginData viewmodels.Login, writer http.ResponseWriter) (*viewmodels.ProjectAccount, error) {
|
|
|
|
|
|
- // 1-1.工程项目是否存在
|
|
|
- projectInfo := s.projectDao.GetCode(loginData.Code)
|
|
|
- if projectInfo.Id == 0 {
|
|
|
- return nil, errors.New("工程建设管理员还未创建项目,禁止登录")
|
|
|
- }
|
|
|
- // 1-2.获得项目管理员
|
|
|
- projectAdminInfo := s.projectAccountDao.Get(projectInfo.UserId, projectInfo.Id)
|
|
|
-
|
|
|
- if projectAdminInfo.Id == 0 {
|
|
|
- return nil, errors.New("工程建设管理员不存在,禁止登录")
|
|
|
- }
|
|
|
-
|
|
|
- // 2.验证登陆-临时
|
|
|
- projectAccountInfo := s.projectAccountDao.GetAccount(loginData.Account)
|
|
|
- if projectAccountInfo.Id == 0 {
|
|
|
- return nil, errors.New("未找到该账号")
|
|
|
- }
|
|
|
- // 2.账号停用
|
|
|
- if projectAccountInfo.Enable == 0 {
|
|
|
- return nil, errors.New("该账号已被停用")
|
|
|
- }
|
|
|
-
|
|
|
- password := comm.CreatePasswordSign(loginData.Password, loginData.Account)
|
|
|
-
|
|
|
- if projectAccountInfo.Password != password {
|
|
|
- return nil, errors.New("密码不正确")
|
|
|
- }
|
|
|
-
|
|
|
- // 验证密码-TODO
|
|
|
- Jlzf := lib.NewJlzf()
|
|
|
- err := Jlzf.LoginValid(loginData)
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
-
|
|
|
- // 加密用户标识
|
|
|
- identity, err := comm.AesEncrypt(strconv.Itoa(projectAccountInfo.Id), conf.CookieSecret)
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
- // 加密项目标识
|
|
|
- projectId, err := comm.AesEncrypt(strconv.Itoa(projectAccountInfo.ProjectId), conf.CookieSecret)
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
+// // 1-1.工程项目是否存在
|
|
|
+// projectInfo := s.projectDao.GetCode(loginData.Code)
|
|
|
+// if projectInfo.Id == 0 {
|
|
|
+// return nil, errors.New("工程建设管理员还未创建项目,禁止登录")
|
|
|
+// }
|
|
|
+// // 1-2.获得项目管理员
|
|
|
+// projectAdminInfo := s.projectAccountDao.Get(projectInfo.UserId, projectInfo.Id)
|
|
|
|
|
|
- digitalToken := comm.CreateSign(conf.CookieSecret + strconv.Itoa(projectAccountInfo.Id))
|
|
|
-
|
|
|
- // 设置cookie
|
|
|
- maxAge := 60 * 60 * 24 * 7
|
|
|
- params := url.Values{}
|
|
|
- params.Add("identity", identity)
|
|
|
- params.Add("attachedIdentity", projectId)
|
|
|
- params.Add("digitalToken", digitalToken)
|
|
|
- c := &http.Cookie{
|
|
|
- Name: "cm",
|
|
|
- Value: params.Encode(),
|
|
|
- Path: "/",
|
|
|
- MaxAge: maxAge,
|
|
|
- HttpOnly: true,
|
|
|
- }
|
|
|
- http.SetCookie(writer, c)
|
|
|
+// if projectAdminInfo.Id == 0 {
|
|
|
+// return nil, errors.New("工程建设管理员不存在,禁止登录")
|
|
|
+// }
|
|
|
|
|
|
- // TODO--分布式会话--后续需要在加入
|
|
|
+// 2.验证登陆-临时
|
|
|
+// projectAccountInfo := s.projectAccountDao.GetAccount(loginData.Account)
|
|
|
+// if projectAccountInfo.Id == 0 {
|
|
|
+// return nil, errors.New("未找到该账号")
|
|
|
+// }
|
|
|
+// // 2.账号停用
|
|
|
+// if projectAccountInfo.Enable == 0 {
|
|
|
+// return nil, errors.New("该账号已被停用")
|
|
|
+// }
|
|
|
|
|
|
- viewAccountData := comm.MakeProjectAccountVM(projectAccountInfo)
|
|
|
- return &viewAccountData, nil
|
|
|
-}
|
|
|
+// password := comm.CreatePasswordSign(loginData.Password, loginData.Account)
|
|
|
|
|
|
-// 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("工程建设管理员不存在,禁止登录")
|
|
|
+// if projectAccountInfo.Password != password {
|
|
|
+// return nil, errors.New("密码不正确")
|
|
|
// }
|
|
|
+
|
|
|
// // 验证密码-TODO
|
|
|
// Jlzf := lib.NewJlzf()
|
|
|
// err := Jlzf.LoginValid(loginData)
|
|
|
// if err != nil {
|
|
|
-// return err
|
|
|
+// return nil, err
|
|
|
// }
|
|
|
|
|
|
// // 加密用户标识
|
|
|
// identity, err := comm.AesEncrypt(strconv.Itoa(projectAccountInfo.Id), conf.CookieSecret)
|
|
|
// if err != nil {
|
|
|
-// return err
|
|
|
+// return nil, err
|
|
|
// }
|
|
|
// // 加密项目标识
|
|
|
// projectId, err := comm.AesEncrypt(strconv.Itoa(projectAccountInfo.ProjectId), conf.CookieSecret)
|
|
|
// 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
|
|
|
-// // 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{
|
|
|
-// Name: "cm",
|
|
|
-// Value: tokenString, //params.Encode(),
|
|
|
-// Path: "/",
|
|
|
-// MaxAge: maxAge,
|
|
|
-// //HttpOnly: true,
|
|
|
+// Name: "cm",
|
|
|
+// Value: params.Encode(),
|
|
|
+// Path: "/",
|
|
|
+// MaxAge: maxAge,
|
|
|
+// HttpOnly: true,
|
|
|
// }
|
|
|
// http.SetCookie(writer, c)
|
|
|
|
|
|
// // TODO--分布式会话--后续需要在加入
|
|
|
|
|
|
-// return nil
|
|
|
+// viewAccountData := comm.MakeProjectAccountVM(projectAccountInfo)
|
|
|
+// return &viewAccountData, nil
|
|
|
// }
|
|
|
|
|
|
+func (s *loginService) CrtateAccount(loginData viewmodels.Login) error {
|
|
|
+ newPsw := comm.CreatePasswordSign(loginData.Password, loginData.Account)
|
|
|
+ account := &models.CmProjectAccount{Account: loginData.Account, Password: newPsw}
|
|
|
+
|
|
|
+ err := s.projectAccountDao.Add(account)
|
|
|
+
|
|
|
+ return err
|
|
|
+}
|
|
|
+
|
|
|
+// TODO -替换jwt
|
|
|
+// 验证项目用户登陆相关
|
|
|
+func (s *loginService) ValidProjectAccount(loginData viewmodels.Login, writer http.ResponseWriter) (error, string) {
|
|
|
+ // projectInfo := models.CmProject{}
|
|
|
+ // 工程项目是否存在
|
|
|
+ // projectInfo.Code = loginData.Code
|
|
|
+ // s.projectDao.Get(&projectInfo)
|
|
|
+ // if projectInfo.Id == 0 {
|
|
|
+ // return errors.New("工程建设管理员还未创建项目,禁止登录")
|
|
|
+ // }
|
|
|
+ // 获得项目用户
|
|
|
+ projectAccountInfo := s.projectAccountDao.GetAccount(loginData.Account)
|
|
|
+ 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,
|
|
|
+ // 签发人
|
|
|
+ "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))
|
|
|
+ // 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, tokenString
|
|
|
+}
|
|
|
+
|
|
|
// 登出
|
|
|
func (s *loginService) Out(ctx iris.Context) error {
|
|
|
// 作废jwt token
|