diff options
author | ByLCY <bylcy@bylcy.dev> | 2023-02-05 15:29:03 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-05 15:29:03 +0800 |
commit | 7baeb9c52a69eb6f7e0973986f2a6bebdd6352d0 (patch) | |
tree | 9aa89a504561468d26726507edb21c32a13621ae /web_src/js/features/captcha.js | |
parent | e35f8e15a67e8268542d2442dac32993b6944043 (diff) | |
download | gitea-7baeb9c52a69eb6f7e0973986f2a6bebdd6352d0.tar.gz gitea-7baeb9c52a69eb6f7e0973986f2a6bebdd6352d0.zip |
Add new captcha: cloudflare turnstile (#22369)
Added a new captcha(cloudflare turnstile) and its corresponding
document. Cloudflare turnstile official instructions are here:
https://developers.cloudflare.com/turnstile
Signed-off-by: ByLCY <bylcy@bylcy.dev>
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: Jason Song <i@wolfogre.com>
Diffstat (limited to 'web_src/js/features/captcha.js')
-rw-r--r-- | web_src/js/features/captcha.js | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/web_src/js/features/captcha.js b/web_src/js/features/captcha.js new file mode 100644 index 0000000000..3da5dbda41 --- /dev/null +++ b/web_src/js/features/captcha.js @@ -0,0 +1,51 @@ +import {isDarkTheme} from '../utils.js'; + +export async function initCaptcha() { + const captchaEl = document.querySelector('#captcha'); + if (!captchaEl) return; + + const siteKey = captchaEl.getAttribute('data-sitekey'); + const isDark = isDarkTheme(); + + const params = { + sitekey: siteKey, + theme: isDark ? 'dark' : 'light' + }; + + switch (captchaEl.getAttribute('data-captcha-type')) { + case 'g-recaptcha': { + if (window.grecaptcha) { + window.grecaptcha.ready(() => { + window.grecaptcha.render(captchaEl, params); + }); + } + break; + } + case 'cf-turnstile': { + if (window.turnstile) { + window.turnstile.render(captchaEl, params); + } + break; + } + case 'h-captcha': { + if (window.hcaptcha) { + window.hcaptcha.render(captchaEl, params); + } + break; + } + case 'm-captcha': { + const {default: mCaptcha} = await import(/* webpackChunkName: "mcaptcha-vanilla-glue" */'@mcaptcha/vanilla-glue'); + mCaptcha.INPUT_NAME = 'm-captcha-response'; + const instanceURL = captchaEl.getAttribute('data-instance-url'); + + mCaptcha.default({ + siteKey: { + instanceUrl: new URL(instanceURL), + key: siteKey, + } + }); + break; + } + default: + } +} |