From 5623564c1352206321f2968ef68715125737e83a Mon Sep 17 00:00:00 2001 From: Sun <95302870@qq.com> Date: Sun, 14 Jan 2024 22:50:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0api=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E7=A0=81=E5=B9=B6=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8=E7=9A=84?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/api_v1/common/apiReturn/ErrorCode.go | 21 ++ .../api/api_v1/common/apiReturn/apiReturn.go | 70 ++++--- .../api/api_v1/middleware/LoginInterceptor.go | 4 +- service/api/api_v1/panel/ItemIconGroup.go | 5 +- service/api/api_v1/panel/itemIcon.go | 4 +- service/api/api_v1/panel/users.go | 36 ++-- service/api/api_v1/system/A_ENTER.go | 2 - service/api/api_v1/system/captcha.go | 63 ------ service/api/api_v1/system/file.go | 6 +- service/api/api_v1/system/login.go | 87 --------- service/api/api_v1/system/register.go | 183 ------------------ service/router/system/A_ENTER.go | 2 - service/router/system/captcha.go | 17 -- service/router/system/login.go | 2 - service/router/system/register.go | 14 -- 15 files changed, 91 insertions(+), 425 deletions(-) create mode 100644 service/api/api_v1/common/apiReturn/ErrorCode.go delete mode 100644 service/api/api_v1/system/captcha.go delete mode 100644 service/api/api_v1/system/register.go delete mode 100644 service/router/system/captcha.go delete mode 100644 service/router/system/register.go diff --git a/service/api/api_v1/common/apiReturn/ErrorCode.go b/service/api/api_v1/common/apiReturn/ErrorCode.go new file mode 100644 index 0000000..fb61e08 --- /dev/null +++ b/service/api/api_v1/common/apiReturn/ErrorCode.go @@ -0,0 +1,21 @@ +package apiReturn + +var ErrorCodeMap = map[int]string{ + // -1:操作失败 + 1000: "Not logged in yet", // 还未登录 + 1003: "Incorrect username or password", // 用户名或密码错误 + 1004: "Account disabled or not activated", // 账号已停用或未激活 + 1005: "No current permission for operation", // 当前无权限操作 + 1006: "Account does not exist", // 账号不存在 + + // 数据类 + 1200: "Database error", // 数据库错误 + 1201: "Please keep at least one", // 请至少保留一个 + 1202: "No data record found", // 未找到数据记录 + + 1300: "Upload failed", // 上传失败 + 1301: "Unsupported file format", // 不被支持的格式文件 + + 1400: "Parameter format error", // 参数格式错误 + +} diff --git a/service/api/api_v1/common/apiReturn/apiReturn.go b/service/api/api_v1/common/apiReturn/apiReturn.go index 56129f7..2f76238 100644 --- a/service/api/api_v1/common/apiReturn/apiReturn.go +++ b/service/api/api_v1/common/apiReturn/apiReturn.go @@ -1,7 +1,6 @@ package apiReturn import ( - "sun-panel/api/api_v1/common/apiData/commonApiStructs" "sun-panel/global" "github.com/gin-gonic/gin" @@ -17,8 +16,8 @@ const ( // 数据类 - ERROR_CODE_DATA_DATABASE = 1110 // 错误码 数据类:数据库报错 - ERROR_CODE_DATA_RECORD_NOT_FOUND = 1111 // 错误码 数据类:数据记录未找到 + ERROR_CODE_DATA_DATABASE = 1200 // 错误码 数据类:数据库报错 + ERROR_CODE_DATA_RECORD_NOT_FOUND = 1202 // 错误码 数据类:数据记录未找到 ) func ApiReturn(ctx *gin.Context, code int, msg string, data interface{}) { @@ -60,22 +59,22 @@ func ListData(ctx *gin.Context, list interface{}, count int64) { } // 返回错误 验证码相关错误错误 -func ErrorVerification(ctx *gin.Context, errCode int, codeID string) { - msg := "" - switch errCode { - case ERROR_CODE_VERIFICATION_FAIL: - msg = "验证失败,请重新验证" - case ERROR_CODE_VERIFICATION_MUST: - msg = "需要进一步验证" - } - ApiReturn(ctx, errCode, msg, gin.H{ - "verification": commonApiStructs.VerificationResponse{ - CodeID: codeID, - Result: false, - Message: msg, - }, - }) -} +// func ErrorVerification(ctx *gin.Context, errCode int, codeID string) { +// msg := "" +// switch errCode { +// case ERROR_CODE_VERIFICATION_FAIL: +// msg = "验证失败,请重新验证" +// case ERROR_CODE_VERIFICATION_MUST: +// msg = "需要进一步验证" +// } +// ApiReturn(ctx, errCode, msg, gin.H{ +// "verification": commonApiStructs.VerificationResponse{ +// CodeID: codeID, +// Result: false, +// Message: msg, +// }, +// }) +// } // 返回错误 需要个性化定义的错误|带返回数据的错误 func ErrorCode(ctx *gin.Context, code int, errMsg string, data interface{}) { @@ -100,13 +99,40 @@ func ErrorParamFomat(ctx *gin.Context, errMsg string) { // // 返回错误 数据库 func ErrorDatabase(ctx *gin.Context, errMsg string) { - Error(ctx, global.Lang.GetAndInsert("common.db_error", "[", errMsg, "]")) + // Error(ctx, global.Lang.GetAndInsert("common.db_error", "[", errMsg, "]")) + ErrorByCodeAndMsg(ctx, 1202, errMsg) + } // 返回错误 数据记录未找到 func ErrorDataNotFound(ctx *gin.Context) { - // ErrorCode(ctx,, global.Lang.GetAndInsert("common.db_error", "[", errMsg, "]")) - ErrorCode(ctx, ERROR_CODE_DATA_RECORD_NOT_FOUND, "未找到数据记录", nil) + // ErrorCode(ctx, ERROR_CODE_DATA_RECORD_NOT_FOUND, "未找到数据记录", nil) + ErrorByCode(ctx, 1202) +} + +func ErrorByCode(ctx *gin.Context, code int) { + msg := "Server error" + if v, ok := GetErrorMsgByCode(code); ok { + msg = v + } + ErrorCode(ctx, code, msg, nil) +} + +// 使用错误码的错误并附加错误信息 +func ErrorByCodeAndMsg(ctx *gin.Context, code int, msg string) { + defalurMsg := "Server error" + if v, ok := GetErrorMsgByCode(code); ok { + msg = v + } + ErrorCode(ctx, code, defalurMsg+"["+msg+"]", nil) +} + +func GetErrorMsgByCode(code int) (string, bool) { + if v, ok := ErrorCodeMap[code]; ok { + return v, true + } else { + return "", false + } } // 返回错误 需要个性化定义的错误|带返回数据的错误 diff --git a/service/api/api_v1/middleware/LoginInterceptor.go b/service/api/api_v1/middleware/LoginInterceptor.go index 62ca347..c6c3618 100644 --- a/service/api/api_v1/middleware/LoginInterceptor.go +++ b/service/api/api_v1/middleware/LoginInterceptor.go @@ -18,7 +18,7 @@ func LoginInterceptor(c *gin.Context) { // 没有token信息视为未登录 if cToken == "" { - apiReturn.ErrorCode(c, 1000, global.Lang.Get("login.err_not_login"), nil) + apiReturn.ErrorByCode(c, 1000) c.Abort() // 终止执行后续的操作,一般配合return使用 return } @@ -29,7 +29,7 @@ func LoginInterceptor(c *gin.Context) { token, ok = global.CUserToken.Get(cToken) // 可能已经安全退出或者很久没有使用已过期 if !ok || token == "" { - apiReturn.ErrorCode(c, 1001, global.Lang.Get("login.err_not_login"), nil) + apiReturn.ErrorByCode(c, 1001) c.Abort() // 终止执行后续的操作,一般配合return使用 return } diff --git a/service/api/api_v1/panel/ItemIconGroup.go b/service/api/api_v1/panel/ItemIconGroup.go index dc1a23c..38c1249 100644 --- a/service/api/api_v1/panel/ItemIconGroup.go +++ b/service/api/api_v1/panel/ItemIconGroup.go @@ -1,7 +1,6 @@ package panel import ( - "fmt" "math" "sun-panel/api/api_v1/common/apiData/commonApiStructs" "sun-panel/api/api_v1/common/apiReturn" @@ -74,8 +73,6 @@ func (a *ItemIconGroup) GetList(c *gin.Context) { return err } - fmt.Println("创建了默认分组", defaultGroup.ID) - groups = append(groups, defaultGroup) } @@ -106,7 +103,7 @@ func (a *ItemIconGroup) Deletes(c *gin.Context) { return } else { if math.Abs(float64(len(req.Ids))-float64(count)) < 1 { - apiReturn.Error(c, "至少要保留一个") + apiReturn.ErrorCode(c, 1201, "At least one must be retained", nil) return } diff --git a/service/api/api_v1/panel/itemIcon.go b/service/api/api_v1/panel/itemIcon.go index 79c5ecb..b00c92a 100644 --- a/service/api/api_v1/panel/itemIcon.go +++ b/service/api/api_v1/panel/itemIcon.go @@ -28,7 +28,7 @@ func (a *ItemIcon) Edit(c *gin.Context) { } if req.ItemIconGroupId == 0 { - apiReturn.Error(c, "分组为必填项") + apiReturn.Error(c, "Group is mandatory") return } @@ -70,7 +70,7 @@ func (a *ItemIcon) AddMultiple(c *gin.Context) { for i := 0; i < len(req); i++ { if req[i].ItemIconGroupId == 0 { - apiReturn.Error(c, "分组为必填项") + apiReturn.ErrorParamFomat(c, "Group is mandatory") return } req[i].UserId = userInfo.ID diff --git a/service/api/api_v1/panel/users.go b/service/api/api_v1/panel/users.go index 5da087a..6c38380 100644 --- a/service/api/api_v1/panel/users.go +++ b/service/api/api_v1/panel/users.go @@ -36,14 +36,14 @@ func (a UsersApi) Create(c *gin.Context) { return } - param.Username = strings.Trim(param.Username, " ") + param.Username = strings.TrimSpace(param.Username) if len(param.Username) < 5 { - apiReturn.ErrorParamFomat(c, "账号不得少于5个字符") + apiReturn.ErrorParamFomat(c, "The account must be no less than 5 characters long") return } mUser := models.User{ - Username: strings.Trim(param.Username, " "), + Username: strings.TrimSpace(param.Username), Password: cmn.PasswordEncryption(param.Password), Name: param.Name, HeadImage: param.HeadImage, @@ -54,7 +54,8 @@ func (a UsersApi) Create(c *gin.Context) { // 验证账号是否存在 if _, err := mUser.CheckUsernameExist(param.Username); err != nil { - apiReturn.Error(c, global.Lang.Get("register.mail_exist")) + apiReturn.ErrorByCode(c, 1006) + // apiReturn.Error(c, global.Lang.Get("register.mail_exist")) return } @@ -74,22 +75,11 @@ func (a UsersApi) Deletes(c *gin.Context) { } param := UserIds{} if err := c.ShouldBindBodyWith(¶m, binding.JSON); err != nil { - apiReturn.Error(c, global.Lang.GetAndInsert("common.api_error_param_format", "[", err.Error(), "]")) + apiReturn.ErrorParamFomat(c, err.Error()) c.Abort() return } - // var count int64 - // if err := global.Db.Model(&models.User{}).Count(&count).Error; err != nil { - // apiReturn.ErrorDatabase(c, err.Error()) - // return - // } else { - // if math.Abs(float64(len(param.UserIds))-float64(count)) < 1 { - // apiReturn.Error(c, "至少要保留一个") - // return - // } - // } - txErr := global.Db.Transaction(func(tx *gorm.DB) error { mitemIconGroup := models.ItemIconGroup{} @@ -132,7 +122,7 @@ func (a UsersApi) Deletes(c *gin.Context) { return nil }) if txErr == ErrUsersApiAtLeastKeepOne { - apiReturn.Error(c, "至少要保留一个平台管理") + apiReturn.ErrorByCode(c, 1201) return } else if txErr != nil { apiReturn.ErrorDatabase(c, txErr.Error()) @@ -145,7 +135,7 @@ func (a UsersApi) Deletes(c *gin.Context) { func (a UsersApi) Update(c *gin.Context) { param := models.User{} if err := c.ShouldBindBodyWith(¶m, binding.JSON); err != nil { - apiReturn.Error(c, global.Lang.GetAndInsert("common.api_error_param_format", "[", err.Error(), "]")) + apiReturn.ErrorParamFomat(c, err.Error()) c.Abort() return } @@ -161,8 +151,9 @@ func (a UsersApi) Update(c *gin.Context) { } param.Username = strings.Trim(param.Username, " ") - if len(param.Username) < 5 { - apiReturn.ErrorParamFomat(c, "账号不得少于5个字符") + if len(param.Username) < 3 { + // 账号不得少于3个字符 + apiReturn.ErrorParamFomat(c, "The account must be no less than 3 characters long") return } @@ -181,7 +172,8 @@ func (a UsersApi) Update(c *gin.Context) { if user, err := mUser.CheckUsernameExist(param.Username); err != nil { userInfo = user if user.ID != param.ID { - apiReturn.Error(c, global.Lang.Get("register.mail_exist")) + apiReturn.ErrorByCode(c, 1006) + // apiReturn.Error(c, global.Lang.Get("register.mail_exist")) return } } else { @@ -210,7 +202,7 @@ func (a UsersApi) GetList(c *gin.Context) { param := ParamsStruct{} if err := c.ShouldBindBodyWith(¶m, binding.JSON); err != nil { - apiReturn.Error(c, global.Lang.GetAndInsert("common.api_error_param_format", "[", err.Error(), "]")) + apiReturn.ErrorParamFomat(c, err.Error()) c.Abort() return } diff --git a/service/api/api_v1/system/A_ENTER.go b/service/api/api_v1/system/A_ENTER.go index 490e69e..020bdc1 100644 --- a/service/api/api_v1/system/A_ENTER.go +++ b/service/api/api_v1/system/A_ENTER.go @@ -5,8 +5,6 @@ type ApiSystem struct { LoginApi LoginApi UserApi UserApi FileApi FileApi - CaptchaApi CaptchaApi - RegisterApi RegisterApi NoticeApi NoticeApi ModuleConfigApi ModuleConfigApi MonitorApi MonitorApi diff --git a/service/api/api_v1/system/captcha.go b/service/api/api_v1/system/captcha.go deleted file mode 100644 index 192b9fb..0000000 --- a/service/api/api_v1/system/captcha.go +++ /dev/null @@ -1,63 +0,0 @@ -package system - -import ( - "encoding/base64" - "strconv" - "sun-panel/lib/captcha" - "sun-panel/lib/cmn" - - "github.com/gin-gonic/gin" -) - -type CaptchaApi struct { - ErrMsg string // 错误信息 -} - -// 获取图像 -func (c *CaptchaApi) GetImage(ctx *gin.Context) { - key := cmn.BuildRandCode(16, cmn.RAND_CODE_MODE2) - width, _ := strconv.Atoi(ctx.Param("width")) - height, _ := strconv.Atoi(ctx.Param("height")) - if width == 0 || width > 500 { - width = 120 - } - if height == 0 || height > 500 { - height = 44 - } - // 设置网页验证码的cookie - ctx.SetCookie("CaptchaId", key, 3600, "/", "", false, false) - base64Str := captcha.GenerateCaptchaHandler(key, width, height) - _ = base64Str - // base64 字符串一般会包含头部 data:image/xxx;base64, 需要去除 - baseImg, _ := base64.StdEncoding.DecodeString(base64Str[22:]) - _, _ = ctx.Writer.WriteString(string(baseImg)) -} - -// 获取图像根据验证器id,id从地址栏获取 -func (c *CaptchaApi) GetImageByCaptchaId(ctx *gin.Context) { - // key := cmn.BuildRandCode(16, cmn.RAND_CODE_MODE2) - width, _ := strconv.Atoi(ctx.Param("width")) - height, _ := strconv.Atoi(ctx.Param("height")) - captchaId := ctx.Param("captchaId") - if width == 0 || width > 500 { - width = 120 - } - if height == 0 || height > 500 { - height = 44 - } - // 设置网页验证码的cookie - base64Str := captcha.GenerateCaptchaHandler(captchaId, width, height) - _ = base64Str - // base64 字符串一般会包含头部 data:image/xxx;base64, 需要去除 - baseImg, _ := base64.StdEncoding.DecodeString(base64Str[22:]) - _, _ = ctx.Writer.WriteString(string(baseImg)) -} - -func (c *CaptchaApi) CheckVCode(id, vcode string) { - // Captcha.Store = base64Captcha.DefaultMemStore - // if store.Verify(id, vcode, true) { - // body = map[string]interface{}{"code": 1001, "msg": "ok"} - // } - // w.Header().Set("Content-Type", "application/json; charset=utf-8") - // json.NewEncoder(w).Encode(body) -} diff --git a/service/api/api_v1/system/file.go b/service/api/api_v1/system/file.go index a9e3727..e74ee0a 100644 --- a/service/api/api_v1/system/file.go +++ b/service/api/api_v1/system/file.go @@ -25,7 +25,7 @@ func (a *FileApi) UploadImg(c *gin.Context) { configUpload := global.Config.GetValueString("base", "source_path") f, err := c.FormFile("imgfile") if err != nil { - apiReturn.Error(c, "上传失败") + apiReturn.ErrorByCode(c, 1300) return } else { fileExt := strings.ToLower(path.Ext(f.Filename)) @@ -40,7 +40,7 @@ func (a *FileApi) UploadImg(c *gin.Context) { } if !cmn.InArray(agreeExts, fileExt) { - apiReturn.Error(c, "上传失败!只允许png,jpg,gif,jpeg,svg,ico文件") + apiReturn.ErrorByCode(c, 1301) return } fileName := cmn.Md5(fmt.Sprintf("%s%s", f.Filename, time.Now().String())) @@ -67,7 +67,7 @@ func (a *FileApi) UploadFiles(c *gin.Context) { form, err := c.MultipartForm() if err != nil { - apiReturn.Error(c, "上传失败") + apiReturn.ErrorByCode(c, 1300) return } files := form.File["files[]"] diff --git a/service/api/api_v1/system/login.go b/service/api/api_v1/system/login.go index 027ee4f..94a4ab0 100644 --- a/service/api/api_v1/system/login.go +++ b/service/api/api_v1/system/login.go @@ -3,15 +3,12 @@ package system import ( "strconv" "strings" - "sun-panel/api/api_v1/common/apiData/commonApiStructs" "sun-panel/api/api_v1/common/apiReturn" "sun-panel/api/api_v1/common/base" "sun-panel/global" "sun-panel/lib/cmn" "sun-panel/lib/cmn/systemSetting" - "sun-panel/lib/mail" "sun-panel/models" - "time" "github.com/gin-gonic/gin" "github.com/google/uuid" @@ -114,87 +111,3 @@ func (l *LoginApi) Logout(c *gin.Context) { global.CUserToken.Delete(cToken) apiReturn.Success(c) } - -// 获取重置密码的验证码 -func (l *LoginApi) SendResetPasswordVCode(c *gin.Context) { - type ResstRequest struct { - LoginLoginVerify - Verification commonApiStructs.VerificationRequest `json:"verification"` - } - req := ResstRequest{} - if err := c.ShouldBindJSON(&req); err != nil { - apiReturn.Error(c, global.Lang.Get("common.api_error_param_format")) - return - } - - // 验证码验证 - { - errCode, verifcationId := base.VerificationCheck(req.Verification.CodeID, req.Verification.VCode) - if errCode != apiReturn.ERROR_CODE_SUCCESS { - apiReturn.ErrorVerification(c, errCode, verifcationId) - return - } - } - - emailVCode := cmn.BuildRandCode(6, cmn.RAND_CODE_MODE2) - global.VerifyCodeCachePool.Set(req.Email, emailVCode, 10*time.Minute) - - userCheck := &models.User{Mail: req.Email} - userInfo := userCheck.GetUserInfoByMail() - if userInfo == nil { - apiReturn.Error(c, "账号不存在") - return - } - emailInfoConfig := systemSetting.Email{} - global.SystemSetting.GetValueByInterface("system_email", &emailInfoConfig) - emailInfo := mail.EmailInfo{ - Username: emailInfoConfig.Mail, - Password: emailInfoConfig.Password, - Host: emailInfoConfig.Host, - Port: emailInfoConfig.Port, - } - if err := mail.SendResetPasswordVCode(mail.NewEmailer(emailInfo), req.Email, emailVCode); err != nil { - apiReturn.Error(c, err.Error()) - return - } - - apiReturn.Success(c) - -} - -// 使用邮箱验证码重置密码 -func (l *LoginApi) ResetPasswordByVCode(c *gin.Context) { - req := registerInfo{} - if err := c.ShouldBindJSON(&req); err != nil { - apiReturn.Error(c, global.Lang.Get("common.api_error_param_format")) - return - } - - userCheck := &models.User{Mail: req.Email} - userInfo := userCheck.GetUserInfoByMail() - if userInfo == nil { - apiReturn.Error(c, "账号不存在") - return - } - - // 校验验证码 - { - if emailVCode, ok := global.VerifyCodeCachePool.Get(req.Email); !ok || req.EmailVCode != emailVCode { - apiReturn.Error(c, global.Lang.Get("common.captcha_code_error")) - return - } - global.VerifyCodeCachePool.Delete(req.Email) - } - - updateData := map[string]interface{}{ - "password": cmn.PasswordEncryption(req.Password), - "token": "", - } - global.UserToken.Delete(userInfo.Token) // 更新用户信息 - if err := userInfo.UpdateUserInfoByUserId(userInfo.ID, updateData); err != nil { - apiReturn.ErrorDatabase(c, err.Error()) - return - } - apiReturn.Success(c) - -} diff --git a/service/api/api_v1/system/register.go b/service/api/api_v1/system/register.go deleted file mode 100644 index 183e349..0000000 --- a/service/api/api_v1/system/register.go +++ /dev/null @@ -1,183 +0,0 @@ -package system - -import ( - "fmt" - "math/rand" - "sun-panel/api/api_v1/common/apiData/commonApiStructs" - "sun-panel/api/api_v1/common/apiReturn" - "sun-panel/api/api_v1/common/base" - "sun-panel/global" - "sun-panel/lib/cmn" - "sun-panel/lib/cmn/systemSetting" - "sun-panel/lib/mail" - "sun-panel/models" - "time" - - "github.com/gin-gonic/gin" - "gorm.io/gorm" -) - -type registerInfo struct { - Email string `json:"email"` - UserName string `json:"userName"` - Password string `json:"password"` - Vcode string `json:"vcode"` - EmailVCode string `json:"emailVCode"` - VCode string `json:"vCode"` - Verification commonApiStructs.VerificationRequest `json:"verification"` - ReferralCode string `json:"referralCode"` -} - -const EmailCodeCapacity = 1000 - -type RegisterApi struct{} - -// 获取注册验证码 -func (l RegisterApi) SendRegisterVcode(c *gin.Context) { - req := registerInfo{} - err := c.ShouldBindJSON(&req) - req.Email = req.UserName - if err != nil { - apiReturn.ErrorParamFomat(c, err.Error()) - return - } - errMsg, err := base.ValidateInputStruct(req) - if err != nil { - apiReturn.Error(c, errMsg) - return - } - - // 验证码验证 - { - errCode, verifcationId := base.VerificationCheck(req.Verification.CodeID, req.Verification.VCode) - if errCode != apiReturn.ERROR_CODE_SUCCESS { - apiReturn.ErrorVerification(c, errCode, verifcationId) - return - } - } - - // 验证是否开启注册和后缀格式是否正确 - { - systemSettingInfo := systemSetting.ApplicationSetting{} - if err := global.SystemSetting.GetValueByInterface("system_application", &systemSettingInfo); err != nil || !systemSettingInfo.Register.OpenRegister { - apiReturn.Error(c, global.Lang.Get("register.unopened_register")) - return - } - - if systemSettingInfo.Register.EmailSuffix != "" && !cmn.VerifyFormat("^.*"+systemSettingInfo.Register.EmailSuffix+"$", req.Email) { - apiReturn.Error(c, global.Lang.GetWithFields("register.emailSuffix_error", map[string]string{"EmailSuffix": systemSettingInfo.Register.EmailSuffix})) - return - } - } - - // 验证邮箱是否被注册 - { - userCheck := &models.User{Mail: req.UserName} - if _, err := userCheck.GetUserInfoByUsername(req.UserName); err == nil && err != gorm.ErrRecordNotFound { - apiReturn.Error(c, global.Lang.Get("register.mail_exist")) - return - } - } - - emailCode := generateEmailCode() - count, err := global.VerifyCodeCachePool.ItemCount() - if err != nil || count >= EmailCodeCapacity { - global.VerifyCodeCachePool.Flush() - } - global.VerifyCodeCachePool.Set(req.Email, emailCode, 0) - emailInfoConfig := systemSetting.Email{} - global.SystemSetting.GetValueByInterface("system_email", &emailInfoConfig) - emailInfo := mail.EmailInfo{ - Username: emailInfoConfig.Mail, - Password: emailInfoConfig.Password, - Host: emailInfoConfig.Host, - Port: emailInfoConfig.Port, - } - err = mail.SendRegisterEmail(mail.NewEmailer(emailInfo), req.Email, emailCode) - if err != nil { - apiReturn.Error(c, global.Lang.Get("mail.send_mail_fail")) - global.Logger.Errorf("[register] fail to send email to%s", req.UserName) - return - } - apiReturn.Success(c) -} - -// 注册提交(开始注册) -func (l *RegisterApi) Commit(c *gin.Context) { - req := registerInfo{} - err := c.ShouldBindJSON(&req) - req.Email = req.UserName - if err != nil { - apiReturn.ErrorParamFomat(c, err.Error()) - return - } - errMsg, err := base.ValidateInputStruct(req) - if err != nil { - apiReturn.Error(c, errMsg) - return - } - - // 验证是否开启注册和后缀格式是否正确 - { - systemSettingInfo := systemSetting.ApplicationSetting{} - if err := global.SystemSetting.GetValueByInterface("system_application", &systemSettingInfo); err != nil || !systemSettingInfo.Register.OpenRegister { - apiReturn.Error(c, global.Lang.Get("register.unopened_register")) - return - } - - if systemSettingInfo.Register.EmailSuffix != "" && !cmn.VerifyFormat("^.*"+systemSettingInfo.Register.EmailSuffix+"$", req.Email) { - apiReturn.Error(c, global.Lang.GetWithFields("register.emailSuffix_error", map[string]string{"EmailSuffix": systemSettingInfo.Register.EmailSuffix})) - return - } - } - - // 验证邮箱是否被注册 - { - userCheck := &models.User{Mail: req.UserName} - if _, err := userCheck.GetUserInfoByUsername(req.UserName); err == nil && err != gorm.ErrRecordNotFound { - apiReturn.Error(c, global.Lang.Get("register.mail_exist")) - return - } - } - - // 验证码验证 - { - vCode, ok := global.VerifyCodeCachePool.Get(req.Email) - if !ok { - apiReturn.Error(c, global.Lang.Get("common.captcha_code_error")) - //验证码不存在 - return - } - if vCode != req.EmailVCode { - apiReturn.Error(c, global.Lang.Get("common.captcha_code_error")) - return - //验证码有误 - } - } - - // 自动生成用户昵称 - name := "用户" + cmn.BuildRandCode(4, cmn.RAND_CODE_MODE3) - - //验证通过,注册 - user := &models.User{ - Mail: req.UserName, - Name: name, - Username: req.UserName, - Password: cmn.PasswordEncryption(req.Password), - Status: 1, - Role: 2, - } - _, err = user.CreateOne() - if err != nil { - apiReturn.ErrorDatabase(c, err.Error()) - return - } - //删除旧的验证码 - global.VerifyCodeCachePool.Delete(req.Email) - - apiReturn.Success(c) -} - -func generateEmailCode() string { - return fmt.Sprintf("%06v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(1000000)) -} diff --git a/service/router/system/A_ENTER.go b/service/router/system/A_ENTER.go index c65dedf..6ce6f19 100644 --- a/service/router/system/A_ENTER.go +++ b/service/router/system/A_ENTER.go @@ -7,8 +7,6 @@ func Init(routerGroup *gin.RouterGroup) { InitLogin(routerGroup) InitUserRouter(routerGroup) InitFileRouter(routerGroup) - InitCaptchaRouter(routerGroup) - InitRegister(routerGroup) InitNoticeRouter(routerGroup) InitModuleConfigRouter(routerGroup) InitMonitorRouter(routerGroup) diff --git a/service/router/system/captcha.go b/service/router/system/captcha.go deleted file mode 100644 index 83afb16..0000000 --- a/service/router/system/captcha.go +++ /dev/null @@ -1,17 +0,0 @@ -package system - -import ( - "sun-panel/api/api_v1" - - "github.com/gin-gonic/gin" -) - -func InitCaptchaRouter(router *gin.RouterGroup) { - captchaApi := api_v1.ApiGroupApp.ApiSystem.CaptchaApi - r := router.Group("captcha") - r.GET("getImage", captchaApi.GetImage) - r.GET("getImage/:width/:height", captchaApi.GetImage) - r.GET("getImageByCaptchaId/:captchaId", captchaApi.GetImageByCaptchaId) - r.GET("getImageByCaptchaId/:captchaId/:width/:height", captchaApi.GetImageByCaptchaId) - // r.POST("/captach/check", captchaApi.CheckVCode) -} diff --git a/service/router/system/login.go b/service/router/system/login.go index 4420a06..3caa9d0 100644 --- a/service/router/system/login.go +++ b/service/router/system/login.go @@ -12,7 +12,5 @@ func InitLogin(router *gin.RouterGroup) { router.POST("/login", loginApi.Login) router.POST("/logout", middleware.LoginInterceptor, loginApi.Logout) - router.POST("/login/sendResetPasswordVCode", loginApi.SendResetPasswordVCode) - router.POST("/login/resetPasswordByVCode", loginApi.ResetPasswordByVCode) } diff --git a/service/router/system/register.go b/service/router/system/register.go deleted file mode 100644 index 7f81dc6..0000000 --- a/service/router/system/register.go +++ /dev/null @@ -1,14 +0,0 @@ -package system - -import ( - "sun-panel/api/api_v1" - - "github.com/gin-gonic/gin" -) - -func InitRegister(router *gin.RouterGroup) { - api := api_v1.ApiGroupApp.ApiSystem.RegisterApi - - router.POST("/register/sendRegisterVcode", api.SendRegisterVcode) - router.POST("/register/commit", api.Commit) -}