mirror of
https://github.com/halejohn/Cloudreve.git
synced 2026-01-26 09:34:57 +08:00
Feat: ReCaptcha support (#292)
* Add custom mysql database port. * Modify: add cloudreve bin file to .gitignore * Feat:增加后端对ReCaptcha的支持 P.S.必须要执行迁移
This commit is contained in:
@@ -69,12 +69,24 @@ func (service *UserResetService) Reset(c *gin.Context) serializer.Response {
|
||||
func (service *UserResetEmailService) Reset(c *gin.Context) serializer.Response {
|
||||
// 检查验证码
|
||||
isCaptchaRequired := model.IsTrueVal(model.GetSettingByName("forget_captcha"))
|
||||
if isCaptchaRequired {
|
||||
useRecaptcha := model.IsTrueVal(model.GetSettingByName("captcha_IsUseReCaptcha"))
|
||||
recaptchaSecret := model.GetSettingByName("captcha_ReCaptchaSecret")
|
||||
if isCaptchaRequired && !useRecaptcha {
|
||||
captchaID := util.GetSession(c, "captchaID")
|
||||
util.DeleteSession(c, "captchaID")
|
||||
if captchaID == nil || !base64Captcha.VerifyCaptcha(captchaID.(string), service.CaptchaCode) {
|
||||
return serializer.ParamErr("验证码错误", nil)
|
||||
}
|
||||
} else if isCaptchaRequired && useRecaptcha {
|
||||
captcha, err := recaptcha.NewReCAPTCHA(recaptchaSecret, recaptcha.V2, 10*time.Second)
|
||||
if err != nil {
|
||||
util.Log().Error(err.Error())
|
||||
}
|
||||
err = captcha.Verify(service.CaptchaCode)
|
||||
if err != nil {
|
||||
util.Log().Error(err.Error())
|
||||
return serializer.ParamErr("验证失败,请刷新网页后再次验证", nil)
|
||||
}
|
||||
}
|
||||
|
||||
// 查找用户
|
||||
@@ -132,14 +144,27 @@ func (service *Enable2FA) Login(c *gin.Context) serializer.Response {
|
||||
// Login 用户登录函数
|
||||
func (service *UserLoginService) Login(c *gin.Context) serializer.Response {
|
||||
isCaptchaRequired := model.GetSettingByName("login_captcha")
|
||||
useRecaptcha := model.GetSettingByName("captcha_IsUseReCaptcha")
|
||||
recaptchaSecret := model.GetSettingByName("captcha_ReCaptchaSecret")
|
||||
expectedUser, err := model.GetUserByEmail(service.UserName)
|
||||
|
||||
if model.IsTrueVal(isCaptchaRequired) {
|
||||
if (model.IsTrueVal(isCaptchaRequired)) && !(model.IsTrueVal(useRecaptcha)) {
|
||||
// TODO 验证码校验
|
||||
captchaID := util.GetSession(c, "captchaID")
|
||||
util.DeleteSession(c, "captchaID")
|
||||
if captchaID == nil || !base64Captcha.VerifyCaptcha(captchaID.(string), service.CaptchaCode) {
|
||||
return serializer.ParamErr("验证码错误", nil)
|
||||
}
|
||||
} else if (model.IsTrueVal(isCaptchaRequired)) && (model.IsTrueVal(useRecaptcha)) {
|
||||
captcha, err := recaptcha.NewReCAPTCHA(recaptchaSecret, recaptcha.V2, 10*time.Second)
|
||||
if err != nil {
|
||||
util.Log().Error(err.Error())
|
||||
}
|
||||
err = captcha.Verify(service.CaptchaCode)
|
||||
if err != nil {
|
||||
util.Log().Error(err.Error())
|
||||
return serializer.ParamErr("验证失败,请刷新网页后再次验证", nil)
|
||||
}
|
||||
}
|
||||
|
||||
// 一系列校验
|
||||
|
||||
@@ -5,12 +5,14 @@ import (
|
||||
"github.com/HFO4/cloudreve/pkg/auth"
|
||||
"github.com/HFO4/cloudreve/pkg/email"
|
||||
"github.com/HFO4/cloudreve/pkg/hashid"
|
||||
"github.com/HFO4/cloudreve/pkg/recaptcha"
|
||||
"github.com/HFO4/cloudreve/pkg/serializer"
|
||||
"github.com/HFO4/cloudreve/pkg/util"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/mojocn/base64Captcha"
|
||||
"net/url"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// UserRegisterService 管理用户注册的服务
|
||||
@@ -27,12 +29,24 @@ func (service *UserRegisterService) Register(c *gin.Context) serializer.Response
|
||||
options := model.GetSettingByNames("email_active", "reg_captcha")
|
||||
// 检查验证码
|
||||
isCaptchaRequired := model.IsTrueVal(options["reg_captcha"])
|
||||
if isCaptchaRequired {
|
||||
useRecaptcha := model.IsTrueVal(model.GetSettingByName("captcha_IsUseReCaptcha"))
|
||||
recaptchaSecret := model.GetSettingByName("captcha_ReCaptchaSecret")
|
||||
if isCaptchaRequired && !useRecaptcha {
|
||||
captchaID := util.GetSession(c, "captchaID")
|
||||
util.DeleteSession(c, "captchaID")
|
||||
if captchaID == nil || !base64Captcha.VerifyCaptcha(captchaID.(string), service.CaptchaCode) {
|
||||
return serializer.ParamErr("验证码错误", nil)
|
||||
}
|
||||
} else if isCaptchaRequired && useRecaptcha {
|
||||
captcha, err := recaptcha.NewReCAPTCHA(recaptchaSecret, recaptcha.V2, 10*time.Second)
|
||||
if err != nil {
|
||||
util.Log().Error(err.Error())
|
||||
}
|
||||
err = captcha.Verify(service.CaptchaCode)
|
||||
if err != nil {
|
||||
util.Log().Error(err.Error())
|
||||
return serializer.ParamErr("验证失败,请刷新网页后再次验证", nil)
|
||||
}
|
||||
}
|
||||
|
||||
// 相关设定
|
||||
|
||||
Reference in New Issue
Block a user