mirror of
https://github.com/go-gitea/gitea.git
synced 2026-05-08 14:34:49 +09:00
After the Webpack-to-Vite migration (#37002), mCaptcha stopped working entirely on the registration page, throwing an error: `TypeError: setting getter-only property "INPUT_NAME"` This fix stops trying to mutate the read-only INPUT_NAME export. Instead it probes for the Widget constructor at module.default (direct) or module.default.default (CJS-wrapped), constructs the widget, and then renames the hidden input element it creates to m-captcha-response which is the field name Gitea's backend reads from the submitted form. Generative AI was used to help with making this PR. --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> Co-authored-by: Giteabot <teabot@gitea.io>
33 lines
1.7 KiB
Handlebars
33 lines
1.7 KiB
Handlebars
{{if .EnableCaptcha}}{{if eq .CaptchaType "image"}}
|
|
<div class="inline field tw-text-center">
|
|
{{.Captcha.CreateHTML}}
|
|
</div>
|
|
<div class="required field {{if .Err_Captcha}}error{{end}}">
|
|
<label for="captcha">{{ctx.Locale.Tr "captcha"}}</label>
|
|
<input id="captcha" name="captcha" value="{{.captcha}}" autocomplete="off">
|
|
</div>
|
|
{{else if eq .CaptchaType "recaptcha"}}
|
|
<div class="inline field tw-text-center required">
|
|
<div id="captcha" data-captcha-type="g-recaptcha" class="g-recaptcha-style" data-sitekey="{{.RecaptchaSitekey}}"></div>
|
|
</div>
|
|
<script nonce="{{ctx.CspScriptNonce}}" defer src='{{.RecaptchaAPIScriptURL}}'></script>
|
|
{{else if eq .CaptchaType "hcaptcha"}}
|
|
<div class="inline field tw-text-center required">
|
|
<div id="captcha" data-captcha-type="h-captcha" class="h-captcha-style" data-sitekey="{{.HcaptchaSitekey}}"></div>
|
|
</div>
|
|
<script nonce="{{ctx.CspScriptNonce}}" defer src='https://hcaptcha.com/1/api.js'></script>
|
|
{{else if eq .CaptchaType "mcaptcha"}}
|
|
<div class="inline field tw-text-center">
|
|
<div class="m-captcha-style" id="mcaptcha__widget-container"></div>
|
|
<label id="mcaptcha__token-label" hidden data-mcaptcha_url="{{.McaptchaURL}}/widget?sitekey={{.McaptchaSitekey}}">
|
|
<input id="mcaptcha__token" name="mcaptcha__token">{{/* the id and name are hard-coded in the library, cant't be changed */}}
|
|
</label>
|
|
<div id="captcha" data-captcha-type="m-captcha"></div>
|
|
</div>
|
|
{{else if eq .CaptchaType "cfturnstile"}}
|
|
<div class="inline field tw-text-center">
|
|
<div id="captcha" data-captcha-type="cf-turnstile" data-sitekey="{{.CfTurnstileSitekey}}"></div>
|
|
</div>
|
|
<script nonce="{{ctx.CspScriptNonce}}" defer src='https://challenges.cloudflare.com/turnstile/v0/api.js'></script>
|
|
{{end}}{{end}}
|