From 2c57bece393aad76e9d32cb0f495e8d6da8f9255 Mon Sep 17 00:00:00 2001 From: Resulte Lee Date: Tue, 21 Jun 2022 12:22:46 +0800 Subject: [PATCH] feat: fix stuck error when no captcha provider found (#808) --- controllers/account.go | 17 ++++++++++------- controllers/verification.go | 34 ++++++++++++++++------------------ object/provider.go | 2 +- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/controllers/account.go b/controllers/account.go index c1d2cfc7..a8ece715 100644 --- a/controllers/account.go +++ b/controllers/account.go @@ -307,13 +307,16 @@ func (c *ApiController) GetCaptcha() { return } - if captchaProvider.Type == "Default" { - id, img := object.GetCaptcha() - c.ResponseOk(Captcha{Type: captchaProvider.Type, CaptchaId: id, CaptchaImage: img}) - return - } else if captchaProvider.Type != "" { - c.ResponseOk(Captcha{Type: captchaProvider.Type, ClientId: captchaProvider.ClientId, ClientSecret: captchaProvider.ClientSecret}) - return + if captchaProvider != nil { + if captchaProvider.Type == "Default" { + id, img := object.GetCaptcha() + c.ResponseOk(Captcha{Type: captchaProvider.Type, CaptchaId: id, CaptchaImage: img}) + return + } else if captchaProvider.Type != "" { + c.ResponseOk(Captcha{Type: captchaProvider.Type, ClientId: captchaProvider.ClientId, ClientSecret: captchaProvider.ClientSecret}) + return + } } + c.ResponseOk(Captcha{Type: "none"}) } diff --git a/controllers/verification.go b/controllers/verification.go index 3ecfc648..26f500fe 100644 --- a/controllers/verification.go +++ b/controllers/verification.go @@ -54,25 +54,23 @@ func (c *ApiController) SendVerificationCode() { return } - provider := captcha.GetCaptchaProvider(checkType) - if provider == nil { - c.ResponseError("Invalid captcha provider.") - return - } + captchaProvider := captcha.GetCaptchaProvider(checkType) - if checkKey == "" { - c.ResponseError("Missing parameter: checkKey.") - return - } - isHuman, err := provider.VerifyCaptcha(checkKey, checkId) - if err != nil { - c.ResponseError("Failed to verify captcha: %v", err) - return - } - - if !isHuman { - c.ResponseError("Turing test failed.") - return + if captchaProvider != nil { + if checkKey == "" { + c.ResponseError("Missing parameter: checkKey.") + return + } + isHuman, err := captchaProvider.VerifyCaptcha(checkKey, checkId) + if err != nil { + c.ResponseError("Failed to verify captcha: %v", err) + return + } + + if !isHuman { + c.ResponseError("Turing test failed.") + return + } } user := c.getCurrentUser() diff --git a/object/provider.go b/object/provider.go index c2f0880f..845dcd7a 100644 --- a/object/provider.go +++ b/object/provider.go @@ -257,5 +257,5 @@ func GetCaptchaProviderByApplication(applicationId, isCurrentProvider string) (* return GetCaptchaProviderByOwnerName(fmt.Sprintf("%s/%s", provider.Provider.Owner, provider.Provider.Name)) } } - return nil, fmt.Errorf("no captcha provider found") + return nil, nil }