feat(captcha): add ALTCHA configuration endpoint and integrate into HomeController
- Introduced a new endpoint `/api/v1/altcha/config` in CaptchaController to return the status of the ALTCHA captcha. - Updated HomeController to inject AltchaService and pass the captcha status to the home page template. - Modified the home.html.twig template to conditionally render the ALTCHA widget based on the captcha status. - Updated manifest.json and cache files to reflect changes in the codebase.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import React, { useEffect, useRef } from 'react';
|
||||
import React, { useEffect, useRef, useState } from 'react';
|
||||
import 'altcha';
|
||||
|
||||
// ALTCHA خودمیزبان: widget با گرفتن challenge از بکاند، proof-of-work را در
|
||||
@@ -34,6 +34,21 @@ declare module 'react' {
|
||||
|
||||
export default function Altcha({ onVerified, challengeUrl = '/api/v1/altcha/challenge' }: AltchaProps) {
|
||||
const ref = useRef<HTMLElement>(null);
|
||||
// null=در حال بررسی وضعیت، true/false=فعال/غیرفعال بودن کپچا در سرور
|
||||
const [enabled, setEnabled] = useState<boolean | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
let alive = true;
|
||||
fetch('/api/v1/altcha/config')
|
||||
.then((r) => r.json())
|
||||
.then((c) => {
|
||||
if (!alive) return;
|
||||
setEnabled(!!c.enabled);
|
||||
if (!c.enabled) onVerified(''); // کپچا خاموش → فرم بدون مانع ارسال شود
|
||||
})
|
||||
.catch(() => { if (alive) setEnabled(false); });
|
||||
return () => { alive = false; };
|
||||
}, [onVerified]);
|
||||
|
||||
useEffect(() => {
|
||||
const el = ref.current;
|
||||
@@ -48,7 +63,9 @@ export default function Altcha({ onVerified, challengeUrl = '/api/v1/altcha/chal
|
||||
|
||||
el.addEventListener('statechange', onStateChange);
|
||||
return () => el.removeEventListener('statechange', onStateChange);
|
||||
}, [onVerified]);
|
||||
}, [onVerified, enabled]);
|
||||
|
||||
if (enabled !== true) return null;
|
||||
|
||||
return <altcha-widget ref={ref as React.Ref<HTMLElement>} challengeurl={challengeUrl} strings={FA_STRINGS} />;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user