refactor: rename the theme brand and every identifier from AKSRT to Jio
Full-project rename. `git grep -i aksrt` is now empty apart from the
DBMigrator 3.3.0 changelog note that documents the rename itself.
Code identifiers
- PHP namespace AKSRT\ -> Jio\ (composer PSR-4 + 378 declarations)
- global constants AKSRT_* -> JIO_* (VERSION/DIR/URI, PAY_TYPE_*, CAPTCHA_*)
- procedural functions, hooks, options, meta keys, table names,
cookies, query vars, ajax actions and nonces: aksrt_ -> jio_
- text domain aksrt -> jio; Theme Name -> Jio
- JS globals: aksrtData/aksrtAdminData/... -> jioData/jioAdminData/...,
window.AKSRTCaptcha & friends -> window.JioCaptcha, Aksrt* -> Jio*
- Vue components Aks*.vue -> Jio*.vue (15 files renamed + imports)
- CSS classes/data-attrs/custom properties: aksrt- -> jio-
- REST namespace aksrt/v1 -> jio/v1 (incl. payment gateway callbacks)
Storage layer
- DB tables {prefix}aksrt_* -> {prefix}jio_*; SCHEMA_VERSION 3.2.0 -> 3.3.0
so dbDelta creates the new names on install
- widget id_base aksrt_widget_* -> jio_widget_*
- uninstall.php drop list rebuilt from the actual migrator tables
(dropped 3 stale entries, added the 17 missing ones)
Removed
- hardcoded https://api.aksrt.com/version.json default update endpoint;
get_endpoint() now reads the 「更新端点」 setting and do_check() no-ops
when it is empty
Files renamed: inc/helpers/aksrt-*.php -> jio-*.php (54),
assets/admin/src/components/form/Aks*.vue -> Jio*.vue (15).
Build artifacts regenerated: assets/css/build, assets/js/runtime,
assets/admin/build.
Verified: audit-psr4-paths errors=0, audit-admin-contracts errors=0
(warnings=56, unchanged baseline), 813/813 widget-system tests,
44/44 phpunit, php -l clean across all PHP.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
5b16bc6e15
commit
35bb96e82f
997 files changed
+28216
-28188
No files matched your search
@@ -10,7 +10,7 @@ namespace {
|
||||
define('MINUTE_IN_SECONDS', 60);
|
||||
define('MONTH_IN_SECONDS', 2592000);
|
||||
define('ARRAY_A', 'ARRAY_A');
|
||||
$GLOBALS['aksrt_test_options'] = [];
|
||||
$GLOBALS['jio_test_options'] = [];
|
||||
$GLOBALS['wp_cache'] = [];
|
||||
|
||||
final class HarnessWpdb {
|
||||
@@ -21,8 +21,8 @@ namespace {
|
||||
public function query($prepared): int {
|
||||
[, $args] = $prepared;
|
||||
[$key, $serialized] = $args;
|
||||
if (!array_key_exists($key, $GLOBALS['aksrt_test_options']) || serialize($GLOBALS['aksrt_test_options'][$key]) !== $serialized) return 0;
|
||||
unset($GLOBALS['aksrt_test_options'][$key]);
|
||||
if (!array_key_exists($key, $GLOBALS['jio_test_options']) || serialize($GLOBALS['jio_test_options'][$key]) !== $serialized) return 0;
|
||||
unset($GLOBALS['jio_test_options'][$key]);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -42,16 +42,16 @@ namespace {
|
||||
function wp_kses_post($value): string { return strip_tags((string) $value, '<b><strong><em><i><a><p><br>'); }
|
||||
function esc_url_raw($value): string { return trim((string) $value); }
|
||||
function wp_unslash($value) { return $value; }
|
||||
function get_option(string $key, $default = false) { return array_key_exists($key, $GLOBALS['aksrt_test_options']) ? $GLOBALS['aksrt_test_options'][$key] : $default; }
|
||||
function update_option(string $key, $value): bool { $GLOBALS['aksrt_test_options'][$key] = $value; return true; }
|
||||
function get_option(string $key, $default = false) { return array_key_exists($key, $GLOBALS['jio_test_options']) ? $GLOBALS['jio_test_options'][$key] : $default; }
|
||||
function update_option(string $key, $value): bool { $GLOBALS['jio_test_options'][$key] = $value; return true; }
|
||||
function add_option(string $key, $value, string $deprecated = '', bool $autoload = true): bool {
|
||||
if (array_key_exists($key, $GLOBALS['aksrt_test_options'])) return false;
|
||||
$GLOBALS['aksrt_test_options'][$key] = $value;
|
||||
if (array_key_exists($key, $GLOBALS['jio_test_options'])) return false;
|
||||
$GLOBALS['jio_test_options'][$key] = $value;
|
||||
return true;
|
||||
}
|
||||
function delete_option(string $key): bool {
|
||||
if (!array_key_exists($key, $GLOBALS['aksrt_test_options'])) return false;
|
||||
unset($GLOBALS['aksrt_test_options'][$key]);
|
||||
if (!array_key_exists($key, $GLOBALS['jio_test_options'])) return false;
|
||||
unset($GLOBALS['jio_test_options'][$key]);
|
||||
return true;
|
||||
}
|
||||
function maybe_serialize($value): string { return serialize($value); }
|
||||
@@ -77,7 +77,7 @@ namespace {
|
||||
function wp_unique_id(string $prefix = ''): string { return $prefix . '1'; }
|
||||
}
|
||||
|
||||
namespace AKSRT\Settings {
|
||||
namespace Jio\Settings {
|
||||
final class Settings {
|
||||
public static function flush_settings_cache(): void {}
|
||||
public static function sync_native_site_icon(string $value): void {}
|
||||
@@ -99,10 +99,10 @@ namespace {
|
||||
}
|
||||
}
|
||||
|
||||
check(aksrt_captcha_default_config()['enabled_scenarios'] === [], 'captcha scenarios are not opt-in');
|
||||
check(!in_array('domain', array_keys(aksrt_captcha_provider_defaults('cloudflare')), true), 'Cloudflare domain remains allowed');
|
||||
check(jio_captcha_default_config()['enabled_scenarios'] === [], 'captcha scenarios are not opt-in');
|
||||
check(!in_array('domain', array_keys(jio_captcha_provider_defaults('cloudflare')), true), 'Cloudflare domain remains allowed');
|
||||
|
||||
$GLOBALS['aksrt_test_options']['aksrt_captcha_config'] = [
|
||||
$GLOBALS['jio_test_options']['jio_captcha_config'] = [
|
||||
'enabled' => true,
|
||||
'active_provider' => 'cloudflare',
|
||||
'enabled_scenarios' => ['login'],
|
||||
@@ -114,9 +114,9 @@ namespace {
|
||||
'domain' => 'should-be-dropped.test',
|
||||
],
|
||||
];
|
||||
aksrt_captcha_config_reset();
|
||||
jio_captcha_config_reset();
|
||||
|
||||
$provider = \AKSRT\Admin\SchemaProvider::get_instance();
|
||||
$provider = \Jio\Admin\SchemaProvider::get_instance();
|
||||
$read = $provider->read_settings('permissions', 'login');
|
||||
check(($read['cloudflare']['secret_key'] ?? '') === '***', 'nested secret was not masked');
|
||||
check(!isset($read['cloudflare']['domain']), 'unknown provider key was exposed');
|
||||
@@ -130,7 +130,7 @@ namespace {
|
||||
'domain' => 'ignored.test',
|
||||
],
|
||||
], 'login');
|
||||
$stored = $GLOBALS['aksrt_test_options']['aksrt_captcha_config']['cloudflare'];
|
||||
$stored = $GLOBALS['jio_test_options']['jio_captcha_config']['cloudflare'];
|
||||
check($stored['secret_key'] === 'stored-secret', 'masked secret did not preserve stored value');
|
||||
check($stored['site_key'] === 'new-site-key', 'public provider field was not updated');
|
||||
check(!isset($stored['domain']), 'unknown provider key was persisted');
|
||||
@@ -138,47 +138,47 @@ namespace {
|
||||
$provider->write_settings('permissions', [
|
||||
'cloudflare' => ['secret_key' => ''],
|
||||
], 'login');
|
||||
check($GLOBALS['aksrt_test_options']['aksrt_captcha_config']['cloudflare']['secret_key'] === 'stored-secret', 'empty secret did not preserve stored value');
|
||||
check($GLOBALS['jio_test_options']['jio_captcha_config']['cloudflare']['secret_key'] === 'stored-secret', 'empty secret did not preserve stored value');
|
||||
|
||||
$provider->write_settings('permissions', [
|
||||
'__clear_secrets' => ['cloudflare.secret_key'],
|
||||
], 'login');
|
||||
check($GLOBALS['aksrt_test_options']['aksrt_captcha_config']['cloudflare']['secret_key'] === '', 'explicit nested secret clear failed');
|
||||
check($GLOBALS['jio_test_options']['jio_captcha_config']['cloudflare']['secret_key'] === '', 'explicit nested secret clear failed');
|
||||
|
||||
$GLOBALS['aksrt_test_options']['aksrt_captcha_config'] = [
|
||||
$GLOBALS['jio_test_options']['jio_captcha_config'] = [
|
||||
'enabled' => true,
|
||||
'active_provider' => '',
|
||||
'enabled_scenarios' => ['login'],
|
||||
];
|
||||
aksrt_captcha_config_reset();
|
||||
$failed_closed = aksrt_require_captcha('login', []);
|
||||
jio_captcha_config_reset();
|
||||
$failed_closed = jio_require_captcha('login', []);
|
||||
check(is_wp_error($failed_closed), 'enabled scene with missing provider failed open');
|
||||
check($failed_closed->get_error_code() === 'aksrt_captcha_config', 'fail-closed error code mismatch');
|
||||
check($failed_closed->get_error_code() === 'jio_captcha_config', 'fail-closed error code mismatch');
|
||||
|
||||
$GLOBALS['aksrt_test_options']['aksrt_captcha_config'] = [
|
||||
$GLOBALS['jio_test_options']['jio_captcha_config'] = [
|
||||
'enabled' => true,
|
||||
'active_provider' => 'cloudflare',
|
||||
'enabled_scenarios' => ['login', 'comment'],
|
||||
'cloudflare' => ['site_key' => 'site', 'secret_key' => 'secret', 'theme' => 'auto', 'size' => 'normal'],
|
||||
];
|
||||
aksrt_captcha_config_reset();
|
||||
$_COOKIE[AKSRT_CAPTCHA_BROWSER_COOKIE] = str_repeat('A', 43);
|
||||
$challenge = aksrt_captcha_issue_challenge('login', 'cloudflare');
|
||||
check(aksrt_captcha_validate_challenge($challenge, 'login', 'cloudflare', false), 'valid scene challenge failed');
|
||||
check(!aksrt_captcha_validate_challenge($challenge, 'comment', 'cloudflare', false), 'cross-scene challenge accepted');
|
||||
check(!aksrt_captcha_validate_challenge($challenge, 'login', 'geetest', false), 'cross-provider challenge accepted');
|
||||
$_COOKIE[AKSRT_CAPTCHA_BROWSER_COOKIE] = str_repeat('B', 43);
|
||||
check(!aksrt_captcha_validate_challenge($challenge, 'login', 'cloudflare', false), 'cross-browser challenge accepted');
|
||||
$_COOKIE[AKSRT_CAPTCHA_BROWSER_COOKIE] = str_repeat('A', 43);
|
||||
check(aksrt_captcha_validate_challenge($challenge, 'login', 'cloudflare', true), 'valid challenge consume failed');
|
||||
check(!aksrt_captcha_validate_challenge($challenge, 'login', 'cloudflare', true), 'challenge replay accepted');
|
||||
jio_captcha_config_reset();
|
||||
$_COOKIE[JIO_CAPTCHA_BROWSER_COOKIE] = str_repeat('A', 43);
|
||||
$challenge = jio_captcha_issue_challenge('login', 'cloudflare');
|
||||
check(jio_captcha_validate_challenge($challenge, 'login', 'cloudflare', false), 'valid scene challenge failed');
|
||||
check(!jio_captcha_validate_challenge($challenge, 'comment', 'cloudflare', false), 'cross-scene challenge accepted');
|
||||
check(!jio_captcha_validate_challenge($challenge, 'login', 'geetest', false), 'cross-provider challenge accepted');
|
||||
$_COOKIE[JIO_CAPTCHA_BROWSER_COOKIE] = str_repeat('B', 43);
|
||||
check(!jio_captcha_validate_challenge($challenge, 'login', 'cloudflare', false), 'cross-browser challenge accepted');
|
||||
$_COOKIE[JIO_CAPTCHA_BROWSER_COOKIE] = str_repeat('A', 43);
|
||||
check(jio_captcha_validate_challenge($challenge, 'login', 'cloudflare', true), 'valid challenge consume failed');
|
||||
check(!jio_captcha_validate_challenge($challenge, 'login', 'cloudflare', true), 'challenge replay accepted');
|
||||
|
||||
$proof = aksrt_captcha_issue_proof('login', 'cloudflare');
|
||||
check(!aksrt_captcha_consume_proof($proof, 'comment', 'cloudflare'), 'cross-scene proof accepted');
|
||||
check(aksrt_captcha_consume_proof($proof, 'login', 'cloudflare'), 'valid proof consume failed');
|
||||
check(!aksrt_captcha_consume_proof($proof, 'login', 'cloudflare'), 'proof replay accepted');
|
||||
$proof = jio_captcha_issue_proof('login', 'cloudflare');
|
||||
check(!jio_captcha_consume_proof($proof, 'comment', 'cloudflare'), 'cross-scene proof accepted');
|
||||
check(jio_captcha_consume_proof($proof, 'login', 'cloudflare'), 'valid proof consume failed');
|
||||
check(!jio_captcha_consume_proof($proof, 'login', 'cloudflare'), 'proof replay accepted');
|
||||
|
||||
$headers = aksrt_tencent_tc3_sign('id', 'key', 'captcha', 1700000000, '2023-11-14', 'DescribeCaptchaResult', '2019-07-22', '{}');
|
||||
$headers = jio_tencent_tc3_sign('id', 'key', 'captcha', 1700000000, '2023-11-14', 'DescribeCaptchaResult', '2019-07-22', '{}');
|
||||
check(str_starts_with($headers['Authorization'], 'TC3-HMAC-SHA256 Credential=id/2023-11-14/captcha/tc3_request'), 'TC3 authorization scope mismatch');
|
||||
|
||||
echo "Captcha security harness passed.\n";
|
||||
|
||||
Reference in new issue
Block a user