update 2024-12-07 09:40:48

This commit is contained in:
kenzok8 2024-12-07 09:40:48 +08:00
parent 159f9fd028
commit 84cdbd4e34
24 changed files with 405 additions and 249 deletions

View File

@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk
PKG_MAINTAINER:=Thaolga <https://github.com/Thaolga/luci-app-nekobox>
PKG_NAME:=luci-app-nekobox
PKG_VERSION:=1.5.7
PKG_VERSION:=1.5.8
PKG_RELEASE:=cn
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)

View File

@ -1,5 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="186" height="20" role="img" aria-label="Current Version: v1.5.7">
<title>Current Version: v1.5.7</title>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="186" height="20" role="img" aria-label="Current Version: v1.5.8">
<title>Current Version: v1.5.8</title>
<linearGradient id="s" x2="0" y2="100%">
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
<stop offset="1" stop-opacity=".1"/>
@ -15,7 +15,7 @@
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110">
<text aria-hidden="true" x="495" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="700" style="letter-spacing: -5;">Current Version</text>
<text x="495" y="140" transform="scale(.1)" fill="#fff" textLength="700" style="letter-spacing: -5;">Current Version</text>
<text aria-hidden="true" x="1405" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="600" style="letter-spacing: -3;">v1.5.7</text>
<text x="1405" y="140" transform="scale(.1)" fill="#fff" textLength="600" style="letter-spacing: -3;">v1.5.7</text>
<text aria-hidden="true" x="1405" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="600" style="letter-spacing: -3;">v1.5.8</text>
<text x="1405" y="140" transform="scale(.1)" fill="#fff" textLength="600" style="letter-spacing: -3;">v1.5.8</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -315,13 +315,20 @@ EOL;
$completeSubscribeUrl = "https://sing-box-subscribe-doraemon.vercel.app/config/{$subscribeUrlEncoded}&file={$templateUrlEncoded}";
$tempFilePath = '/tmp/' . $customFileName;
$logMessages = [];
$command = "wget -O " . escapeshellarg($tempFilePath) . " " . escapeshellarg($completeSubscribeUrl);
exec($command, $output, $returnVar);
$logMessages = [];
if ($returnVar !== 0) {
$command = "curl -s -L -o " . escapeshellarg($tempFilePath) . " " . escapeshellarg($completeSubscribeUrl);
exec($command, $output, $returnVar);
if ($returnVar !== 0) {
$logMessages[] = "无法下载内容: " . htmlspecialchars($completeSubscribeUrl);
} else {
}
}
if ($returnVar === 0) {
$downloadedContent = file_get_contents($tempFilePath);
if ($downloadedContent === false) {
$logMessages[] = "无法读取下载的文件内容";

View File

@ -32,19 +32,39 @@ function getSingboxVersion() {
foreach ($output as $line) {
if (strpos($line, 'version') !== false) {
$parts = explode(' ', $line);
return end($parts);
$version = end($parts);
if (strpos($version, 'alpha') !== false || strpos($version, 'beta') !== false) {
if (strpos($version, '1.10.0-alpha.29-067c81a7') !== false) {
return ['version' => $version, 'type' => 'Puernya 预览版'];
}
return ['version' => $version, 'type' => 'Singbox 预览版'];
} else {
return ['version' => $version, 'type' => 'Singbox 正式版'];
}
}
}
}
return '未安装';
return ['version' => '未安装', 'type' => '未知'];
}
$singBoxVersion = getSingboxVersion();
function getMihomoVersion() {
$versionFile = '/etc/neko/core/mihomo_version.txt';
?>
if (file_exists($versionFile)) {
$content = trim(file_get_contents($versionFile));
if (strpos($content, 'alpha') !== false) {
return ['version' => $content, 'type' => '预览版'];
}
return ['version' => $content, 'type' => '正式版'];
} else {
return ['version' => '未安装', 'type' => '未知'];
}
}
<?php
function getUiVersion() {
$versionFile = '/etc/neko/ui/zashboard/version.txt';
@ -75,9 +95,27 @@ function getMetaVersion() {
}
}
function getRazordVersion() {
$versionFile = '/etc/neko/ui/dashboard/version.txt';
if (file_exists($versionFile)) {
return trim(file_get_contents($versionFile));
} else {
return "未安装";
}
}
$singBoxVersionInfo = getSingboxVersion();
$singBoxVersion = $singBoxVersionInfo['version'];
$singBoxType = $singBoxVersionInfo['type'];
$puernyaVersion = ($singBoxType === 'Puernya 预览版') ? $singBoxVersion : '未安装';
$singboxPreviewVersion = ($singBoxType === 'Singbox 预览版') ? $singBoxVersion : '未安装';
$mihomoVersionInfo = getMihomoVersion();
$mihomoVersion = $mihomoVersionInfo['version'];
$mihomoType = $mihomoVersionInfo['type'];
$uiVersion = getUiVersion();
$metaCubexdVersion = getMetaCubexdVersion();
$metaVersion = getMetaVersion();
$razordVersion = getRazordVersion();
?>
@ -104,7 +142,7 @@ $metaVersion = getMetaVersion();
<a href="./" class="col btn btn-lg">🏠 首页</a>
<a href="./dashboard.php" class="col btn btn-lg">📊 面板</a>
<a href="./configs.php" class="col btn btn-lg">⚙️ 配置</a>
<a href="/nekobox/mon.php" class="col btn btn-lg"></i>📦 订阅</a>
<a href="./mon.php" class="col btn btn-lg"></i>📦 订阅</a>
<a href="#" class="col btn btn-lg">🛠️ 设定</a>
<div class="container px-4">
<h2 class="text-center p-2 mb-3">主题设定</h2>
@ -281,10 +319,6 @@ $metaVersion = getMetaVersion();
</div>
<div class="modal-body">
<select id="singboxVersionSelect" class="form-select">
<option value="v1.11.0-alpha.6">v1.11.0-alpha.6</option>
<option value="v1.11.0-alpha.7">v1.11.0-alpha.7</option>
<option value="v1.11.0-alpha.8">v1.11.0-alpha.8</option>
<option value="v1.11.0-alpha.9">v1.11.0-alpha.9</option>
<option value="v1.11.0-alpha.10">v1.11.0-alpha.10</option>
<option value="v1.11.0-alpha.15">v1.11.0-alpha.15</option>
<option value="v1.11.0-alpha.20">v1.11.0-alpha.20</option>
@ -337,6 +371,7 @@ $metaVersion = getMetaVersion();
<option value="zashboard">Zashboard 面板</option>
<option value="metacubexd">Metacubexd 面板</option>
<option value="yacd-meat">Yacd-Meat 面板</option>
<option value="dashboard">Dashboard 面板</option>
</select>
</div>
</div>
@ -432,7 +467,7 @@ $metaVersion = getMetaVersion();
</style>
<script>
let selectedSingboxVersion = 'v1.11.0-alpha.6';
let selectedSingboxVersion = 'v1.11.0-alpha.10';
let selectedMihomoVersion = 'stable';
let selectedLanguage = 'cn';
let selectedSingboxVersionForChannelTwo = 'preview';
@ -545,21 +580,27 @@ function selectOperation(type) {
? 'update_meta.php'
: selectedPanel === 'metacubexd'
? 'update_metacubexd.php'
: 'unknown_panel.php',
: selectedPanel === 'dashboard'
? 'update_dashboard.php'
: 'unknown_panel.php',
message: selectedPanel === 'zashboard'
? '开始下载 Zashboard 面板更新...'
: selectedPanel === 'yacd-meat'
? '开始下载 Yacd-Meat 面板更新...'
: selectedPanel === 'metacubexd'
? '开始下载 Metacubexd 面板更新...'
: '未知面板更新类型...',
: selectedPanel === 'dashboard'
? '开始下载 Dashboard 面板更新...'
: '未知面板更新类型...',
description: selectedPanel === 'zashboard'
? '正在更新 Zashboard 面板到最新版本'
: selectedPanel === 'yacd-meat'
? '正在更新 Yacd-Meat 面板到最新版本'
: selectedPanel === 'metacubexd'
? '正在更新 Metacubexd 面板到最新版本'
: '无法识别的面板类型,无法更新。'
: selectedPanel === 'dashboard'
? '正在更新 Dashboard 面板到最新版本'
: '无法识别的面板类型,无法更新。'
}
};
const operation = operations[type];
@ -689,9 +730,14 @@ function checkVersion(outputId, updateFiles, currentVersions) {
}
document.getElementById('checkSingboxButton').addEventListener('click', function () {
const singBoxVersion = "<?php echo htmlspecialchars($singBoxVersion); ?>";
const singBoxType = "<?php echo htmlspecialchars($singBoxType); ?>";
const puernyaVersion = "<?php echo htmlspecialchars($puernyaVersion); ?>";
const singboxPreviewVersion = "<?php echo htmlspecialchars($singboxPreviewVersion); ?>";
const currentVersions = {
'Singbox 正式版': '<?php echo htmlspecialchars($singBoxVersion); ?>',
'Singbox 预览版': '<?php echo htmlspecialchars($singBoxVersion); ?>',
'Singbox 正式版': singBoxType === 'Singbox 正式版' ? singBoxVersion : '未安装',
'Singbox 预览版': singboxPreviewVersion,
'Puernya 预览版': puernyaVersion
};
const updateFiles = [
{ name: 'Singbox 正式版', url: 'update_singbox_stable.php' },
@ -702,14 +748,19 @@ document.getElementById('checkSingboxButton').addEventListener('click', function
});
document.getElementById('checkMihomoButton').addEventListener('click', function () {
const mihomoVersion = "<?php echo htmlspecialchars($mihomoVersion); ?>";
const mihomoType = "<?php echo htmlspecialchars($mihomoType); ?>";
const currentVersions = {
'Mihomo 正式版': document.getElementById('corever').textContent,
'Mihomo 预览版': document.getElementById('corever').textContent,
'Mihomo 正式版': mihomoType === '正式版' ? mihomoVersion : '未安装',
'Mihomo 预览版': mihomoType === '预览版' ? mihomoVersion : '未安装',
};
const updateFiles = [
{ name: 'Mihomo 正式版', url: 'update_mihomo_stable.php' },
{ name: 'Mihomo 预览版', url: 'update_mihomo_preview.php' }
];
checkVersion('NewMihomo', updateFiles, currentVersions);
});
@ -718,11 +769,13 @@ document.getElementById('checkUiButton').addEventListener('click', function () {
'MetaCube': '<?php echo htmlspecialchars($metaCubexdVersion); ?>',
'Zashboard': '<?php echo htmlspecialchars($uiVersion); ?>',
'Yacd-Meat': '<?php echo htmlspecialchars($metaVersion); ?>',
'Dashboard': '<?php echo htmlspecialchars($razordVersion); ?>',
};
const updateFiles = [
{ name: 'MetaCube', url: 'update_metacubexd.php' },
{ name: 'Zashboard', url: 'update_zashboard.php' },
{ name: 'Yacd-Meat', url: 'update_meta.php' }
{ name: 'Yacd-Meat', url: 'update_meta.php' },
{ name: 'Dashboard', url: 'update_dashboard.php' }
];
checkVersion('NewUi', updateFiles, currentVersions);
});
@ -734,6 +787,7 @@ document.getElementById('checkCliverButton').addEventListener('click', function
const updateFiles = [{ name: '客户端', url: 'update_script.php' }];
checkVersion('NewCliver', updateFiles, currentVersions);
});
</script>
<script>

View File

@ -0,0 +1,66 @@
<?php
ini_set('memory_limit', '128M');
$fixed_version = "v0.3.0";
function getUiVersion() {
$versionFile = '/etc/neko/ui/dashboard/version.txt';
if (file_exists($versionFile)) {
return trim(file_get_contents($versionFile));
} else {
return null;
}
}
function writeVersionToFile($version) {
$versionFile = '/etc/neko/ui/dashboard/version.txt';
file_put_contents($versionFile, $version);
}
$download_url = "https://github.com/Thaolga/neko/releases/download/$fixed_version/dashboard.tar";
$install_path = '/etc/neko/ui/dashboard';
$temp_file = '/tmp/dashboard-dist.tar';
if (!is_dir($install_path)) {
mkdir($install_path, 0755, true);
}
$current_version = getUiVersion();
if (isset($_GET['check_version'])) {
echo "最新版本: $fixed_version\n";
exit;
}
exec("wget -O '$temp_file' '$download_url'", $output, $return_var);
if ($return_var !== 0) {
die("下载失败!");
}
if (!file_exists($temp_file)) {
die("下载的文件不存在!");
}
echo "开始解压文件...\n";
exec("tar -xf '$temp_file' -C '$install_path' --overwrite", $output, $return_var);
if ($return_var !== 0) {
echo "解压失败,错误信息: " . implode("\n", $output);
die("解压失败!");
}
echo "解压成功!\n";
exec("chown -R root:root '$install_path' 2>&1", $output, $return_var);
if ($return_var !== 0) {
echo "更改文件拥有者失败,错误信息: " . implode("\n", $output) . "\n";
die();
}
echo "文件拥有者已更改为 root。\n";
writeVersionToFile($fixed_version);
echo "更新完成!当前版本: $fixed_version\n";
unlink($temp_file);
?>

View File

@ -21,11 +21,23 @@ $repo_owner = "MetaCubeX";
$repo_name = "metacubexd";
$api_url = "https://api.github.com/repos/$repo_owner/$repo_name/releases/latest";
$curl_command = "curl -s -H 'User-Agent: PHP' --connect-timeout 10 " . escapeshellarg($api_url);
$response = shell_exec($curl_command);
function getApiResponseWithCurl($api_url) {
$response = shell_exec("curl -s -H 'User-Agent: PHP' --connect-timeout 10 " . escapeshellarg($api_url));
return $response;
}
function getApiResponseWithWget($api_url) {
$response = shell_exec("wget -qO- '$api_url'");
return $response;
}
$response = getApiResponseWithCurl($api_url);
if ($response === false || empty($response)) {
die("GitHub API 请求失败。请检查网络连接或稍后重试。");
$response = getApiResponseWithWget($api_url);
if ($response === false || empty($response)) {
die("GitHub API 请求失败。请检查网络连接或稍后重试。");
}
}
$data = json_decode($response, true);
@ -55,11 +67,32 @@ if (empty($download_url)) {
die("未找到下载链接,请检查发布版本的资源。");
}
exec("wget -O '$temp_file' '$download_url'", $output, $return_var);
if ($return_var !== 0) {
die("下载失败!");
echo "开始下载文件...\n";
$download_success = false;
if (shell_exec("which wget")) {
exec("wget -O '$temp_file' '$download_url'", $output, $return_var);
if ($return_var === 0) {
$download_success = true;
}
}
if (!$download_success && shell_exec("which curl")) {
exec("curl -s -L -o '$temp_file' '$download_url'", $output, $return_var);
if ($return_var === 0) {
$download_success = true;
}
}
if (!$download_success) {
die("下载失败!请检查网络连接或稍后重试。");
}
if (!file_exists($temp_file)) {
die("下载的文件不存在!");
}
echo "开始解压文件...\n";
exec("tar -xzf '$temp_file' -C '$install_path'", $output, $return_var);
if ($return_var !== 0) {
echo "解压失败,错误信息: " . implode("\n", $output);

View File

@ -24,7 +24,17 @@ $curl_command = "curl -s -H 'User-Agent: PHP' " . escapeshellarg($api_url);
$response = shell_exec($curl_command);
if ($response === false || empty($response)) {
die("GitHub API 请求失败。请检查网络连接或稍后重试。");
logMessage("curl 请求失败,尝试使用 wget...");
$wget_command = "wget -q --no-check-certificate --timeout=10 " . escapeshellarg($api_url) . " -O /tmp/api_response.json";
exec($wget_command, $output, $return_var);
if ($return_var !== 0 || !file_exists('/tmp/api_response.json')) {
logMessage("GitHub API 请求失败curl 和 wget 都失败了。");
die("GitHub API 请求失败。请检查网络连接或稍后重试。");
}
$response = file_get_contents('/tmp/api_response.json');
unlink('/tmp/api_response.json');
}
$data = json_decode($response, true);
@ -45,21 +55,17 @@ if ($latest_prerelease === null) {
die("没有找到最新的预览版!");
}
$latest_version = $latest_prerelease['tag_name'] ?? '';
$latest_version = $latest_prerelease['tag_name'] ?? '';
$assets = $latest_prerelease['assets'] ?? [];
if (empty($latest_version)) {
echo "未找到最新版本信息。";
exit;
die("未找到最新版本信息。");
}
echo "最新版本: " . htmlspecialchars($latest_version) . "\n";
$current_arch = trim(shell_exec("uname -m"));
$base_version = ltrim($latest_version, 'v');
$download_url = '';
$asset_found = false;
$current_arch = trim(shell_exec("uname -m"));
foreach ($assets as $asset) {
if ($current_arch === 'x86_64' && strpos($asset['name'], 'linux-amd64-alpha') !== false && strpos($asset['name'], '.gz') !== false) {
@ -83,38 +89,57 @@ if (!$asset_found) {
die("未找到适合架构的预览版下载链接!");
}
echo "下载链接: $download_url\n";
$filename = basename($download_url);
preg_match('/alpha-[\w-]+/', $filename, $matches);
$version_from_filename = $matches[0] ?? '未知版本';
$latest_version = $version_from_filename;
echo "最新版本: " . htmlspecialchars($latest_version) . "\n";
$temp_file = '/tmp/mihomo_prerelease.gz';
exec("wget -O '$temp_file' '$download_url'", $output, $return_var);
$curl_command = "curl -sL " . escapeshellarg($download_url) . " -o " . escapeshellarg($temp_file);
exec($curl_command, $output, $return_var);
if ($return_var !== 0 || !file_exists($temp_file)) {
logMessage("下载失败,尝试使用 wget...");
$wget_command = "wget -q --show-progress --no-check-certificate " . escapeshellarg($download_url) . " -O " . escapeshellarg($temp_file);
exec($wget_command, $output, $return_var);
if ($return_var !== 0 || !file_exists($temp_file)) {
logMessage("下载失败curl 和 wget 都失败了。");
die("下载失败!");
}
}
exec("gzip -d -c '$temp_file' > '/tmp/mihomo-linux-$current_arch'", $output, $return_var);
if ($return_var === 0) {
exec("gzip -d -c '$temp_file' > '/tmp/mihomo-linux-$current_arch'", $output, $return_var);
$install_path = '/usr/bin/mihomo';
exec("mv '/tmp/mihomo-linux-$current_arch' '$install_path'", $output, $return_var);
if ($return_var === 0) {
$install_path = '/usr/bin/mihomo';
exec("mv '/tmp/mihomo-linux-$current_arch' '$install_path'", $output, $return_var);
exec("chmod 0755 '$install_path'", $output, $return_var);
if ($return_var === 0) {
exec("chmod 0755 '$install_path'", $output, $return_var);
if ($return_var === 0) {
echo "更新完成!当前版本: $latest_version";
writeVersionToFile($latest_version);
} else {
echo "设置权限失败!";
}
logMessage("更新完成!当前版本: $latest_version");
echo "更新完成!当前版本: $latest_version";
writeVersionToFile($latest_version);
} else {
echo "移动文件失败!";
logMessage("设置权限失败!");
echo "设置权限失败!";
}
} else {
echo "解压失败!";
logMessage("移动文件失败!");
echo "移动文件失败!";
}
} else {
echo "下载失败!";
logMessage("解压失败!");
echo "解压失败!";
}
if (file_exists($temp_file)) {
unlink($temp_file);
}
?>

View File

@ -22,8 +22,18 @@ if (isset($_GET['check_version'])) {
$response = shell_exec($curl_command);
if ($response === false || empty($response)) {
echo "GitHub API 请求失败。";
exit;
logMessage("GitHub API 请求失败,尝试使用 wget...");
$wget_command = "wget -q --no-check-certificate --timeout=10 " . escapeshellarg($api_url) . " -O /tmp/api_response.json";
exec($wget_command, $output, $return_var);
if ($return_var !== 0 || !file_exists('/tmp/api_response.json')) {
logMessage("GitHub API 请求失败curl 和 wget 都失败了。");
echo "GitHub API 请求失败。";
exit;
}
$response = file_get_contents('/tmp/api_response.json');
unlink('/tmp/api_response.json');
}
$data = json_decode($response, true);
@ -48,7 +58,17 @@ $curl_command = "curl -s -H 'User-Agent: PHP' " . escapeshellarg($api_url);
$response = shell_exec($curl_command);
if ($response === false || empty($response)) {
die("GitHub API 请求失败。请检查网络连接或稍后重试。");
logMessage("GitHub API 请求失败,尝试使用 wget...");
$wget_command = "wget -q --no-check-certificate --timeout=10 " . escapeshellarg($api_url) . " -O /tmp/api_response.json";
exec($wget_command, $output, $return_var);
if ($return_var !== 0 || !file_exists('/tmp/api_response.json')) {
logMessage("GitHub API 请求失败curl 和 wget 都失败了。");
die("GitHub API 请求失败。请检查网络连接或稍后重试。");
}
$response = file_get_contents('/tmp/api_response.json');
unlink('/tmp/api_response.json');
}
$data = json_decode($response, true);
@ -82,8 +102,7 @@ switch ($current_arch) {
$download_url = "https://github.com/MetaCubeX/mihomo/releases/download/$latest_version/mihomo-linux-amd64-v$base_version.gz";
break;
default:
echo "未找到适合架构的下载链接: $current_arch";
exit;
die("未找到适合架构的下载链接: $current_arch");
}
if (trim($current_version) === trim($latest_version)) {
@ -91,31 +110,43 @@ if (trim($current_version) === trim($latest_version)) {
exit;
}
exec("wget -O '$temp_file' '$download_url'", $output, $return_var);
$curl_command = "curl -sL " . escapeshellarg($download_url) . " -o " . escapeshellarg($temp_file);
exec($curl_command, $output, $return_var);
if ($return_var !== 0 || !file_exists($temp_file)) {
logMessage("下载失败,尝试使用 wget...");
$wget_command = "wget -q --show-progress --no-check-certificate " . escapeshellarg($download_url) . " -O " . escapeshellarg($temp_file);
exec($wget_command, $output, $return_var);
if ($return_var !== 0 || !file_exists($temp_file)) {
logMessage("下载失败curl 和 wget 都失败了。");
die("下载失败!");
}
}
exec("gzip -d -c '$temp_file' > '/tmp/mihomo-linux-arm64'", $output, $return_var);
if ($return_var === 0) {
exec("gzip -d -c '$temp_file' > '/tmp/mihomo-linux-arm64'", $output, $return_var);
exec("mv '/tmp/mihomo-linux-arm64' '$install_path'", $output, $return_var);
if ($return_var === 0) {
exec("mv '/tmp/mihomo-linux-arm64' '$install_path'", $output, $return_var);
exec("chmod 0755 '$install_path'", $output, $return_var);
if ($return_var === 0) {
exec("chmod 0755 '$install_path'", $output, $return_var);
if ($return_var === 0) {
writeVersionToFile($latest_version);
echo "更新完成!当前版本: $latest_version";
} else {
echo "设置权限失败!";
}
writeVersionToFile($latest_version);
logMessage("更新完成!当前版本: $latest_version");
echo "更新完成!当前版本: $latest_version";
} else {
echo "移动文件失败!";
logMessage("设置权限失败!");
echo "设置权限失败!";
}
} else {
echo "解压失败!";
logMessage("移动文件失败!");
echo "移动文件失败!";
}
} else {
echo "下载失败!";
logMessage("解压失败!");
echo "解压失败!";
}
if (file_exists($temp_file)) {

View File

@ -9,8 +9,16 @@ $local_api_response = "/tmp/api_response.json";
$curl_command = "curl -H 'User-Agent: PHP' -s " . escapeshellarg($api_url) . " -o " . escapeshellarg($local_api_response);
exec($curl_command . " 2>&1", $output, $return_var);
if (!file_exists($local_api_response)) {
die("无法访问GitHub API。请检查URL或网络连接。输出: " . implode("\n", $output));
if ($return_var !== 0 || !file_exists($local_api_response)) {
echo "<script>appendLog('curl 获取版本信息失败,尝试使用 wget...');</script>";
$wget_command = "wget -q --no-check-certificate " . escapeshellarg($api_url) . " -O " . escapeshellarg($local_api_response);
exec($wget_command . " 2>&1", $output, $return_var);
if ($return_var !== 0 || !file_exists($local_api_response)) {
die("无法访问GitHub API。请检查URL或网络连接。输出: " . implode("\n", $output));
}
echo "<script>appendLog('wget 获取版本信息完成。');</script>";
}
$response = file_get_contents($local_api_response);
@ -49,15 +57,24 @@ echo "<script>
echo "<script>appendLog('开始下载更新...');</script>";
$local_file = "/tmp/{$package_name}_{$new_version}-{$installed_lang}_all.ipk";
$curl_command = "curl -sL " . escapeshellarg($download_url) . " -o " . escapeshellarg($local_file);
exec($curl_command . " 2>&1", $output, $return_var);
if ($return_var !== 0 || !file_exists($local_file)) {
echo "<pre>下载失败。命令输出: " . implode("\n", $output) . "</pre>";
die("下载失败。未找到下载的文件。");
}
echo "<script>appendLog('curl 下载失败,尝试使用 wget...');</script>";
$wget_command = "wget -q --show-progress --no-check-certificate " . escapeshellarg($download_url) . " -O " . escapeshellarg($local_file);
exec($wget_command . " 2>&1", $output, $return_var);
echo "<script>appendLog('下载完成。');</script>";
if ($return_var !== 0 || !file_exists($local_file)) {
echo "<pre>下载失败。命令输出: " . implode("\n", $output) . "</pre>";
die("下载失败。未找到下载的文件。");
}
echo "<script>appendLog('wget 下载完成。');</script>";
} else {
echo "<script>appendLog('curl 下载完成。');</script>";
}
echo "<script>appendLog('更新软件包列表...');</script>";
$output = shell_exec("opkg update");

View File

@ -4,7 +4,7 @@ $repo_owner = "Thaolga";
$repo_name = "luci-app-nekoclash";
$package_name = "sing-box";
$new_version = isset($_GET['version']) ? $_GET['version'] : "v1.11.0-alpha.6";
$new_version = isset($_GET['version']) ? $_GET['version'] : "v1.11.0-alpha.10";
$new_version_cleaned = str_replace('v', '', $new_version);

View File

@ -15,12 +15,22 @@ function writeVersionToFile($version) {
$repo_owner = "SagerNet";
$repo_name = "sing-box";
$api_url = "https://api.github.com/repos/$repo_owner/$repo_name/releases";
$curl_command = "curl -s -H 'User-Agent: PHP' --connect-timeout 10 " . escapeshellarg($api_url);
$response = shell_exec($curl_command);
if ($response === false || empty($response)) {
logMessage("GitHub API request failed, possibly due to network issues or GitHub API restrictions.");
die("GitHub API request failed. Please check your network connection or try again later.");
logMessage("GitHub API request using curl failed, trying wget...");
$wget_command = "wget -q --no-check-certificate --timeout=10 " . escapeshellarg($api_url) . " -O /tmp/api_response.json";
exec($wget_command, $output, $return_var);
if ($return_var !== 0 || !file_exists('/tmp/api_response.json')) {
logMessage("GitHub API request using wget failed.");
die("GitHub API request failed. Please check your network connection or try again later.");
}
$response = file_get_contents('/tmp/api_response.json');
unlink('/tmp/api_response.json');
}
logMessage("GitHub API response: " . substr($response, 0, 200) . "...");
@ -83,9 +93,18 @@ if (trim($current_version) === trim($latest_version)) {
die("Current version is already the latest.");
}
exec("wget -O '$temp_file' '$download_url'", $output, $return_var);
if ($return_var !== 0) {
die("Download failed!");
$curl_command = "curl -sL " . escapeshellarg($download_url) . " -o " . escapeshellarg($temp_file);
exec($curl_command, $output, $return_var);
if ($return_var !== 0 || !file_exists($temp_file)) {
logMessage("Download failed using curl, trying wget...");
$wget_command = "wget -q --show-progress --no-check-certificate " . escapeshellarg($download_url) . " -O " . escapeshellarg($temp_file);
exec($wget_command, $output, $return_var);
if ($return_var !== 0 || !file_exists($temp_file)) {
logMessage("Download failed using wget.");
die("Download failed!");
}
}
if (!is_dir($temp_dir)) {
@ -94,6 +113,7 @@ if (!is_dir($temp_dir)) {
exec("tar -xzf '$temp_file' -C '$temp_dir'", $output, $return_var);
if ($return_var !== 0) {
logMessage("Extraction failed.");
die("Extraction failed!");
}
@ -102,8 +122,10 @@ if ($extracted_file && file_exists($extracted_file)) {
exec("cp -f '$extracted_file' '$install_path'");
exec("chmod 0755 '$install_path'");
writeVersionToFile($latest_version);
logMessage("Update completed! Current version: $latest_version");
echo "更新完成! 当前版本: $latest_version";
} else {
logMessage("Extracted file 'sing-box' does not exist.");
die("Extracted file 'sing-box' does not exist.");
}

View File

@ -15,12 +15,22 @@ function writeVersionToFile($version) {
$repo_owner = "SagerNet";
$repo_name = "sing-box";
$api_url = "https://api.github.com/repos/$repo_owner/$repo_name/releases";
$curl_command = "curl -s -H 'User-Agent: PHP' --connect-timeout 10 " . escapeshellarg($api_url);
$response = shell_exec($curl_command);
if ($response === false || empty($response)) {
logMessage("GitHub API request failed, possibly due to network issues or GitHub API restrictions.");
die("GitHub API request failed. Please check your network connection or try again later.");
logMessage("GitHub API request using curl failed, trying wget...");
$wget_command = "wget -q --no-check-certificate --timeout=10 " . escapeshellarg($api_url) . " -O /tmp/api_response.json";
exec($wget_command, $output, $return_var);
if ($return_var !== 0 || !file_exists('/tmp/api_response.json')) {
logMessage("GitHub API request using wget failed.");
die("GitHub API request failed. Please check your network connection or try again later.");
}
$response = file_get_contents('/tmp/api_response.json');
unlink('/tmp/api_response.json');
}
logMessage("GitHub API response: " . substr($response, 0, 200) . "...");
@ -32,7 +42,6 @@ if (json_last_error() !== JSON_ERROR_NONE) {
}
$latest_version = '';
if (is_array($data)) {
foreach ($data as $release) {
if (isset($release['tag_name']) && isset($release['prerelease']) && !$release['prerelease']) {
@ -84,9 +93,18 @@ if (trim($current_version) === trim($latest_version)) {
die("Current version is already the latest.");
}
exec("wget -O '$temp_file' '$download_url'", $output, $return_var);
if ($return_var !== 0) {
die("Download failed!");
$curl_command = "curl -sL " . escapeshellarg($download_url) . " -o " . escapeshellarg($temp_file);
exec($curl_command, $output, $return_var);
if ($return_var !== 0 || !file_exists($temp_file)) {
logMessage("Download failed using curl, trying wget...");
$wget_command = "wget -q --show-progress --no-check-certificate " . escapeshellarg($download_url) . " -O " . escapeshellarg($temp_file);
exec($wget_command, $output, $return_var);
if ($return_var !== 0 || !file_exists($temp_file)) {
logMessage("Download failed using wget.");
die("Download failed!");
}
}
if (!is_dir($temp_dir)) {
@ -95,6 +113,7 @@ if (!is_dir($temp_dir)) {
exec("tar -xzf '$temp_file' -C '$temp_dir'", $output, $return_var);
if ($return_var !== 0) {
logMessage("Extraction failed.");
die("Extraction failed!");
}
@ -103,8 +122,10 @@ if ($extracted_file && file_exists($extracted_file)) {
exec("cp -f '$extracted_file' '$install_path'");
exec("chmod 0755 '$install_path'");
writeVersionToFile($latest_version);
logMessage("Update completed! Current version: $latest_version");
echo "更新完成! 当前版本: $latest_version";
} else {
logMessage("Extracted file 'sing-box' does not exist.");
die("Extracted file 'sing-box' does not exist.");
}

View File

@ -20,10 +20,24 @@ function writeVersionToFile($version) {
$repo_owner = "Thaolga";
$repo_name = "neko";
$api_url = "https://api.github.com/repos/$repo_owner/$repo_name/releases/latest";
$response = shell_exec("curl -s -H 'User-Agent: PHP' --connect-timeout 10 " . escapeshellarg($api_url));
function getApiResponseWithCurl($api_url) {
$response = shell_exec("curl -s -H 'User-Agent: PHP' --connect-timeout 10 " . escapeshellarg($api_url));
return $response;
}
function getApiResponseWithWget($api_url) {
$response = shell_exec("wget -qO- '$api_url'");
return $response;
}
$response = getApiResponseWithCurl($api_url);
if ($response === false || empty($response)) {
die("GitHub API 请求失败。请检查网络连接或稍后重试。");
$response = getApiResponseWithWget($api_url);
if ($response === false || empty($response)) {
die("GitHub API 请求失败。请检查网络连接或稍后重试。");
}
}
$data = json_decode($response, true);
@ -62,9 +76,25 @@ if (isset($_GET['check_version'])) {
exit;
}
exec("wget -O '$temp_file' '$download_url'", $output, $return_var);
if ($return_var !== 0) {
die("下载失败!");
echo "开始下载文件...\n";
$download_success = false;
if (shell_exec("which wget")) {
exec("wget -O '$temp_file' '$download_url'", $output, $return_var);
if ($return_var === 0) {
$download_success = true;
}
}
if (!$download_success && shell_exec("which curl")) {
exec("curl -s -L -o '$temp_file' '$download_url'", $output, $return_var);
if ($return_var === 0) {
$download_success = true;
}
}
if (!$download_success) {
die("下载失败!请检查网络连接或稍后重试。");
}
if (!file_exists($temp_file)) {

View File

@ -1 +0,0 @@
clash.metacubex.one

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

File diff suppressed because one or more lines are too long

View File

@ -1,41 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<link rel="Bookmark" href="./assets/Icon.3ddc065b.png">
<link rel="shortcut icon" href="./assets/Icon.3ddc065b.png"/>
<link rel="apple-touch-icon" href="./assets/Icon.3ddc065b.png"/>
<link rel="icon" href="./assets/Icon.48ce63a7.ico"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="application-name" content="Clash" />
<meta name="theme-color" content="#f4f5f6"/>
<meta name="description" content="Clash web port"/>
<!--meta name="external-controller" content="http://secret@example.com:9090"-->
<title>Clash</title>
<script type="module" crossorigin src="./assets/index.628acf3b.js"></script>
<link rel="modulepreload" href="./assets/vendor.356502e2.js">
<link rel="stylesheet" href="./assets/index.d7f07683.css">
<link rel="manifest" href="./manifest.webmanifest"><script>if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('./sw.js', { scope: './' })})}</script></head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<script>
const urlSearchParams = new URLSearchParams(window.location.search);
const { host, port, secret, protocol } = Object.fromEntries(
urlSearchParams.entries()
);
if (host && port) {
const meta = document.createElement("meta");
meta.name = "external-controller";
meta.content = `${protocol || window.location.protocol}//${
secret || ""
}@${host}:${port}`;
document.getElementsByTagName("head")[0].appendChild(meta);
}
</script>
</body>
</html>

View File

@ -1 +0,0 @@
{"name":"Clash Dashboard","short_name":"Clash Dashboard","start_url":"./","display":"standalone","background_color":"#ffffff","lang":"en","scope":"./","icons":[{"src":"https://raw.githubusercontents.com/MetaCubeX/clash-dashboard/master/src/assets/Icon.png","sizes":"512x512","type":"image/png"}]}

View File

@ -1 +0,0 @@
if(!self.define){let e,s={};const n=(n,i)=>(n=new URL(n+".js",i).href,s[n]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()})).then((()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didnt register its module`);return e})));self.define=(i,t)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(s[r])return;let o={};const l=e=>n(e,r),d={module:{uri:r},exports:o,require:l};s[r]=Promise.all(i.map((e=>d[e]||l(e)))).then((e=>(t(...e),o)))}}define(["./workbox-4ee7f24a"],(function(e){"use strict";self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),e.precacheAndRoute([{url:"assets/index.628acf3b.js",revision:null},{url:"assets/index.d7f07683.css",revision:null},{url:"assets/vendor.356502e2.js",revision:null},{url:"index.html",revision:"24c4013e306091d60d3bac8dd74d481f"},{url:"manifest.webmanifest",revision:"f7e51bd07af7699e1422bce9dedf3da5"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))}));

File diff suppressed because one or more lines are too long