Move all domain folders from src/AKSRT/{Domain} to src/{Domain}; remap
Composer PSR-4 "AKSRT\\": "src/"; update audit script + README + ADR
paths; remove dead tools/build-psr4-map.php (scanned deleted inc/classes).
228 lines
12 KiB
PHP
228 lines
12 KiB
PHP
<?php
|
|
/**
|
|
* @package AKSRT
|
|
*/
|
|
|
|
namespace AKSRT\Settings;
|
|
|
|
defined('ABSPATH') || exit;
|
|
|
|
class ExtensionRuntime {
|
|
|
|
/** 获取审核配置 */
|
|
public static function get_moderation(): array {
|
|
return get_option('aksrt_moderation_config', [
|
|
'enabled' => false,
|
|
'akismet_enabled' => false,
|
|
'akismet_site_url' => '',
|
|
'akismet_blog_lang' => 'zh-CN',
|
|
'akismet_api_key' => '',
|
|
'ai_enabled' => false,
|
|
'ai_provider' => 'baidu',
|
|
'baidu_api_key' => '',
|
|
'baidu_secret_key' => '',
|
|
'baidu_token_url' => 'https://aip.baidubce.com/oauth/2.0/token',
|
|
'baidu_censor_url' => 'https://aip.baidubce.com/rest/2.0/solution/v1/text_censor/v2/user_defined',
|
|
'baidu_img_censor_url' => 'https://aip.baidubce.com/rest/2.0/solution/v1/img_censor/v2/user_defined',
|
|
'ai_moderate_comments' => true,
|
|
'ai_moderate_background' => true,
|
|
'auto_approve_low_risk' => true,
|
|
'auto_reject_high_risk' => true,
|
|
'low_risk_max_score' => 35,
|
|
'high_risk_min_score' => 80,
|
|
'blocked_keywords' => '',
|
|
'rate_limit_enabled' => false,
|
|
'rate_limit_min_interval' => 8,
|
|
'rate_limit_max_per_hour' => 15,
|
|
'geoip_enabled' => false,
|
|
'geoip_provider' => 'ipapi',
|
|
'geoip_api_key' => '',
|
|
'geoip_block_countries' => [],
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 获取 IP 归属地设置
|
|
*/
|
|
public static function get_ip_geo_settings(): array {
|
|
$settings = Settings::get_all();
|
|
|
|
$provider = sanitize_key((string) ($settings['ip_addr_sdk'] ?? 'null'));
|
|
$allowed = ['polling', 'qq', 'amap', 'null'];
|
|
if (!in_array($provider, $allowed, true)) {
|
|
$provider = 'null';
|
|
}
|
|
|
|
$allowed_display = ['comment', 'user_home', 'user_center', 'post'];
|
|
// Only fill defaults when the key was never saved — empty array means "none".
|
|
if (!array_key_exists('ip_geo_display', $settings)) {
|
|
$display_norm = $allowed_display;
|
|
} else {
|
|
$display_raw = $settings['ip_geo_display'];
|
|
$display = is_array($display_raw) ? $display_raw : [];
|
|
$display_norm = [];
|
|
foreach ($display as $item) {
|
|
$key = sanitize_key((string) $item);
|
|
if (in_array($key, $allowed_display, true) && !in_array($key, $display_norm, true)) {
|
|
$display_norm[] = $key;
|
|
}
|
|
}
|
|
}
|
|
|
|
$format = sanitize_key((string) ($settings['ip_geo_format'] ?? 'province_city'));
|
|
if (!in_array($format, ['province_city', 'province', 'country_province'], true)) {
|
|
$format = 'province_city';
|
|
}
|
|
|
|
return [
|
|
'ip_geo_enabled' => !empty($settings['ip_geo_enabled']),
|
|
'ip_addr_sdk' => $provider,
|
|
'ip_geo_cache_ttl' => max(3600, (int) ($settings['ip_geo_cache_ttl'] ?? 86400)),
|
|
'ip_geo_display' => $display_norm,
|
|
'ip_geo_format' => $format,
|
|
'ip_geo_fallback_text' => (string) ($settings['ip_geo_fallback_text'] ?? ''),
|
|
'ip_addr_sdk_qq_appkey' => (string) ($settings['ip_addr_sdk_qq_appkey'] ?? ''),
|
|
'ip_addr_sdk_qq_secretkey' => (string) ($settings['ip_addr_sdk_qq_secretkey'] ?? ''),
|
|
'ip_addr_sdk_amap_appkey' => (string) ($settings['ip_addr_sdk_amap_appkey'] ?? ''),
|
|
'ip_addr_sdk_amap_secretkey' => (string) ($settings['ip_addr_sdk_amap_secretkey'] ?? ''),
|
|
'ip_geo_verified' => !empty($settings['ip_geo_verified']),
|
|
];
|
|
}
|
|
|
|
/**
|
|
* 获取内容审核设置
|
|
*/
|
|
public static function get_content_audit_settings(): array {
|
|
$settings = Settings::get_all();
|
|
|
|
$provider = sanitize_key((string) ($settings['content_audit_provider'] ?? 'baidu'));
|
|
$allowed = ['baidu', 'null'];
|
|
if (!in_array($provider, $allowed, true)) {
|
|
$provider = 'baidu';
|
|
}
|
|
|
|
$on_failure = sanitize_key((string) ($settings['content_audit_on_failure'] ?? 'allow'));
|
|
if (!in_array($on_failure, ['allow', 'block'], true)) {
|
|
$on_failure = 'allow';
|
|
}
|
|
|
|
return [
|
|
'content_audit_enabled' => !empty($settings['content_audit_enabled']),
|
|
'content_audit_provider' => $provider,
|
|
'content_audit_api_key' => (string) ($settings['content_audit_api_key'] ?? ''),
|
|
'content_audit_api_secret' => (string) ($settings['content_audit_api_secret'] ?? ''),
|
|
'content_audit_text_enabled' => !isset($settings['content_audit_text_enabled']) || !empty($settings['content_audit_text_enabled']),
|
|
'content_audit_image_enabled' => !empty($settings['content_audit_image_enabled']),
|
|
'content_audit_on_failure' => $on_failure,
|
|
'content_audit_log_enabled' => !isset($settings['content_audit_log_enabled']) || !empty($settings['content_audit_log_enabled']),
|
|
'content_audit_baidu_token_url' => (string) ($settings['content_audit_baidu_token_url'] ?? ''),
|
|
'content_audit_baidu_text_url' => (string) ($settings['content_audit_baidu_text_url'] ?? ''),
|
|
'content_audit_baidu_img_url' => (string) ($settings['content_audit_baidu_img_url'] ?? ''),
|
|
'content_audit_verified' => !empty($settings['content_audit_verified']),
|
|
];
|
|
}
|
|
|
|
/**
|
|
* 获取搜索引擎推送设置
|
|
*/
|
|
public static function get_search_push_settings(): array {
|
|
$settings = Settings::get_all();
|
|
|
|
$enabled = !empty($settings['baidu_push_enabled']) || !empty($settings['seo_baidu_push']);
|
|
$token = (string) ($settings['baidu_push_token'] ?? '');
|
|
if ($token === '' && !empty($settings['seo_baidu_token'])) {
|
|
$token = (string) $settings['seo_baidu_token'];
|
|
}
|
|
|
|
return [
|
|
'baidu_push_enabled' => $enabled,
|
|
'baidu_push_token' => $token,
|
|
'baidu_push_auto' => !isset($settings['baidu_push_auto']) || !empty($settings['baidu_push_auto']),
|
|
'baidu_push_on_publish' => !isset($settings['baidu_push_on_publish']) || !empty($settings['baidu_push_on_publish']),
|
|
'baidu_push_on_update' => !empty($settings['baidu_push_on_update']),
|
|
'baidu_push_batch_size' => max(1, min(500, (int) ($settings['baidu_push_batch_size'] ?? 50))),
|
|
'baidu_push_log_enabled' => !isset($settings['baidu_push_log_enabled']) || !empty($settings['baidu_push_log_enabled']),
|
|
'baidu_push_verified' => !empty($settings['baidu_push_verified']),
|
|
'xzh_on' => !empty($settings['xzh_on']),
|
|
'xzh_appid' => (string) ($settings['xzh_appid'] ?? ''),
|
|
'xzh_render_tail' => !isset($settings['xzh_render_tail']) || !empty($settings['xzh_render_tail']),
|
|
'xzh_jsonld_single' => !isset($settings['xzh_jsonld_single']) || !empty($settings['xzh_jsonld_single']),
|
|
'xzh_jsonld_page' => !empty($settings['xzh_jsonld_page']),
|
|
'xzh_jsonld_img' => !empty($settings['xzh_jsonld_img']),
|
|
'seo_baidu_normal' => !empty($settings['seo_baidu_normal']),
|
|
'seo_baidu_fast' => !empty($settings['seo_baidu_fast']),
|
|
];
|
|
}
|
|
|
|
/**
|
|
* 获取短信接口设置
|
|
*
|
|
* 注意:所有供应商共用 sms_access_key / sms_access_secret(通用凭证字段)。
|
|
* 各供应商特有的额外字段使用各自的命名空间(sms_tencent_*, sms_huawei_*, sms_custom_*)。
|
|
* sms_sign_name / sms_template_code 为所有供应商共用。
|
|
*/
|
|
public static function get_sms_settings(): array {
|
|
$settings = Settings::get_all();
|
|
|
|
$provider = sanitize_key((string) ($settings['sms_provider'] ?? 'aliyun'));
|
|
$allowed_providers = ['aliyun', 'tencent', 'huawei', 'custom'];
|
|
if (!in_array($provider, $allowed_providers, true)) {
|
|
$provider = 'aliyun';
|
|
}
|
|
|
|
$ali_api_type = sanitize_key((string) ($settings['sms_ali_api_type'] ?? 'sms'));
|
|
if (!in_array($ali_api_type, ['sms', 'verify'], true)) {
|
|
$ali_api_type = 'sms';
|
|
}
|
|
|
|
$code_length = max(4, min(8, (int) ($settings['sms_code_length'] ?? 6)));
|
|
$code_expire = max(60, min(600, (int) ($settings['sms_code_expire'] ?? 300)));
|
|
$rate_limit = max(10, (int) ($settings['sms_rate_limit'] ?? 60));
|
|
$daily_limit = max(1, (int) ($settings['sms_daily_limit'] ?? 10));
|
|
|
|
return [
|
|
'sms_enabled' => !empty($settings['sms_enabled']),
|
|
'sms_provider' => $provider,
|
|
'sms_number_limit_ch' => !isset($settings['sms_number_limit_ch']) || !empty($settings['sms_number_limit_ch']),
|
|
'sms_access_key' => (string) ($settings['sms_access_key'] ?? ''),
|
|
'sms_access_secret' => (string) ($settings['sms_access_secret'] ?? ''),
|
|
'sms_sign_name' => (string) ($settings['sms_sign_name'] ?? ''),
|
|
'sms_template_code' => (string) ($settings['sms_template_code'] ?? ''),
|
|
'sms_code_length' => $code_length,
|
|
'sms_code_expire' => $code_expire,
|
|
'sms_rate_limit' => $rate_limit,
|
|
'sms_daily_limit' => $daily_limit,
|
|
'sms_notify_bind' => !isset($settings['sms_notify_bind']) || !empty($settings['sms_notify_bind']),
|
|
'sms_notify_login' => !empty($settings['sms_notify_login']),
|
|
'sms_notify_register' => !isset($settings['sms_notify_register']) || !empty($settings['sms_notify_register']),
|
|
'sms_notify_reset_password' => !isset($settings['sms_notify_reset_password']) || !empty($settings['sms_notify_reset_password']),
|
|
// 阿里云特有
|
|
'sms_ali_api_type' => $ali_api_type,
|
|
'sms_region_id' => (string) ($settings['sms_region_id'] ?? 'cn-hangzhou'),
|
|
'sms_aliyun_verified' => !empty($settings['sms_aliyun_verified']),
|
|
// 腾讯云特有
|
|
'sms_tencent_app_id' => (string) ($settings['sms_tencent_app_id'] ?? ''),
|
|
'sms_tencent_app_key' => (string) ($settings['sms_tencent_app_key'] ?? ''),
|
|
'sms_tencent_secret_id' => (string) ($settings['sms_tencent_secret_id'] ?? ''),
|
|
'sms_tencent_secret_key' => (string) ($settings['sms_tencent_secret_key'] ?? ''),
|
|
'sms_tencent_region' => (string) ($settings['sms_tencent_region'] ?? 'ap-guangzhou'),
|
|
'sms_tencent_verified' => !empty($settings['sms_tencent_verified']),
|
|
// 华为云特有
|
|
'sms_huawei_sender' => (string) ($settings['sms_huawei_sender'] ?? ''),
|
|
'sms_huawei_signature' => (string) ($settings['sms_huawei_signature'] ?? ''),
|
|
'sms_huawei_endpoint' => (string) ($settings['sms_huawei_endpoint'] ?? ''),
|
|
'sms_huawei_verified' => !empty($settings['sms_huawei_verified']),
|
|
// 自定义接口特有
|
|
'sms_custom_url' => (string) ($settings['sms_custom_url'] ?? ''),
|
|
'sms_custom_method' => (string) ($settings['sms_custom_method'] ?? 'POST'),
|
|
'sms_custom_auth_type' => (string) ($settings['sms_custom_auth_type'] ?? 'header'),
|
|
'sms_custom_auth_key' => (string) ($settings['sms_custom_auth_key'] ?? ''),
|
|
'sms_custom_auth_value' => (string) ($settings['sms_custom_auth_value'] ?? ''),
|
|
'sms_custom_headers' => (string) ($settings['sms_custom_headers'] ?? ''),
|
|
'sms_custom_body' => (string) ($settings['sms_custom_body'] ?? ''),
|
|
'sms_custom_success_rule' => (string) ($settings['sms_custom_success_rule'] ?? ''),
|
|
'sms_custom_verified' => !empty($settings['sms_custom_verified']),
|
|
];
|
|
}
|
|
}
|