From 045a849be801d7690926a5d7c6e8746aa5adbd42 Mon Sep 17 00:00:00 2001 From: mercury Date: Tue, 9 Apr 2024 01:16:22 +0400 Subject: [PATCH] fix empty pac + singbox:// --- app/bot.php | 27 ++++++++++++++++++++++----- app/index.php | 13 ++++++++++++- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/app/bot.php b/app/bot.php index d05a563..3b2d93b 100644 --- a/app/bot.php +++ b/app/bot.php @@ -3505,7 +3505,7 @@ DNS-over-HTTPS with IP: ); } - public function userXr($i) + public function userXr($i, $fs = 0) { $c = $this->getXray(); $domain = $this->getPacConf()['domain'] ?: $this->ip; @@ -3514,13 +3514,21 @@ DNS-over-HTTPS with IP: $v2ray = "$scheme://{$domain}/pac?h=$hash&t=s&s={$c['inbounds'][0]['settings']['clients'][$i]['id']}"; $sing = "$scheme://{$domain}/pac?h=$hash&t=si&s={$c['inbounds'][0]['settings']['clients'][$i]['id']}"; $fullsing = 'sing-box://import-remote-profile/?url=' . urlencode("$scheme://{$domain}/pac?h=$hash&t=si&s={$c['inbounds'][0]['settings']['clients'][$i]['id']}") . "#vpnbot$i"; - + if (!empty($fs)) { + return $fullsing; + } $text[] = "Menu -> " . $this->i18n('xray') . " -> {$c['inbounds'][0]['settings']['clients'][$i]['email']}\n"; $text[] = "{$this->linkXray($i)}\n"; $text[] = "v2ray subscription: $v2ray"; $text[] = "sing-box subscription: $sing"; + $data[] = [ + [ + 'text' => 'sing-box subscription', + 'web_app' => ['url' => "$scheme://{$domain}/pac?h=$hash&b=1&t=si&s={$c['inbounds'][0]['settings']['clients'][$i]['id']}"], + ], + ]; $data[] = [ [ 'text' => $this->i18n('show QR'), @@ -3681,10 +3689,13 @@ DNS-over-HTTPS with IP: ] ] ]; + if (empty($c['routing']['rules'][0]['domain'])) { + unset($c['routing']['rules'][0]); + } echo json_encode($c); } - public function singboxSubscription($key) + public function singboxSubscription($key, $fs = 0) { $pac = $this->getPacConf(); $domain = $pac['domain'] ?: $this->ip; @@ -3693,12 +3704,15 @@ DNS-over-HTTPS with IP: $flag = true; foreach ($xr['inbounds'][0]['settings']['clients'] as $k => $v) { if ($v['id'] == $key) { + if (!empty($fs)) { + return $this->userXr($k, 1); + } $flag = false; break; } } if ($flag) { - return; + return false; } $c = [ @@ -3820,7 +3834,10 @@ DNS-over-HTTPS with IP: ] ] ]; - echo json_encode($c); + if (empty($c['route']['rules'][1]['domain'])) { + unset($c['route']['rules'][1]); + } + return json_encode($c); } public function getXray() diff --git a/app/index.php b/app/index.php index a6ff686..b44c2c9 100644 --- a/app/index.php +++ b/app/index.php @@ -41,7 +41,18 @@ if ($hash == substr(md5($c['key']), 0, 8)) { require __DIR__ . '/bot.php'; require __DIR__ . '/i18n.php'; $bot = new Bot($c['key'], $i); - $bot->singboxSubscription($_GET['s']); + if (!empty($_GET['b'])) { + $fs = $bot->singboxSubscription($_GET['s'], 1); + $r = << + sing-box + + HTML; + } else { + header('Content-Type: application/json'); + $r = $bot->singboxSubscription($_GET['s']); + } + echo $r; exit; default: