123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- /*
- * @description:登陆相关数据操作
- * @Author: CP
- * @Date: 2020-09-02 09:56:28
- * @FilePath: \construction_management\services\login_service.go
- */
- package services
- import (
- "errors"
- "log"
- "net/http"
- "net/url"
- "strconv"
- "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) error
- }
- //返回service操作类
- type loginService struct {
- projectAccountDao *dao.ProjectAccountDao
- projectDao *dao.ProjectDao
- }
- //创建项目用户service
- func NewLoginService() LoginService {
- return &loginService{
- projectAccountDao: dao.NewProjectAccountDao(datasource.InstanceDbMaster()),
- projectDao: dao.NewProjectDao(datasource.InstanceDbMaster()),
- }
- }
- // 登陆验证
- func (s *loginService) ValidRule(ctx iris.Context) (viewmodels.Login, error) {
- loginVaild := viewmodels.Login{}
- err := ctx.ReadForm(&loginVaild)
- if err != nil {
- log.Println("ReadForm转换异常, error=", err)
- return loginVaild, err
- }
- err = loginVaild.Validate()
- if err != nil {
- log.Println("登录验证, error=", err)
- return loginVaild, err
- }
- return loginVaild, nil
- }
- // 验证项目用户登陆相关
- func (s *loginService) ValidProjectAccount(loginData viewmodels.Login, writer http.ResponseWriter) error {
- projectInfo := models.CmProject{}
- // 工程项目是否存在
- projectInfo.Code = loginData.Code
- s.projectDao.GetOne(&projectInfo)
- if projectInfo.Id == 0 {
- return errors.New("工程建设管理员还未创建拉取项目,禁止登录")
- }
- // 获得项目用户
- projectAccountInfo := s.projectAccountDao.Get(projectInfo.UserId)
- if projectAccountInfo.Id == 0 {
- return errors.New("工程建设管理员不存在,禁止登录")
- }
- // 验证密码
- 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
- }
- 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--分布式会话--后续需要在加入
- return nil
- }
- //fmt.Println(ctx.FormValues())
- // list := ctx.FormValues()
- // loginVaild := viewmodels.Login{}
- // v := reflect.ValueOf(&loginVaild).Elem()
- // for path, values := range list {
- // //fmt.Println(path)
- // //fmt.Println(values)
- // if path != "csrf.Token" {
- // v.FieldByName(Ucfirst(path)).Set(reflect.ValueOf(values[0]))
- // }
- // }
- //fmt.Println(loginVaild)
- // loginVaild := viewmodels.Login{
- // Code: ctx.FormValue("code"),
- // Account: ctx.FormValue("account"),
- // Password: ctx.FormValue("password"),
- // }
|