diff --git a/inc/helpers/aksrt-pay.php b/inc/helpers/aksrt-pay.php
index 4ade0008..4884857d 100644
--- a/inc/helpers/aksrt-pay.php
+++ b/inc/helpers/aksrt-pay.php
@@ -1457,20 +1457,12 @@ if (!function_exists('aksrt_get_paid_download_actions_html')) {
return '
' . esc_html__('暂无可下载资源', 'aksrt') . '
';
}
- // 下载总开关关闭 = 直连模式:按钮直接输出原始地址,不走本站中转链接。
- $direct_download = class_exists('\AKSRT\Content\Download')
- && !\AKSRT\Content\Download::get_instance()->is_enabled();
-
$buttons = '';
foreach ($downloads as $index => $download) {
if (!is_array($download)) {
continue;
}
$url = (string) ($download['url'] ?? '');
- if ($direct_download && $url === '') {
- // 直连模式没有可用的原始地址,空源不渲染。
- continue;
- }
$label = trim((string) ($download['label'] ?? ''));
$service = function_exists('aksrt_detect_cloud_service')
? aksrt_detect_cloud_service($url)
@@ -1489,13 +1481,8 @@ if (!function_exists('aksrt_get_paid_download_actions_html')) {
$copy_label = $extract_code !== '' ? $extract_code : ($copy_key !== '' ? $copy_key : __('更多内容', 'aksrt'));
$buttons .= '';
- if ($direct_download) {
- $buttons .= '
';
- $buttons .= '' . esc_html($label) . '';
- } else {
- $buttons .= '
';
- }
+ $buttons .= '
';
if ($copy_value !== '') {
$buttons .= '
';
} elseif ($extract_code !== '') {
diff --git a/src/Content/Download.php b/src/Content/Download.php
index 1d7aa87c..a7dea8b2 100644
--- a/src/Content/Download.php
+++ b/src/Content/Download.php
@@ -12,11 +12,12 @@ class Download {
const TOKEN_LEN = 48;
const QUERY_VAR = 'aksrt_dl_token';
- // Hardened fallbacks used when the aksrt_download_config option is
- // missing or contains values the admin validation would reject.
- const FALLBACK_ENDPOINT = 'download';
- const FALLBACK_MAX_USES = 1;
- const FALLBACK_TTL_MINUTES = 10;
+ // Fixed relay configuration. The admin download-config settings page was
+ // removed, so these constants are the single source of truth for the
+ // site-routed download system (endpoint, per-token uses, TTL).
+ const ENDPOINT = 'download';
+ const MAX_USES = 1;
+ const TTL_MINUTES = 10;
private static $instance = null;
@@ -69,51 +70,17 @@ class Download {
}
/**
- * Master switch for the site-routed download system (aksrt_download_config
- * "enabled", default true). When off, download buttons render the raw
- * source URLs directly and every token route/endpoint below stays dormant.
- */
- public function is_enabled(): bool {
- $cfg = get_option('aksrt_download_config', []);
- if (!is_array($cfg)) {
- return true;
- }
- return !isset($cfg['enabled']) || !empty($cfg['enabled']);
- }
-
- /**
- * Effective download settings (aksrt_download_config), clamped so a
- * corrupted option can never break routing or accounting.
+ * Effective download settings for the fixed relay configuration.
*/
private function config(): array {
- $cfg = get_option('aksrt_download_config', []);
- if (!is_array($cfg)) {
- $cfg = [];
- }
-
- $alias = trim((string) ($cfg['url_alias'] ?? self::FALLBACK_ENDPOINT));
- if ($alias === '' || strlen($alias) > 48 || !preg_match('/^[A-Za-z0-9_-]+$/', $alias)) {
- $alias = self::FALLBACK_ENDPOINT;
- }
-
- $max_uses = isset($cfg['default_max_uses']) ? (int) $cfg['default_max_uses'] : self::FALLBACK_MAX_USES;
- $max_uses = min(100, max(1, $max_uses));
-
- $ttl_minutes = isset($cfg['ttl_minutes']) ? (int) $cfg['ttl_minutes'] : self::FALLBACK_TTL_MINUTES;
- $ttl_minutes = min(1440, max(1, $ttl_minutes));
-
return [
- 'endpoint' => $alias,
- 'max_uses' => $max_uses,
- 'ttl' => $ttl_minutes * MINUTE_IN_SECONDS,
+ 'endpoint' => self::ENDPOINT,
+ 'max_uses' => self::MAX_USES,
+ 'ttl' => self::TTL_MINUTES * MINUTE_IN_SECONDS,
];
}
public function register_rewrite(): void {
- if (!$this->is_enabled()) {
- return;
- }
-
add_rewrite_rule(
'^' . preg_quote($this->config()['endpoint'], '/') . '/([A-Za-z0-9]{1,64})/?$',
'index.php?' . self::QUERY_VAR . '=$matches[1]',
@@ -122,12 +89,11 @@ class Download {
}
/**
- * Re-flush rewrite rules whenever the configured alias or the master
- * switch changes, using the same version-marker approach as Auth\Router.
+ * Re-flush rewrite rules on theme version changes, using the same
+ * version-marker approach as Auth\Router.
*/
public function maybe_flush_rewrite(): void {
- $endpoint = $this->is_enabled() ? $this->config()['endpoint'] : 'off';
- $version = AKSRT_VERSION . ':download-endpoint:' . $endpoint;
+ $version = AKSRT_VERSION . ':download-endpoint:' . self::ENDPOINT;
if ((string) get_option('aksrt_dl_rewrite_version') !== $version) {
flush_rewrite_rules(false);
update_option('aksrt_dl_rewrite_version', $version);
@@ -140,10 +106,6 @@ class Download {
}
public function register_routes(): void {
- if (!$this->is_enabled()) {
- return;
- }
-
register_rest_route('aksrt/v1', '/download/request', [
'methods' => 'POST',
'callback' => [$this, 'rest_request'],
@@ -257,11 +219,6 @@ class Download {
$this->fail_410();
}
- // Master switch off: the token system is retired, links are dead ends.
- if (!$this->is_enabled()) {
- $this->fail_410();
- }
-
global $wpdb;
$table = \AKSRT\Core\DBMigrator::table('dl_token');
if (!$table) $this->fail_410();
diff --git a/templates/parts/resource-download-box.php b/templates/parts/resource-download-box.php
index c69ab822..8bbcf93e 100644
--- a/templates/parts/resource-download-box.php
+++ b/templates/parts/resource-download-box.php
@@ -27,9 +27,6 @@ if ($pay_type !== 'download' || empty($downloads)) {
$is_resource_context = function_exists('aksrt_is_resource_post') && aksrt_is_resource_post($post_id);
$context_variant = $is_resource_context ? 'resource' : 'content';
-// 下载总开关关闭 = 直连模式:下载按钮直接输出原始地址,不走本站中转链接。
-$direct_download = class_exists('\AKSRT\Content\Download')
- && !\AKSRT\Content\Download::get_instance()->is_enabled();
$subject_label = trim((string) ($meta['subject_label'] ?? ''));
if ($subject_label === '') {
$subject_label = $is_resource_context ? __('资源', 'aksrt') : __('内容', 'aksrt');
@@ -60,9 +57,7 @@ $pay_modo = is_array($priced)
$user_amount = is_array($priced) ? (float) ($priced['amount'] ?? 0) : (float) ($meta['price'] ?? 0);
$cost = function_exists('aksrt_resource_download_cost') ? (int) aksrt_resource_download_cost($post_id) : 0;
-// 直连模式下没有“获取链接”请求,验证码容器不会被打开,属死 UI 不渲染。
-$captcha_active = !$direct_download
- && function_exists('aksrt_is_captcha_enabled_for')
+$captcha_active = function_exists('aksrt_is_captcha_enabled_for')
&& aksrt_is_captcha_enabled_for('download');
$balance = (int) ($gate_data['balance'] ?? (is_user_logged_in() ? \AKSRT\Ledger\LedgerService::get_instance()->balance(get_current_user_id(), \AKSRT\Ledger\AssetType::POINTS) : 0));
$login_url = (string) ($gate_data['login_url'] ?? wp_login_url(get_permalink($post_id)));
@@ -350,10 +345,6 @@ if ($is_need_purchase && $user_amount > 0) {
}
$type = isset($row['type']) ? (string) $row['type'] : 'direct';
$url = isset($row['url']) ? (string) $row['url'] : '';
- if ($direct_download && $url === '') {
- // 直连模式没有可用的原始地址,空源不渲染。
- continue;
- }
$extract_code = isset($row['extract_code']) ? trim((string) $row['extract_code']) : '';
$has_extract = $extract_code !== '';
@@ -371,15 +362,6 @@ if ($is_need_purchase && $user_amount > 0) {
$btn_action = '';
$btn_target = '';
$btn_rel = '';
- } elseif ($direct_download) {
- $btn_tag = 'a';
- $btn_href = $url;
- $btn_text = __('立即下载', 'aksrt');
- $btn_icon = 'fa-download';
- $btn_modifier = $has_paid_access ? ' resource-download-box__btn--owned' : '';
- $btn_action = '';
- $btn_target = ' target="_blank"';
- $btn_rel = ' rel="nofollow noopener"';
} else {
$btn_tag = 'button';
$btn_href = '';
@@ -406,12 +388,6 @@ if ($is_need_purchase && $user_amount > 0) {
-
-
-