package admin import ( "ulink-admin/frame" "ulink-admin/modules/system/models/model" "ulink-admin/modules/system/models/req" service2 "ulink-admin/modules/system/service" "ulink-admin/pkg/cache" "ulink-admin/pkg/captcha" "ulink-admin/pkg/jwt/admin" "ulink-admin/pkg/library/tree/tree_menu" "ulink-admin/pkg/tool" ) type LoginApi struct { LoginService *service2.LoginService `inject:""` PermissionService *service2.PermissionService `inject:""` UserService *service2.UserService `inject:""` MenuService *service2.MenuService `inject:""` } // Login 登录 // @Summary 登录接口 // @Description 用户登录接口 // @Tags 用户登录相关接口 // @Accept application/json // @Produce application/json // @Param data body req.LoginBody true "登录实体对象" // @Success 200 {object} resp.Response{data=map[stirng]string,msg=string} "返回登录结果" // @Router /login [post] func (a LoginApi) Login(c *frame.Context) { loginBody := req.LoginBody{} err := c.BindJSON(&loginBody) c.ValidteError(err, loginBody) isValidated := captcha.VerifyCaptcha(loginBody.Uuid, loginBody.Code) if !isValidated { c.Error("验证码错误") return } m := make(map[string]string) priKey := "MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY" + "7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN" + "PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA" + "kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow" + "cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv" + "DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh" + "YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3" + "UP8iWi1Qw0Y=" priKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDMZzL52gRgjJWN\n4ptiX9Qm6ucfBmd5+j8mDH7JrcG2qOBGl03rYTUGCcIq2xOdSFy93Zr6h2dFL73V\n5Du7QyN6w1nc2w4eUAXw7HPD8YyGaMFCSe38LAAsZS7Wl5pmGkpizCYVdwlDBvGk\n/A7FD1SJH5zIJagR05Ox/78LDsmL4YLpN3F2UpixcHp8jn0cx57uYNiq8k4KUS9/\ncwlFsUPRn1c/+Bi0hv+DyWLuTMb5Unzneqwcc1uBfCaams/8ujzt61rWBUI8+hyv\nmewTWp5dR7vqyzCir6/Tkr6prxsDhZB70JZIKXYpD6pFK6DGTPPgrhEO5jaEsI8t\n5+pzLVkrAgMBAAECggEAFwB6BRHasj6/ybK5h61/A04l6iDfXiOiHZcEYY+zH+oL\nKwZ110oeHGrWtdnncCinfxpECXNZVLjVpQ9FBYK9qF/5adgg05pvwLfrIx64kJuT\nO/Fz3Y/aCSTty2pODrVgr5OHqZy2pxtN8CIJS3W5LqEnFILgUfk8QqikCAuG9L2d\nPqZ+SPw1mcDXR6XGDc43ye4EpMfg3c0ngrvJj33ypkk/4MqxA7oEi209NqDr7arH\nocNf+piQFg1XBC7+yNiteiG+CffXE5PaVzbKcbeOXaNv6038SRbSDl7eGHdXqkac\nlgJw45vBn1lt6Zmm2uy8STegiy5nQdK5AqbxaAsu6QKBgQD5lPxIRdUowmMEXsDQ\nqCcsd31SL7WRsmas7SJ1fDRTE9MhWfiY9tdKwzxwpYMaZNo8tentkCkfWcMb4aCc\nMfRSUdOZvOZ4GLj5BeXCOm3GNyx37UunFjiFjH1plYN2Jc+0v/jJvAeTXEYwpVV+\nFA0ejKwj6LrW37nPkjvxA8XSnwKBgQDRqMxc5LtGAM9Kkh76rQ8Nnw6eF6peN0lD\nOe2RoA8kUKrG/hpfaOJXXJ9kEwyUS8ItONrLLyOle/0KQM3yH2tXisx1VQmCe1lW\nGM/XNyr5xyRFdQOzGKDZW5Dj8PUba5pWLPfOjxhd61TnUBVvJYHHTmMgvNIdO5RP\nt/+O+W7Z9QKBgHxhsH0AOGQQxDIIWsViF+vEPPN5jV5n712c7IBqftUsWxsS8J6i\n3daHiBaHldfQjSaWbleTcbsLC/5YKqfNCXsBBphmmOEfSQfp1YA/iDexhXrbCsnh\nfBeqVVIKTjLSUzo8Neurxoa9BMn3i6zCp2sjJiLbOEofw0VcFn1dqPf3AoGAOrqj\n9GmGJAfaCTOBRgrwKoqhl5tdd+LYvOIfMCm71BpcnD1VueAxdvNVGr1TSr8l93Dz\nqPLdc1+V9CdPCUHP2cfhmgRmE4zl634rykeD3E/yUxqCHMsLU5eYsKEwp6uuofEa\nwVvIIZboQ5tlRasl/WRx1BvQZ6vm0aXjCnPIn3kCgYEAszDHu3tjh41APRf3We9x\nov2GtBUq+4n+6c66bl4dODER3Rj/ZTP1phYeYmdw4kgI/j4eabQSBlkWqx5NOP92\nte+NXDQc2OIuFzH0G16d3dLidHaI4WY/LDRxNS8/owzyDZGJAoPtkTHHR+0W32Y8\nLr76/MhhtQnxEu6pHWer6Nk=" dpwd, eorr := tool.RSADecryptByPrivateKey(loginBody.Password, priKey) if eorr != nil { c.Error("密码解密错误") return } loginBody.Password = string(dpwd) s := a.LoginService.Login(loginBody.UserName, loginBody.Password) //将token存入到redis中 admin.SaveRedisToken(s) m["token"] = s c.Ok(m) } // captcha 获取验证码接口 // @Summary 获取验证码接口 // @Description 获取验证码接口 // @Tags 用户登录相关接口 // @Accept application/json // @Produce application/json // @Success 200 {object} resp.Response{data=captcha.CaptchaInfo,msg=string} "返回验证码查询" // @Router /getCaptcha [get] func (a LoginApi) GetCaptcha(c *frame.Context) { id, image, error := captcha.CreateCode() captchaInfo := new(captcha.CaptchaInfo) if error != nil { frame.Throw(frame.BUSINESS_CODE, "获取验证码错误") } captchaInfo.Id = id captchaInfo.Image = image c.Ok(captchaInfo) } // GetUserInfo 获取用户信息 // Login 用户详情查询接口 // @Summary 用户详情查询接口 // @Description 用户详情查询接口 // @Tags 用户登录相关接口 // @Accept application/json // @Produce application/json // @Param Authorization header string false "Bearer 令牌" // @Success 200 {object} resp.Response{data=map[stirng]interface{},msg=string} "返回用户详情查询" // @Router /getInfo [get] func (a LoginApi) GetUserInfo(c *frame.Context) { m := make(map[string]interface{}) user := a.LoginService.LoginUser(c) record := new(model.SysUser) a.UserService.GetById(user.Id, record) //查询用户角色集合 roleKeys := a.PermissionService.GetRolePermissionByUserId(record) // 权限集合 perms := a.PermissionService.GetMenuPermission(record) menus := a.MenuService.GetMenuTreeByUserId(user) systemMenus := tree_menu.SystemMenus{} systemMenus = *menus array := systemMenus.ConvertToINodeArray() generateTree := tree_menu.GenerateTree(array, nil) m["roles"] = roleKeys m["permissions"] = perms m["user"] = user m["menu"] = generateTree c.Ok(m) } // GetRouters 根据用户ID查询菜单 // Login 登录 // @Summary 用户菜单查询接口 // @Description 用户菜单查询接口 // @Tags 用户登录相关接口 // @Accept application/json // @Produce application/json // @Param Authorization header string false "Bearer 令牌" // @Success 200 {object} resp.Response{data=[]tree_menu.Tree,msg=string} "返回用户菜单查询" // @Router /getRouters [get] func (a LoginApi) GetRouters(c *frame.Context) { //获取等钱登录用户 user := a.LoginService.LoginUser(c) menus := a.MenuService.GetMenuTreeByUserId(user) systemMenus := tree_menu.SystemMenus{} systemMenus = *menus array := systemMenus.ConvertToINodeArray() generateTree := tree_menu.GenerateTree(array, nil) c.Ok(generateTree) } // Logout 退出登录 // @Summary 退出登录接口 // @Description 退出登录接口 // @Tags 用户登录相关接口 // @Accept application/json // @Produce application/json // @Param Authorization header string false "Bearer 令牌" // @Success 200 {object} resp.Response "返回退出结果" // @Router /logout [post] func (a LoginApi) Logout(c *frame.Context) { //删除Redis缓存 name := admin.GetJWTRedisKey(c) cache.RemoveKey(name) }