#!/usr/bin/env bash
# Release builder replaces the pinned version and archive digest in the public copy.
set -euo pipefail
umask 077
version='0.2.2'
expected='6d711fc5bb1f55580ea3c825c4c55ce0c3f8bf33dccf3c131e807cf6c96856b8'
base='https://tpanel.kuasite.com'
case "${1:-}" in
 --help|-h) echo 'TermuxPanel一键安装：bash install.sh [--plan]，无需Root。'; exit 0;;
 --plan|'') ;;
 *) echo '仅支持 --plan 或不带参数'; exit 1;;
esac
[[ -n ${PREFIX:-} && -x "$PREFIX/bin/pkg" && $(id -u) != 0 ]] || { echo '请在非Root的原生Termux中执行；云服务器仅用于托管安装文件。'; exit 1; }
for p in "$HOME" "$PREFIX"; do [[ $p != *[$'\n\r\t\"\047;$`{}\\ ']* ]] || { echo '不支持的Termux路径'; exit 1; }; done
case "$HOME" in /storage/*|/sdcard/*) echo '安装目录不能位于共享存储'; exit 1;; esac
[[ $expected =~ ^[a-f0-9]{64}$ && $version =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || { echo '这是未生成的安装器模板，请使用网站提供的install.sh'; exit 1; }
archive_url="$base/releases/$version/termux-panel.tar.gz"
if [[ ${1:-} == --plan ]]; then
 printf '下载：%s\n固定SHA-256：%s\n' "$archive_url" "$expected"
 echo '安装Nginx、PHP、MariaDB、Go和服务监管，本机编译并启动面板。已有数据保留，未知数据库拒绝自动接管。'
 exit 0
fi
pkg update -y
pkg install -y curl tar coreutils util-linux
root="$HOME/.local/share/termux-panel-releases"
mkdir -p "$root"
exec 8>"$root/.download.lock"
flock -n 8 || { echo '另一个下载/安装任务正在执行'; exit 1; }
work=$(mktemp -d "$root/.download.XXXXXXXX")
trap 'rm -rf -- "$work"' EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
echo "下载TermuxPanel $version"
curl --proto '=https' --proto-redir '=https' --tlsv1.2 -fSL --retry 3 --connect-timeout 20 --max-time 600 "$archive_url" -o "$work/package.tar.gz"
printf '%s  %s\n' "$expected" "$work/package.tar.gz" | sha256sum -c -
# Reject traversal and links before extraction, even though the hash is pinned.
tar -tzf "$work/package.tar.gz" > "$work/members"
while IFS= read -r name; do
 case "$name" in termux-panel|termux-panel/*) ;; *) echo '非法安装包根路径'; exit 1;; esac
 case "/$name/" in */../*|*/./*|*\\*) echo '非法安装包路径'; exit 1;; esac
done < "$work/members"
tar -tvzf "$work/package.tar.gz" | awk 'substr($0,1,1)!="-" && substr($0,1,1)!="d" {bad=1} END {exit bad}' || { echo '安装包含非普通文件'; exit 1; }
tar --no-same-owner -xzf "$work/package.tar.gz" -C "$work"
[[ -f "$work/termux-panel/scripts/deploy-termux.sh" ]] || { echo '安装包不完整'; exit 1; }
release="$root/$version-${expected:0:12}"
# Keep user edits and previous releases intact; never merge into a working checkout.
if [[ -e $release ]]; then
 release=$(mktemp -d "$root/$version-${expected:0:12}.XXXXXXXX")
 rmdir "$release"
fi
mv "$work/termux-panel" "$release"
bash "$release/scripts/deploy-termux.sh" --yes 8>&-
