1!function(){"use strict";const CaptchaManager={provider:null,enabled:!0,recaptchaSiteKey:null,turnstileSiteKey:null,widgets:{login:null,register:null},recaptchaReady:!1,init(){const enabledMeta=document.querySelector('meta[name="captcha-enabled"]')?.content;if(this.enabled="false"!==enabledMeta,this.enabled)if(this.provider=document.querySelector('meta[name="captcha-provider"]')?.content||"turnstile",this.recaptchaSiteKey=document.querySelector('meta[name="recaptcha-sitekey"]')?.content,this.turnstileSiteKey=document.querySelector('meta[name="turnstile-sitekey"]')?.content,this.provider,this.recaptchaSiteKey,this.turnstileSiteKey,"recaptcha"===this.provider){if(!this.recaptchaSiteKey)return void console.error("[CaptchaManager] â reCAPTCHA SiteKey æªé
ç½®ï¼è¯·æ£æ¥ appsettings.json");"undefined"==typeof grecaptcha?(console.warn("[CaptchaManager] â ï¸ grecaptcha 对象æªå®ä¹"),console.warn("[CaptchaManager] è¿å¯è½æ¯å 为ï¼"),console.warn("[CaptchaManager] 1. èæ¬æ£å¨å¼æ¥å è½½ä¸ï¼ç¨åä¼å¯ç¨ï¼"),console.warn("[CaptchaManager] 2. èæ¬å è½½å¤±è´¥ï¼æ£æ¥ Network é项å¡ï¼"),console.warn("[CaptchaManager] 3. ç¨æ·å·²ç»å½ï¼èæ¬æªå è½½ï¼æ£æ¥ _Layout.cshtml æ¡ä»¶ï¼"),console.warn("[CaptchaManager] 4. ç½ç»é®é¢æè¢«å¹¿åæ¦æªå¨é»æ¢")):grecaptcha.ready(()=>{this.recaptchaReady=!0})}else"turnstile"===this.provider&&(this.turnstileSiteKey||console.error("[CaptchaManager] â Turnstile SiteKey æªé
ç½®ï¼"))},render(container,action,callback){return this.enabled?"recaptcha"===this.provider?this.renderRecaptcha(container,action,callback):this.renderTurnstile(container,action,callback):(callback&&callback("disabled"),null)},renderRecaptcha:(container,action,callback)=>(container.style.display="none",callback&&callback("recaptcha-ready"),"recaptcha-v3"),renderTurnstile(container,action,callback){if(void 0===window.turnstile)return console.error("[Turnstile] â API æªå è½½"),console.error("[Turnstile] 请确ä¿å¨ _Layout.cshtml ä¸å
å«ï¼"),console.error('[Turnstile] <script src="https://challenges.cloudflare.com/turnstile/v0/api.js"><\/script>'),null;if(container.dataset.widgetId)return container.dataset.widgetId;try{const widgetId=window.turnstile.render(container,{sitekey:this.turnstileSiteKey,theme:container.dataset.theme||"light",callback:callback,"error-callback":err=>{console.error("[Turnstile] â éªè¯é误:",err)},"expired-callback":()=>{console.warn("[Turnstile] â ï¸ Token å·²è¿æï¼æ£å¨éç½®..."),window.turnstile.reset(widgetId)}});return container.dataset.widgetId=widgetId,this.widgets[action]=widgetId,widgetId}catch(err){return console.error("[Turnstile] â æ¸²æå¤±è´¥:",err),null}},async getToken(action){return this.enabled?(this.provider,"recaptcha"===this.provider?await this.getRecaptchaToken(action):this.getTurnstileToken(action)):null},async getRecaptchaToken(action){try{await this.waitForRecaptchaLoad();return await new Promise((resolve,reject)=>{const timeout=setTimeout(()=>{reject(new Error("reCAPTCHA æ§è¡è¶
æ¶ï¼15ç§ï¼"))},15e3);grecaptcha.ready(()=>{grecaptcha.execute(this.recaptchaSiteKey,{action:action}).then(token=>{clearTimeout(timeout),token.substring(0,30),resolve(token)}).catch(err=>{clearTimeout(timeout),console.error("[reCAPTCHA] â execute 失败:",err),reject(err)})})})}catch(err){return console.error("[reCAPTCHA] â è·å token 失败:",err.message),console.error("[reCAPTCHA] 详ç»é误:",err),console.group("[reCAPTCHA] ð æ
éææ¥å»ºè®®"),this.recaptchaSiteKey,console.groupEnd(),null}},waitForRecaptchaLoad:async()=>new Promise((resolve,reject)=>{if("undefined"!=typeof grecaptcha&&grecaptcha.ready)return void resolve();const timeout=setTimeout(()=>{console.error("[reCAPTCHA] â å è½½è¶
æ¶ï¼30ç§ï¼"),console.error("[reCAPTCHA] å¯è½åå ï¼"),console.error("[reCAPTCHA] 1. ç½ç»é®é¢ï¼æ æ³è®¿é® www.google.com"),console.error("[reCAPTCHA] 2. èæ¬è¢«æµè§å¨æ©å±ï¼å¦å¹¿åæ¦æªå¨ï¼é»æ¢"),console.error("[reCAPTCHA] 3. CSP çç¥é»æ¢äºèæ¬å è½½"),console.error("[reCAPTCHA] 4. èæ¬ URL é误æ SiteKey æ æ"),reject(new Error("reCAPTCHA èæ¬å è½½è¶
æ¶"))},3e4),checkInterval=setInterval(()=>{"undefined"!=typeof grecaptcha&&grecaptcha.ready&&(clearInterval(checkInterval),clearTimeout(timeout),resolve())},100)}),getTurnstileToken(action){const widgetId=this.widgets[action];if(null==widgetId)return console.error("[Turnstile] â Widget æªåå§å:",action),null;try{const token=window.turnstile.getResponse(widgetId);return token||(console.warn("[Turnstile] â ï¸ Token 为空ï¼ç¨æ·å¯è½æªå®æéªè¯"),null)}catch(err){return console.error("[Turnstile] â è·å token 失败:",err),null}},reset(action){if(this.enabled)if("recaptcha"===this.provider);else{const widgetId=this.widgets[action];if(null!==widgetId&&void 0!==window.turnstile)try{window.turnstile.reset(widgetId)}catch(err){console.error("[Turnstile] â é置失败:",err)}}},addTokenToForm(form,token){if(!this.enabled||!token)return;const fieldName="recaptcha"===this.provider?"g-recaptcha-response":"cf-turnstile-response",oldField=form.querySelector(`input[name="${fieldName}"]`);oldField&&oldField.remove();const input=document.createElement("input");input.type="hidden",input.name=fieldName,input.value=token,form.appendChild(input)}};window.CaptchaManager=CaptchaManager,"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{CaptchaManager.init()}):CaptchaManager.init()}();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.