package controllers import ( "encoding/json" "errors" "fmt" "time" "github.com/GeeTeam/gt3-golang-sdk/geetest" "github.com/astaxie/beego/logs" adminPermissionquery "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/adminPermission/query" adminPermissionService "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/adminPermission/service" adminuserCmd "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/adminUser/command" adminuserquery "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/adminUser/query" adminuserservice "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/adminUser/service" "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/lib" ) type AdminLoginController struct { BaseController } ////Prepare 重写 BaseController 的Prepare方法 func (c *AdminLoginController) Prepare() { c.BaseController.Prepare() //排除登录 以及获取图形验证 urlIn := map[string]int{ "/v1/auth/captcha-init": 1, "/v1/auth/login": 1, } nowUrl := c.Ctx.Input.URL() if _, ok := urlIn[nowUrl]; ok { //跳过校验 return } if ok := c.ValidJWTToken(); !ok { return } } //Login 用户登录 // func (c *AdminLoginController) Login() { // type Paramter struct { // Username string `json:"username"` // Password string `json:"password"` // } // var ( // param Paramter // err error // ) // if err = c.BindJsonData(¶m); err != nil { // c.ResponseError(fmt.Errorf("json解析失败:%s", err)) // return // } // newAdminuserquery := adminuserquery.GetAdminUserQuery{AdminAccount: param.Username} // newAdminUserService := adminuserservice.NewAdminUserService(nil) // adminuser, err := newAdminUserService.GetAdminUser(&newAdminuserquery) // if err != nil { // logs.Error("获取用户数据失败:%s", err) // c.ResponseError(errors.New("用户不存在")) // return // } // if adminuser.Password != param.Password { // c.ResponseError(errors.New("账号或密码错误")) // return // } // if !adminuser.IsUsable { // c.ResponseError(errors.New("用户被禁用")) // } // //TODO // newJwt := lib.NewMyToken(adminuser.Id, 0) // newToken, err := newJwt.CreateJWTToken() // if err != nil { // logs.Error("生成jwt数据失败:%s", err) // c.ResponseError(errors.New("服务异常")) // return // } // rspdata := map[string]interface{}{ // "access": map[string]interface{}{ // "accessToken": newToken, // "expiresIn": lib.JWtExpiresSecond, // }, // } // c.ResponseData(rspdata) // return // } func (c *AdminLoginController) Login() { type Paramter struct { Username string `json:"username"` Password string `json:"password"` } var ( param Paramter err error ) if err = c.BindJsonData(¶m); err != nil { c.ResponseError(fmt.Errorf("json解析失败:%s", err)) return } newAdminuserquery := adminuserquery.GetAdminUserQuery{AdminAccount: param.Username} newAdminUserService := adminuserservice.NewAdminUserService(nil) _ = newAdminuserquery _ = newAdminUserService newJwt := lib.NewMyToken(0, 0) newToken, err := newJwt.CreateJWTToken() if err != nil { logs.Error("生成jwt数据失败:%s", err) c.ResponseError(errors.New("服务异常")) return } rspdata := map[string]interface{}{ "access": map[string]interface{}{ "accessToken": newToken, "expiresIn": lib.JWtExpiresSecond, }, } c.ResponseData(rspdata) return } //CaptchaInit 极验初始化 func (c *AdminLoginController) CaptchaInit() { const ( captchaID = "33a2abf9c5df0d6bc3b89fb39280114b" privateKey = "13320fd2b10199e9a2440a4fbb4d46f7" ) newGeetest := geetest.NewGeetestLib(captchaID, privateKey, 2*time.Second) userip := c.Ctx.Input.IP() _, responseBt := newGeetest.PreProcess("", userip) // c.SetSession("geetest_status", status) var geetestRsp geetest.FailbackRegisterRespnse json.Unmarshal(responseBt, &geetestRsp) //对前端定义的数据格式进行适配。。。 rspData := map[string]interface{}{ "success": geetestRsp.Success, "gt": geetestRsp.GT, "challenge": geetestRsp.Challenge, "newCaptcha": geetestRsp.NewCaptcha, } c.ResponseData(rspData) return } //AdminpPofile 获取登录用户的权限配置 func (c *AdminLoginController) AdminpPofile() { adminId := c.GetUserId() newAdminuserquery := adminuserquery.GetAdminUserQuery{Id: adminId} newAdminUserService := adminuserservice.NewAdminUserService(nil) adminuser, err := newAdminUserService.GetAdminUser(&newAdminuserquery) if err != nil { logs.Error("获取用户数据失败:%s", err) c.ResponseError(errors.New("用户不存在")) return } newPermissionSrv := adminPermissionService.NewAdminPermissionService(nil) allPermission, err := newPermissionSrv.ListAdminPermission(adminPermissionquery.ListAdminPermissionQuery{}) if err != nil { logs.Error("获取权限数据失败:%s", err) c.ResponseError(errors.New("服务异常")) return } //适配前端的数据格式 permissionSlice := make([]map[string]interface{}, 0) for _, v := range allPermission { m := map[string]interface{}{ "code": v.Code, "icon": v.Icon, "parentId": v.ParentId, "sort": v.Sort, "name": v.Name, "id": v.Id, "status": 0, //状态 1-启用 0-禁用,前端需要 } for _, p := range adminuser.Permission { if p.Id == v.Id { m["status"] = 1 break } if p.Id == v.ParentId { m["status"] = 1 break } } permissionSlice = append(permissionSlice, m) } userData := map[string]string{ "id": fmt.Sprint(adminuser.Id), "name": adminuser.AdminName, "adminType": "2", // 管理员类型 1-超级管理员 2-子管理员 } if adminuser.IsDefault { userData["adminType"] = "1" } respData := map[string]interface{}{ "user": userData, "menus": permissionSlice, } c.ResponseData(respData) } func (c *AdminLoginController) PwdUpdate() { //用与适配前端定义的数据结构 type Paramater struct { Pwd string `json:"pwd"` } var ( param Paramater err error ) if err = c.BindJsonData(¶m); err != nil { logs.Error(err) c.ResponseError(errors.New("json数据解析失败")) return } uid := c.GetUserId() newAdminUserService := adminuserservice.NewAdminUserService(nil) cmd := adminuserCmd.UpdateAdminUserPwdCommand{ Id: uid, Password: param.Pwd, } err = newAdminUserService.UpdateAdminPassword(cmd) if err != nil { c.ResponseError(err) return } c.ResponseData(nil) return }