fix(captcha): close human-verification loop end-to-end

Rewrite captcha core around aksrt_captcha_config only, require captcha
on login/comment/SMS/phone auth and related gates, wire frontend token
collection, and remove dead dual-source security settings plus slider enqueue.
This commit is contained in:
2026-07-13 19:52:30 +08:00
parent a0808bbe54
commit 02f77b756c
21 changed files with 1163 additions and 1515 deletions
@@ -173,8 +173,12 @@ class AKSRT_Admin_Extension_Controller extends AKSRT_Admin_Controller_Base {
$email_gate_enabled = false;
}
$captcha_comment_enabled = !empty($settings['captcha_comment_enabled']);
$captcha_download_enabled = !empty($settings['captcha_download_enabled']);
$captcha_summary = function_exists('aksrt_get_captcha_status_summary')
? aksrt_get_captcha_status_summary()
: ['enabled' => false, 'configured' => false, 'scenes' => []];
$captcha_comment_enabled = !empty($captcha_summary['scenes']['comment']);
$features = class_exists('AKSRT_Settings') ? AKSRT_Settings::get_cms_features() : [];
$captcha_download_enabled = !empty($features['download_captcha']) && !empty($captcha_summary['scenes']['download']);
$risk_switches = [
'show_unapproved_comments' => !empty($settings['show_unapproved_comments']),
@@ -191,7 +195,8 @@ class AKSRT_Admin_Extension_Controller extends AKSRT_Admin_Controller_Base {
'content_audit_configured' => !empty($services['audit']['configured']),
'ip_geo_enabled' => !empty($services['ip_geo']['enabled']),
'ip_geo_configured' => !empty($services['ip_geo']['configured']),
'captcha_enabled' => $captcha_comment_enabled || $captcha_download_enabled,
'captcha_enabled' => !empty($captcha_summary['enabled']) && !empty($captcha_summary['configured']),
'captcha_summary' => $captcha_summary,
'risk_switches' => $risk_switches,
'services' => $services,
],
@@ -452,17 +457,19 @@ class AKSRT_Admin_Extension_Controller extends AKSRT_Admin_Controller_Base {
$services['wechat'] = ['enabled' => false, 'provider' => '', 'configured' => false, 'available' => false, 'verified' => false, 'transport' => '', 'missing_fields' => []];
}
// Captcha
$settings = AKSRT_Settings::get_all();
$captcha_en = class_exists('AKSRT_Captcha') && !empty($settings['captcha_enabled']);
// Captcha — 唯一真相源 aksrt_captcha_config
$captcha = function_exists('aksrt_get_captcha_status_summary')
? aksrt_get_captcha_status_summary()
: ['enabled' => false, 'provider' => '', 'configured' => false, 'scenes' => []];
$services['captcha'] = [
'enabled' => $captcha_en,
'provider' => sanitize_key((string) ($settings['captcha_provider'] ?? '')),
'configured' => $captcha_en,
'available' => $captcha_en,
'enabled' => !empty($captcha['enabled']) && !empty($captcha['configured']),
'provider' => (string) ($captcha['provider'] ?? ''),
'configured' => !empty($captcha['configured']),
'available' => !empty($captcha['configured']),
'verified' => false,
'transport' => 'http_api',
'missing_fields' => [],
'scenes' => $captcha['scenes'] ?? [],
];
// IP Geo