diff --git a/middleware/captcha.go b/middleware/captcha.go index da5c422..8c55ded 100644 --- a/middleware/captcha.go +++ b/middleware/captcha.go @@ -147,10 +147,24 @@ func CaptchaRequired(enabled func(c *gin.Context) bool) gin.HandlerFunc { request2.WithHeader(http.Header{"Content-Type": []string{"application/json"}}), ) - capEndpoint := strings.TrimSuffix(captchaSetting.InstanceURL, "/") + "/" + captchaSetting.SiteKey + "/siteverify" - requestBody := map[string]string{ - "secret": captchaSetting.SecretKey, - "response": service.Ticket, + var capEndpoint string + var requestBody map[string]string + + // Support both 1.x and 2.x API formats + if captchaSetting.Version == "1.x" { + // Version 1.x: /api/{keyID}/siteverify + capEndpoint = strings.TrimSuffix(captchaSetting.InstanceURL, "/") + "/api/" + captchaSetting.SiteKey + "/siteverify" + requestBody = map[string]string{ + "secret": captchaSetting.SecretKey, + "response": service.Ticket, + } + } else { + // Version 2.x (default): /{siteKey}/siteverify + capEndpoint = strings.TrimSuffix(captchaSetting.InstanceURL, "/") + "/" + captchaSetting.SiteKey + "/siteverify" + requestBody = map[string]string{ + "secret": captchaSetting.SecretKey, + "response": service.Ticket, + } } requestData, err := json.Marshal(requestBody) if err != nil { diff --git a/pkg/setting/provider.go b/pkg/setting/provider.go index 1fdb03f..5ef22b2 100644 --- a/pkg/setting/provider.go +++ b/pkg/setting/provider.go @@ -671,6 +671,7 @@ func (s *settingProvider) CapCaptcha(ctx context.Context) *Cap { InstanceURL: s.getString(ctx, "captcha_cap_instance_url", ""), SiteKey: s.getString(ctx, "captcha_cap_key_id", ""), SecretKey: s.getString(ctx, "captcha_cap_key_secret", ""), + Version: s.getString(ctx, "captcha_cap_version", "2.x"), } } diff --git a/pkg/setting/types.go b/pkg/setting/types.go index 69ecfba..e74193e 100644 --- a/pkg/setting/types.go +++ b/pkg/setting/types.go @@ -52,6 +52,7 @@ type Cap struct { InstanceURL string SiteKey string SecretKey string + Version string // "1.x" or "2.x" } type SMTP struct { diff --git a/service/basic/site.go b/service/basic/site.go index 779f374..8f006a5 100644 --- a/service/basic/site.go +++ b/service/basic/site.go @@ -31,6 +31,7 @@ type SiteConfig struct { TurnstileSiteID string `json:"turnstile_site_id,omitempty"` CapInstanceURL string `json:"captcha_cap_instance_url,omitempty"` CapKeyID string `json:"captcha_cap_key_id,omitempty"` + CapVersion string `json:"captcha_cap_version,omitempty"` RegisterEnabled bool `json:"register_enabled,omitempty"` TosUrl string `json:"tos_url,omitempty"` PrivacyPolicyUrl string `json:"privacy_policy_url,omitempty"` @@ -138,6 +139,7 @@ func (s *GetSettingService) GetSiteConfig(c *gin.Context) (*SiteConfig, error) { ReCaptchaKey: reCaptcha.Key, CapInstanceURL: capCaptcha.InstanceURL, CapKeyID: capCaptcha.SiteKey, + CapVersion: capCaptcha.Version, AppPromotion: appSetting.Promotion, }, nil }