package v1 // //// 当开启多服务器部署时,替换下面的配置,使用redis共享存储验证码 //// var store = captcha.NewDefaultRedisStore() //var store = base64Captcha.DefaultMemStore // //// Login //// //// @Tags Base //// @Summary 用户登录 //// @Produce application/json //// @Param object body request.Login true "查询参数" //// @Success 200 {object} contextx.Response{data=response.LoginResponse} "成功" //// @Router /api/base/login [post] //func (slf *BaseApi) Login(c *gin.Context) { // var params request.Login // ctx, ok := contextx.NewContext(c, ¶ms) // if !ok { // return // } // // // 判断验证码是否开启 // key := c.ClientIP() // //openCaptcha := conf.Conf.Captcha.OpenCaptcha // 是否开启防暴次数 // //openCaptchaTimeOut := conf.Conf.Captcha.OpenCaptchaTimeOut // 缓存超时时间 // //v, ok := constvar.BlackCache.Get(key) // //if !ok { // // constvar.BlackCache.Set(key, 1, time.Second*time.Duration(openCaptchaTimeOut)) // //} // // //var oc = openCaptcha == 0 || convertx.InterfaceToInt(v) > openCaptcha // 0 表示每次登录都需要验证码 或者当前次数已超过防暴次数 // // //if !oc || store.Verify(params.CaptchaId, params.Captcha, true) { // u := &model.User{Username: params.Username, Password: params.Password} // user, errCode := userService.Login(u) // if errCode != ecode.OK { // logx.Errorf("登陆失败! 用户名不存在或者密码错误! errCode:%v", errCode) // // 验证码次数+1 // _ = constvar.BlackCache.Increment(key, 1) // ctx.Fail(errCode) // return // } // // 赋值菜单ID列表 // //user.MenuIds, _ = menuService.GetUserMenuIds(user.UUID, user.UserType) // slf.TokenNext(ctx, *user) // return // //} // // // 验证码次数+1 // //_ = constvar.BlackCache.Increment(key, 1) // //ctx.Fail(ecode.CaptchaErr) //} // //// TokenNext 登录以后签发jwt //func (slf *BaseApi) TokenNext(ctx *contextx.Context, user model.User) { // logx.Infof("TokenNext user:%+v", user) // j := &utils.JWT{SigningKey: []byte(conf.Conf.JWT.SigningKey)} // 唯一签名 // claims := j.CreateClaims(request.BaseClaims{ // UserId: user.UUID, // Username: user.Username, // UserType: user.UserType, // AuthorityId: user.AuthorityId, // }) // token, err := j.CreateToken(claims) // if err != nil { // logx.Errorf("创建token失败! err:%v", err) // ctx.Fail(ecode.CreateTokenErr) // return // } // if !conf.Conf.System.UseMultipoint { // 不允许多点登录 // ctx.OkWithDetailed(response.LoginResponse{ // User: user, // Token: token, // //ExpiresAt: claims.StandardClaims.ExpiresAt * 1000, // }) // return // } // // if jwtStr, err := jwtService.GetRedisJWT(user.Username); err == redis.Nil { // redis无JWT数据 // if err := jwtService.SetRedisJWT(token, user.Username); err != nil { // logx.Errorf("设置登录状态失败! err:%v", err) // ctx.Fail(ecode.RedisErr) // return // } // ctx.OkWithDetailed(response.LoginResponse{ // User: user, // Token: token, // //ExpiresAt: claims.StandardClaims.ExpiresAt * 1000, // }) // } else if err != nil { // redis获取JWT报错 // logx.Errorf("设置登录状态失败! err:%v", err) // ctx.Fail(ecode.RedisErr) // } else { // 成功获取redis的JWT,旧的作废 // var blackJWT model.JwtBlacklist // blackJWT.Jwt = jwtStr // if err := jwtService.JsonInBlacklist(blackJWT); err != nil { // ctx.Fail(ecode.DBErr) // return // } // if err := jwtService.SetRedisJWT(token, user.Username); err != nil { // ctx.Fail(ecode.RedisErr) // return // } // ctx.OkWithDetailed(response.LoginResponse{ // User: user, // Token: token, // //ExpiresAt: claims.StandardClaims.ExpiresAt * 1000, // }) // } //} // //// Register //// //// @Tags User //// @Summary 注册账号 //// @Produce application/json //// @Param object body request.Register true "查询参数" //// @Success 200 {object} contextx.Response{data=response.UserResponse} "成功" //// @Router /api/user/register [post] //func (slf *BaseApi) Register(c *gin.Context) { // var params request.Register // ctx, ok := contextx.NewContext(c, ¶ms) // if !ok { // return // } // // userInfo := utils.GetUserInfo(c) // if len(userInfo.UserId) <= 0 { // ctx.Fail(ecode.UnknownErr) // return // } // // if len(params.Username) == 0 || len(params.Password) == 0 || len(params.NickName) == 0 || params.AuthorityId == 0 || len(params.RePassword) == 0 || params.DepartmentId == 0 { // ctx.Fail(ecode.ParamsErr) // return // } // // var userId = fmt.Sprintf("u%v", snowflake.GenerateId()) // var passWord = encrypt.BcryptHash(params.Password) // var userType constvar.UserType // // user := &model.User{UUID: userId, Username: params.Username, UserType: userType, NickName: params.NickName, Password: passWord, HeaderImg: params.HeaderImg, Phone: params.Phone, Email: params.Email, DepartmentId: params.DepartmentId, AuthorityId: params.AuthorityId} // userReturn, errCode := userService.Register(user) // if errCode != ecode.OK { // ctx.Fail(errCode) // return // } // // //if user.UserType == constvar.UserTypePrimary { // 主账户创建对应的数据库用户和排程数据库 // // err := model.NewMysql().CreateDatabase(user.Username) // // if err != nil { // // ctx.Fail(ecode.CreateDatabaseErr) // // return // // } // // // // defaultPwd := fmt.Sprintf("%v@Basic2023", user.Username) // // err = model.NewMysql().CreateUser(user.Username, defaultPwd, user.Username) // // if err != nil { // // ctx.Fail(ecode.CreateDatabaseUserErr) // // return // // } // //} // // ctx.OkWithDetailed(response.UserResponse{User: *userReturn}) //} // //// ChangePassword //// //// @Tags User //// @Summary 用户修改密码 //// @Produce application/json //// @Param object body request.ChangePasswordReq true "查询参数" //// @Success 200 {object} contextx.Response{} "成功" //// @Router /api/user/changePassword [post] //func (slf *BaseApi) ChangePassword(c *gin.Context) { // var params request.ChangePasswordReq // ctx, ok := contextx.NewContext(c, ¶ms) // if !ok { // return // } // // u := &model.User{UUID: utils.GetUserID(c), Password: params.Password} // _, errCode := userService.ChangePassword(u, params.NewPassword) // if errCode != ecode.OK { // ctx.Fail(errCode) // return // } // ctx.Ok() //} // //// GetUserList //// //// @Tags User //// @Summary 分页获取用户列表(不传分页参数,获取全部) //// @Produce application/json //// @Param object body request.GetUserList true "查询参数" //// @Success 200 {object} contextx.Response{data=response.PageResult} "成功" //// @Router /api/user/getUserList [post] //func (slf *BaseApi) GetUserList(c *gin.Context) { // var params request.GetUserList // ctx, ok := contextx.NewContext(c, ¶ms) // if !ok { // return // } // // userInfo := utils.GetUserInfo(c) // if len(userInfo.UserId) <= 0 || len(userInfo.ParentId) == 0 { // ctx.Fail(ecode.UnknownErr) // return // } // // ctx.OkWithDetailed(response.PageResult{ // Page: params.Page, // PageSize: params.PageSize, // }) //} // //// DeleteUser //// //// @Tags User //// @Summary 删除用户 //// @Produce application/json //// @Param object body request.DeleteUserReq true "查询参数" //// @Success 200 {object} contextx.Response{} "成功" //// @Router /api/user/deleteUser [delete] //func (slf *BaseApi) DeleteUser(c *gin.Context) { // var params request.DeleteUserReq // ctx, ok := contextx.NewContext(c, ¶ms) // if !ok { // return // } // // if len(params.UserId) <= 0 { // ctx.Fail(ecode.ParamsErr) // return // } // // userInfo := utils.GetUserInfo(c) // if userInfo.UserType != constvar.UserTypePrimary || userInfo.UserId == params.UserId { // ctx.Fail(ecode.NoPowerErr) // return // } // // err := userService.DeleteUser(params.UserId) // if err != nil { // logx.Errorf("删除失败! err:%v", err) // ctx.Fail(ecode.DBErr) // return // } // ctx.Ok() //} // //// SetUserInfo //// //// @Tags User //// @Summary 设置用户信息 //// @Produce application/json //// @Param object body request.ChangeUserInfo true "查询参数" //// @Success 200 {object} contextx.Response{} "成功" //// @Router /api/user/setUserInfo [post] //func (slf *BaseApi) SetUserInfo(c *gin.Context) { // var params request.ChangeUserInfo // ctx, ok := contextx.NewContext(c, ¶ms) // if !ok { // return // } // // err := userService.SetUserInfo(model.User{ // UUID: params.ID, // NickName: params.NickName, // HeaderImg: params.HeaderImg, // Phone: params.Phone, // Email: params.Email, // Pos: params.Pos, // }) // if err != nil { // logx.Errorf("设置失败! err:%v", err) // ctx.Fail(ecode.DBErr) // return // } // ctx.Ok() //} // //// SetSelfInfo //// //// @Tags User //// @Summary 设置用户信息 //// @Produce application/json //// @Param object body request.ChangeUserInfo true "查询参数" //// @Success 200 {object} contextx.Response{} "成功" //// @Router /api/user/setSelfInfo [post] //func (slf *BaseApi) SetSelfInfo(c *gin.Context) { // var params request.ChangeUserInfo // ctx, ok := contextx.NewContext(c, ¶ms) // if !ok { // return // } // // params.ID = utils.GetUserID(c) // err := userService.SetUserInfo(model.User{ // UUID: params.ID, // NickName: params.NickName, // HeaderImg: params.HeaderImg, // Phone: params.Phone, // Email: params.Email, // Pos: params.Pos, // }) // if err != nil { // logx.Errorf("设置失败! err:%v", err) // ctx.Fail(ecode.DBErr) // return // } // ctx.Ok() //} // //// GetUserInfo //// //// @Tags User //// @Summary 获取自身信息 //// @Produce application/json //// @Success 200 {object} contextx.Response{} "成功" //// @Router /api/user/getUserInfo [post] //func (slf *BaseApi) GetUserInfo(c *gin.Context) { // ctx, ok := contextx.NewContext(c, nil) // if !ok { // return // } // // id := utils.GetUserID(c) // ReqUser, err := userService.GetUserInfo(id) // if err != nil { // logx.Errorf("获取失败! err:%v", err) // ctx.Fail(ecode.DBErr) // return // } // ctx.OkWithDetailed(response.UserResponse{ // User: *ReqUser, // }) //} // //// ResetPassword //// //// @Tags User //// @Summary 重置用户密码 //// @Produce application/json //// @Param object body model.User true "查询参数" //// @Success 200 {object} contextx.Response{} "成功" //// @Router /api/user/resetPassword [post] //func (slf *BaseApi) ResetPassword(c *gin.Context) { // var params model.User // ctx, ok := contextx.NewContext(c, ¶ms) // if !ok { // return // } // // err := userService.ResetPassword(params.UUID) // if err != nil { // logx.Errorf("重置失败! err:%v", err) // ctx.Fail(ecode.DBErr) // return // } // ctx.Ok() //}