M1Screw 1 год назад
Родитель
Сommit
078132e961

+ 1 - 3
app/routes.php

@@ -22,9 +22,7 @@ return static function (Slim\App $app): void {
     // OAuth
     $app->post('/oauth/{type}', App\Controllers\OAuthController::class . ':index');
     $app->get('/oauth/{type}', App\Controllers\OAuthController::class . ':index');
-    // 传统订阅(SS/V2Ray/Trojan etc.)
-    $app->get('/link/{token}', App\Controllers\SubController::class . ':getTraditionalSubContent');
-    // 通用订阅(Json/Clash/SIP008)
+    // 通用订阅
     $app->get('/sub/{token}/{subtype}', App\Controllers\SubController::class . ':getUniversalSubContent');
     // User Center
     $app->group('/user', static function (RouteCollectorProxy $group): void {

+ 0 - 10
config/settings.json

@@ -1479,16 +1479,6 @@
         "default": "1",
         "mark": "用户修改账户登录密码时,是否强制更换订阅地址"
     },
-    {
-        "id": null,
-        "item": "enable_traditional_sub",
-        "value": "1",
-        "class": "subscribe",
-        "is_public": 1,
-        "type": "bool",
-        "default": "1",
-        "mark": "传统订阅系统开关"
-    },
     {
         "id": null,
         "item": "enable_ss_sub",

+ 3 - 17
resources/views/tabler/admin/setting/sub.tpl

@@ -39,23 +39,9 @@
                             <div class="tab-content">
                                 <div class="tab-pane active show" id="sub">
                                     <div class="card-body">
-                                        <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">启用传统订阅系统</label>
-                                            <div class="col">
-                                                <select id="enable_traditional_sub" class="col form-select"
-                                                        value="{$settings['enable_traditional_sub']}">
-                                                    <option value="0"
-                                                            {if ! $settings['enable_traditional_sub']}selected{/if}>关闭
-                                                    </option>
-                                                    <option value="1"
-                                                            {if $settings['enable_traditional_sub']}selected{/if}>开启
-                                                    </option>
-                                                </select>
-                                            </div>
-                                        </div>
                                         <div class="form-group mb-3 row">
                                             <label class="form-label col-3 col-form-label">启用 Shadowsocks
-                                                订阅(仅影响前端显示与传统/sip002/sip008订阅)</label>
+                                                订阅(仅影响前端显示与ss/sip002/sip008订阅)</label>
                                             <div class="col">
                                                 <select id="enable_ss_sub" class="col form-select"
                                                         value="{$settings['enable_ss_sub']}">
@@ -70,7 +56,7 @@
                                         </div>
                                         <div class="form-group mb-3 row">
                                             <label class="form-label col-3 col-form-label">启用 V2Ray
-                                                订阅(仅影响前端显示与传统订阅)</label>
+                                                订阅(仅影响前端显示与v2ray订阅)</label>
                                             <div class="col">
                                                 <select id="enable_v2_sub" class="col form-select"
                                                         value="{$settings['enable_v2_sub']}">
@@ -85,7 +71,7 @@
                                         </div>
                                         <div class="form-group mb-3 row">
                                             <label class="form-label col-3 col-form-label">启用 Trojan
-                                                订阅(仅影响前端显示与传统订阅)</label>
+                                                订阅(仅影响前端显示与trojan订阅)</label>
                                             <div class="col">
                                                 <select id="enable_trojan_sub" class="col form-select"
                                                         value="{$settings['enable_trojan_sub']}">

+ 48 - 59
resources/views/tabler/user/index.tpl

@@ -135,14 +135,12 @@
                                     &nbsp;通用订阅
                                 </a>
                             </li>
-                            {if $public_setting['enable_traditional_sub']}
-                                <li class="nav-item">
-                                    <a href="#traditional-sub" class="nav-link" data-bs-toggle="tab">
-                                        <i class="ti ti-rss icon"></i>
-                                        &nbsp;传统订阅
-                                    </a>
-                                </li>
-                            {/if}
+                            <li class="nav-item">
+                                <a href="#client-sub" class="nav-link" data-bs-toggle="tab">
+                                    <i class="ti ti-rss icon"></i>
+                                    &nbsp;客户端订阅
+                                </a>
+                            </li>
                             <li class="nav-item">
                                 <a href="#windows" class="nav-link" data-bs-toggle="tab">
                                     <i class="ti ti-brand-windows icon"></i>
@@ -220,53 +218,51 @@
                                         </div>
                                     </div>
                                 </div>
-                                {if $public_setting['enable_traditional_sub']}
-                                    <div class="tab-pane show" id="traditional-sub">
-                                        <div>
+                                <div class="tab-pane show" id="client-sub">
+                                    <div>
+                                        {if $public_setting['enable_ss_sub']}
+                                            <p>
+                                                客户端订阅(Shadowsocks):<code>{$UniversalSub}/ss</code></p>
+                                            <p>
+                                                客户端订阅(SIP002):<code>{$UniversalSub}/sip002</code>
+                                            </p>
+                                        {/if}
+                                        {if $public_setting['enable_v2_sub']}
+                                            <p>
+                                                客户端订阅(V2Ray):<code>{$UniversalSub}/v2ray</code>
+                                            </p>
+                                        {/if}
+                                        {if $public_setting['enable_trojan_sub']}
+                                            <p>
+                                                客户端订阅(Trojan):<code>{$UniversalSub}/trojan</code>
+                                            </p>
+                                        {/if}
+                                        <div class="btn-list justify-content-start">
                                             {if $public_setting['enable_ss_sub']}
-                                                <p>
-                                                    传统订阅(Shadowsocks):<code>{$TraditionalSub}?ss=1</code></p>
-                                                <p>
-                                                    传统订阅(Shadowsocks SIP002):<code>{$TraditionalSub}?sip002=1</code>
-                                                </p>
+                                                <a data-clipboard-text="{$UniversalSub}/ss"
+                                                   class="copy btn btn-primary">
+                                                    复制客户端订阅(Shadowsocks)
+                                                </a>
+                                                <a data-clipboard-text="{$UniversalSub}/sip002"
+                                                   class="copy btn btn-primary">
+                                                    复制客户端订阅(SIP002)
+                                                </a>
                                             {/if}
                                             {if $public_setting['enable_v2_sub']}
-                                                <p>
-                                                    传统订阅(V2Ray):<code>{$TraditionalSub}?v2ray=1</code>
-                                                </p>
+                                                <a data-clipboard-text="{$UniversalSub}/v2ray"
+                                                   class="copy btn btn-primary">
+                                                    复制客户端订阅(V2Ray)
+                                                </a>
                                             {/if}
                                             {if $public_setting['enable_trojan_sub']}
-                                                <p>
-                                                    传统订阅(Trojan):<code>{$TraditionalSub}?trojan=1</code>
-                                                </p>
+                                                <a data-clipboard-text="{$UniversalSub}/trojan"
+                                                   class="copy btn btn-primary">
+                                                    复制客户端订阅(Trojan)
+                                                </a>
                                             {/if}
-                                            <div class="btn-list justify-content-start">
-                                                {if $public_setting['enable_ss_sub']}
-                                                    <a data-clipboard-text="{$TraditionalSub}?ss=1"
-                                                       class="copy btn btn-primary">
-                                                        复制传统订阅(Shadowsocks)
-                                                    </a>
-                                                    <a data-clipboard-text="{$TraditionalSub}?sip002=1"
-                                                       class="copy btn btn-primary">
-                                                        复制传统订阅(Shadowsocks SIP002)
-                                                    </a>
-                                                {/if}
-                                                {if $public_setting['enable_v2_sub']}
-                                                    <a data-clipboard-text="{$TraditionalSub}?v2ray=1"
-                                                       class="copy btn btn-primary">
-                                                        复制传统订阅(V2Ray)
-                                                    </a>
-                                                {/if}
-                                                {if $public_setting['enable_trojan_sub']}
-                                                    <a data-clipboard-text="{$TraditionalSub}?trojan=1"
-                                                       class="copy btn btn-primary">
-                                                        复制传统订阅(Trojan)
-                                                    </a>
-                                                {/if}
-                                            </div>
                                         </div>
                                     </div>
-                                {/if}
+                                </div>
                                 <div class="tab-pane" id="windows">
                                     <div>
                                         <p>
@@ -274,11 +270,11 @@
                                         </p>
                                         <div class="btn-list justify-content-start">
                                             <a
-                                                    {if $config['enable_r2_client_download']}
-                                                        href="/user/clients/Clash.Verge.exe"
-                                                    {else}
-                                                        href="/clients/Clash.Verge.exe"
-                                                    {/if} class="btn btn-azure">
+                                                {if $config['enable_r2_client_download']}
+                                                    href="/user/clients/Clash.Verge.exe"
+                                                {else}
+                                                    href="/clients/Clash.Verge.exe"
+                                                {/if} class="btn btn-azure">
                                                 下载 Clash Verge
                                             </a>
                                             <a data-clipboard-text="{$UniversalSub}/clash"
@@ -342,13 +338,6 @@
                                         适用于 sing-box 的订阅:<code>{$UniversalSub}/singbox</code>
                                     </p>
                                     <div class="btn-list justify-content-start">
-                                        <a {if $config['enable_r2_client_download']}
-                                            href="/user/clients/Clash-Android.apk"
-                                        {else}
-                                            href="/clients/Clash-Android.apk"
-                                        {/if} class="btn btn-azure">
-                                            下载 Clash for Android
-                                        </a>
                                         <a data-clipboard-text="{$UniversalSub}/clash"
                                            class="copy btn btn-primary">
                                             复制 Clash 订阅链接

+ 0 - 6
src/Controllers/Admin/NodeController.php

@@ -95,9 +95,6 @@ final class NodeController extends BaseController
         $node->name = $request->getParam('name');
         $node->node_group = $request->getParam('node_group');
         $node->server = trim($request->getParam('server'));
-
-        $node->updateNodeIp();
-
         $node->traffic_rate = $request->getParam('traffic_rate') ?? 1;
         $node->is_dynamic_rate = $request->getParam('is_dynamic_rate') === 'true' ? 1 : 0;
         $node->dynamic_rate_config = json_encode([
@@ -192,9 +189,6 @@ final class NodeController extends BaseController
         $node->name = $request->getParam('name');
         $node->node_group = $request->getParam('node_group') ?? 0;
         $node->server = trim($request->getParam('server'));
-
-        $node->updateNodeIp();
-
         $node->traffic_rate = $request->getParam('traffic_rate') ?? 1;
         $node->is_dynamic_rate = $request->getParam('is_dynamic_rate') === 'true' ? 1 : 0;
         $node->dynamic_rate_config = json_encode([

+ 0 - 1
src/Controllers/Admin/Setting/SubController.php

@@ -12,7 +12,6 @@ final class SubController extends BaseController
 {
     private static array $update_field = [
         'enable_forced_replacement',
-        'enable_traditional_sub',
         'enable_ss_sub',
         'enable_v2_sub',
         'enable_trojan_sub',

+ 3 - 85
src/Controllers/SubController.php

@@ -39,7 +39,7 @@ final class SubController extends BaseController
         $err_msg = '订阅链接无效';
 
         $subtype = $args['subtype'];
-        $subtype_list = ['json', 'clash', 'sip008', 'singbox'];
+        $subtype_list = ['json', 'clash', 'sip008', 'singbox', 'sip002', 'ss', 'v2ray', 'trojan'];
 
         if (! $_ENV['Subscribe'] ||
             ! in_array($subtype, $subtype_list) ||
@@ -69,7 +69,8 @@ final class SubController extends BaseController
 
         $content_type = match ($subtype) {
             'clash' => 'application/yaml',
-            default => 'application/json',
+            'json','sip008','singbox' => 'application/json',
+            default => 'text/plain',
         };
 
         $sub_details = ' upload=' . $user->u
@@ -86,81 +87,6 @@ final class SubController extends BaseController
             ->write($sub_info);
     }
 
-    /**
-     * @param $request
-     * @param $response
-     * @param $args
-     *
-     * @return ResponseInterface
-     *
-     * @throws RedisException
-     * @throws GuzzleException
-     * @throws ClientExceptionInterface
-     * @throws TelegramSDKException
-     */
-    public static function getTraditionalSubContent($request, $response, $args): ResponseInterface
-    {
-        $err_msg = '订阅链接无效';
-
-        if (! $_ENV['Subscribe'] ||
-            ! Config::obtain('enable_traditional_sub') ||
-            'https://' . $request->getHeaderLine('Host') !== $_ENV['subUrl']
-        ) {
-            return ResponseHelper::error($response, $err_msg);
-        }
-
-        $antiXss = new AntiXSS();
-        $token = $antiXss->xss_clean($args['token']);
-
-        if ($_ENV['enable_rate_limit'] &&
-            (! RateLimit::checkIPLimit($request->getServerParam('REMOTE_ADDR')) ||
-                ! RateLimit::checkSubLimit($token))
-        ) {
-            return ResponseHelper::error($response, $err_msg);
-        }
-
-        $link = Link::where('token', $token)->first();
-
-        if ($link === null || ! $link->isValid()) {
-            return ResponseHelper::error($response, $err_msg);
-        }
-
-        $user = $link->user();
-        $params = $request->getQueryParams();
-
-        $sub_types = [
-            'sip002',
-            'ss',
-            'v2ray',
-            'trojan',
-        ];
-
-        $sub_type = '';
-        $sub_info = '';
-
-        foreach ($params as $key => $value) {
-            if (in_array($key, $sub_types) && $value === '1') {
-                $sub_type = $key;
-                $sub_info = Subscribe::getContent($user, $sub_type);
-                break;
-            }
-        }
-
-        // 记录订阅日志
-        if (Config::obtain('subscribe_log')) {
-            (new SubscribeLog())->add($user, $sub_type, $antiXss->xss_clean($request->getHeaderLine('User-Agent')));
-        }
-
-        $sub_details = ' upload=' . $user->u
-            . '; download=' . $user->d
-            . '; total=' . $user->transfer_enable
-            . '; expire=' . strtotime($user->class_expire);
-
-        return $response->withHeader('Subscription-Userinfo', $sub_details)->write(
-            $sub_info
-        );
-    }
-
     public static function getUniversalSubLink($user): string
     {
         $userid = $user->id;
@@ -175,12 +101,4 @@ final class SubController extends BaseController
 
         return $_ENV['subUrl'] . '/sub/' . $token->token;
     }
-
-    public static function getTraditionalSubLink($user): string
-    {
-        $userid = $user->id;
-        $token = Link::where('userid', $userid)->first();
-
-        return $_ENV['subUrl'] . '/link/' . $token->token;
-    }
 }

+ 0 - 1
src/Controllers/User/ClientController.php

@@ -27,7 +27,6 @@ final class ClientController extends BaseController
             'Clash.Verge.exe',
             'Clash.Verge_aarch64.dmg',
             'Clash.Verge.AppImage.tar.gz',
-            'Clash-Android.apk',
             'SFA.apk',
             'SFM.zip',
         ];

+ 0 - 1
src/Controllers/UserController.php

@@ -44,7 +44,6 @@ final class UserController extends BaseController
                 ->assign('captcha', $captcha)
                 ->assign('class_expire_days', $class_expire_days)
                 ->assign('UniversalSub', SubController::getUniversalSubLink($this->user))
-                ->assign('TraditionalSub', SubController::getTraditionalSubLink($this->user))
                 ->fetch('user/index.tpl')
         );
     }

+ 0 - 3
src/Models/Node.php

@@ -18,9 +18,6 @@ use const DNS_AAAA;
  * @property int    $type                    节点显示
  * @property string $server                  节点地址
  * @property string $custom_config           自定义配置
- * todo: delete these two properties
- * @property string $info                    节点信息
- * @property string $status                  节点状态
  * @property int    $sort                    节点类型
  * @property float  $traffic_rate            流量倍率
  * @property int    $is_dynamic_rate         是否启用动态流量倍率

+ 21 - 20
src/Services/Bot/Telegram/Callback.php

@@ -731,17 +731,21 @@ final class Callback
                     'callback_data' => 'user.subscribe|json',
                 ],
                 [
-                    'text' => 'Shadowsocks SIP008',
+                    'text' => 'SIP008',
                     'callback_data' => 'user.subscribe|sip008',
                 ],
             ],
             [
+                [
+                    'text' => 'SingBox',
+                    'callback_data' => 'user.subscribe|singbox',
+                ],
                 [
                     'text' => 'Shadowsocks',
                     'callback_data' => 'user.subscribe|ss',
                 ],
                 [
-                    'text' => 'Shadowsocks SIP002',
+                    'text' => 'SIP002',
                     'callback_data' => 'user.subscribe|sip002',
                 ],
             ],
@@ -763,14 +767,10 @@ final class Callback
             ],
         ];
 
-        if (! Config::obtain('enable_traditional_sub')) {
-            unset($keyboard[1]);
-            unset($keyboard[2]);
-        }
-
         if (! Config::obtain('enable_ss_sub')) {
             unset($keyboard[0][2]);
-            unset($keyboard[1]);
+            unset($keyboard[1][1]);
+            unset($keyboard[1][2]);
         }
 
         if (! Config::obtain('enable_v2_sub')) {
@@ -815,23 +815,24 @@ final class Callback
             $sendMessage = [];
 
             $UniversalSub_Url = SubController::getUniversalSubLink($this->user);
-            $TraditionalSub_Url = SubController::getTraditionalSubLink($this->user);
 
             $text = match ($CallbackDataExplode[1]) {
-                'clash' => 'Clash 通用订阅地址:' . PHP_EOL . PHP_EOL .
-                    '<code>' . $UniversalSub_Url . '/clash</code>' . PHP_EOL . PHP_EOL,
                 'json' => 'Json 通用订阅地址:' . PHP_EOL . PHP_EOL .
                     '<code>' . $UniversalSub_Url . '/json</code>' . PHP_EOL . PHP_EOL,
-                'sip008' => 'Shadowsocks SIP008 通用订阅地址:' . PHP_EOL . PHP_EOL .
+                'clash' => 'Clash 通用订阅地址:' . PHP_EOL . PHP_EOL .
+                    '<code>' . $UniversalSub_Url . '/clash</code>' . PHP_EOL . PHP_EOL,
+                'singbox' => 'SingBox 通用订阅地址:' . PHP_EOL . PHP_EOL .
+                    '<code>' . $UniversalSub_Url . '/singbox</code>' . PHP_EOL . PHP_EOL,
+                'sip008' => 'SIP008 通用订阅地址:' . PHP_EOL . PHP_EOL .
                     '<code>' . $UniversalSub_Url . '/sip008</code>' . PHP_EOL . PHP_EOL,
-                'ss' => 'Shadowsocks 传统订阅地址:' . PHP_EOL . PHP_EOL .
-                    '<code>' . $TraditionalSub_Url . '?ss=1</code>' . PHP_EOL . PHP_EOL,
-                'sip002' => 'Shadowsocks SIP002 传统订阅地址:' . PHP_EOL . PHP_EOL .
-                    '<code>' . $TraditionalSub_Url . '?sip002=1</code>' . PHP_EOL . PHP_EOL,
-                'v2' => 'V2Ray 传统订阅地址:' . PHP_EOL . PHP_EOL .
-                    '<code>' . $TraditionalSub_Url . '?v2ray=1</code>' . PHP_EOL . PHP_EOL,
-                'trojan' => 'Trojan 传统订阅地址:' . PHP_EOL . PHP_EOL .
-                    '<code>' . $TraditionalSub_Url . '?trojan=1</code>' . PHP_EOL . PHP_EOL,
+                'ss' => 'Shadowsocks 客户端订阅地址:' . PHP_EOL . PHP_EOL .
+                    '<code>' . $UniversalSub_Url . '/ss</code>' . PHP_EOL . PHP_EOL,
+                'sip002' => 'SIP002 客户端订阅地址:' . PHP_EOL . PHP_EOL .
+                    '<code>' . $UniversalSub_Url . '/sip002</code>' . PHP_EOL . PHP_EOL,
+                'v2' => 'V2Ray 客户端订阅地址:' . PHP_EOL . PHP_EOL .
+                    '<code>' . $UniversalSub_Url . '/v2ray</code>' . PHP_EOL . PHP_EOL,
+                'trojan' => 'Trojan 客户端订阅地址:' . PHP_EOL . PHP_EOL .
+                    '<code>' . $UniversalSub_Url . '/trojan</code>' . PHP_EOL . PHP_EOL,
                 default => '未知参数' . PHP_EOL . PHP_EOL,
             };