mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-26 12:27:06 +00:00 
			
		
		
		
	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>
This commit is contained in:
		
							
								
								
									
										51
									
								
								web_src/js/features/captcha.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								web_src/js/features/captcha.js
									
									
									
									
									
										Normal file
									
								
							| @@ -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: | ||||
|   } | ||||
| } | ||||
| @@ -1,16 +0,0 @@ | ||||
| export async function initMcaptcha() { | ||||
|   const mCaptchaEl = document.querySelector('.m-captcha'); | ||||
|   if (!mCaptchaEl) return; | ||||
|  | ||||
|   const {default: mCaptcha} = await import(/* webpackChunkName: "mcaptcha-vanilla-glue" */'@mcaptcha/vanilla-glue'); | ||||
|   mCaptcha.INPUT_NAME = 'm-captcha-response'; | ||||
|   const siteKey = mCaptchaEl.getAttribute('data-sitekey'); | ||||
|   const instanceURL = mCaptchaEl.getAttribute('data-instance-url'); | ||||
|  | ||||
|   mCaptcha.default({ | ||||
|     siteKey: { | ||||
|       instanceUrl: new URL(instanceURL), | ||||
|       key: siteKey, | ||||
|     } | ||||
|   }); | ||||
| } | ||||
| @@ -88,8 +88,8 @@ import {initCommonOrganization} from './features/common-organization.js'; | ||||
| import {initRepoWikiForm} from './features/repo-wiki.js'; | ||||
| import {initRepoCommentForm, initRepository} from './features/repo-legacy.js'; | ||||
| import {initFormattingReplacements} from './features/formatting.js'; | ||||
| import {initMcaptcha} from './features/mcaptcha.js'; | ||||
| import {initCopyContent} from './features/copycontent.js'; | ||||
| import {initCaptcha} from './features/captcha.js'; | ||||
| import {initRepositoryActionView} from './components/RepoActionView.vue'; | ||||
|  | ||||
| // Run time-critical code as soon as possible. This is safe to do because this | ||||
| @@ -191,7 +191,7 @@ $(document).ready(() => { | ||||
|   initRepositoryActionView(); | ||||
|  | ||||
|   initCommitStatuses(); | ||||
|   initMcaptcha(); | ||||
|   initCaptcha(); | ||||
|  | ||||
|   initUserAuthLinkAccountView(); | ||||
|   initUserAuthOauth2(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 ByLCY
					ByLCY