fix(extensions): IP 归属地管理端测试可绕过启用开关
后台测试此前受 ip_geo_enabled 短路,未启用时结果恒为空;强制 live lookup 并返回可读失败原因。
This commit is contained in:
@@ -284,6 +284,9 @@ class AKSRT_Admin_Extension_Controller extends AKSRT_Admin_Controller_Base {
|
||||
|
||||
/**
|
||||
* POST /extensions/ip-test — test current IP provider with a given IP.
|
||||
*
|
||||
* Admin tests force a live lookup (skip enable-gate + cache) so operators can
|
||||
* verify credentials before flipping the runtime switch.
|
||||
*/
|
||||
public function test_ip_geo(WP_REST_Request $request): WP_REST_Response {
|
||||
$params = $this->get_json_params($request);
|
||||
@@ -297,12 +300,46 @@ class AKSRT_Admin_Extension_Controller extends AKSRT_Admin_Controller_Base {
|
||||
return $this->error(__('IP 归属地服务不可用', 'aksrt'), 500);
|
||||
}
|
||||
|
||||
$result = AKSRT_IP_Geo::get_instance()->lookup($ip);
|
||||
$geo = AKSRT_IP_Geo::get_instance();
|
||||
$status = $geo->get_status();
|
||||
$result = $geo->lookup($ip, true);
|
||||
|
||||
$reason = (string) ($result['reason'] ?? '');
|
||||
$message = '';
|
||||
$ok = !empty($result['country']) || !empty($result['province']) || !empty($result['city']);
|
||||
|
||||
if (!$ok) {
|
||||
switch ($reason) {
|
||||
case 'private_ip':
|
||||
$message = __('该地址为私有/保留 IP,无法查询归属地。请换公网 IP 测试。', 'aksrt');
|
||||
break;
|
||||
case 'provider_empty':
|
||||
if (!empty($status['missing_fields'])) {
|
||||
$message = sprintf(
|
||||
/* translators: %s: missing config field keys */
|
||||
__('当前服务商凭据不完整(缺少:%s),请先在「扩展 → IP归属地」补全配置。', 'aksrt'),
|
||||
implode(', ', (array) $status['missing_fields'])
|
||||
);
|
||||
} else {
|
||||
$message = __('服务商未返回有效归属地,请检查凭据、网络出口或换一个 IP 重试。', 'aksrt');
|
||||
}
|
||||
break;
|
||||
case 'disabled':
|
||||
$message = __('IP 归属地功能未启用。', 'aksrt');
|
||||
break;
|
||||
default:
|
||||
$message = __('未查询到归属地信息。', 'aksrt');
|
||||
}
|
||||
}
|
||||
|
||||
return $this->success([
|
||||
'data' => [
|
||||
'ip' => $ip,
|
||||
'result' => $result,
|
||||
'ip' => $ip,
|
||||
'ok' => $ok,
|
||||
'message' => $message,
|
||||
'status' => $status,
|
||||
'result' => $result,
|
||||
'display' => $ok ? $geo->format($result) : '',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user