v2.5.0: add local web admin dashboard

This commit is contained in:
Виталий Литвинов
2026-04-24 19:19:12 +03:00
parent ed9073f28f
commit 20103ccac8
15 changed files with 1668 additions and 12 deletions

View File

@@ -869,6 +869,7 @@ menu_remove() {
systemctl daemon-reload
rm -rf "$BOT_DIR"
fi
remove_admin_web
log_success "$(t remove_all_done)"
;;
esac
@@ -878,6 +879,80 @@ menu_remove() {
BOT_DIR="/opt/gotelegram-bot"
BOT_SERVICE="gotelegram-bot"
admin_web_service_status() {
if ! systemctl list-unit-files "$ADMIN_WEB_SERVICE.service" &>/dev/null 2>&1; then
echo "not_installed"
elif systemctl is-active "$ADMIN_WEB_SERVICE" &>/dev/null 2>&1; then
echo "running"
else
echo "stopped"
fi
}
install_admin_web() {
local src_dir="$SCRIPT_DIR/admin-web"
[ -d "$src_dir" ] || { log_warning "admin-web files not found: $src_dir"; return 1; }
command -v python3 &>/dev/null || { log_warning "python3 not found; web admin skipped"; return 1; }
mkdir -p "$ADMIN_WEB_DIR/static"
cp "$src_dir/server.py" "$ADMIN_WEB_DIR/server.py"
cp -a "$src_dir/static/." "$ADMIN_WEB_DIR/static/"
chmod 700 "$ADMIN_WEB_DIR"
chmod 755 "$ADMIN_WEB_DIR/server.py" "$ADMIN_WEB_DIR/static"
if [ ! -f "$ADMIN_WEB_DIR/token" ]; then
openssl rand -base64 48 | tr -d '\n=+/' | cut -c1-48 > "$ADMIN_WEB_DIR/token"
echo "" >> "$ADMIN_WEB_DIR/token"
fi
chmod 600 "$ADMIN_WEB_DIR/token"
local python_bin
python_bin=$(command -v python3)
cat > "/etc/systemd/system/${ADMIN_WEB_SERVICE}.service" << SVCEOF
[Unit]
Description=GoTelegram v${GOTELEGRAM_VERSION} Local Web Admin
After=network.target
[Service]
Type=simple
WorkingDirectory=$ADMIN_WEB_DIR
ExecStart=$python_bin $ADMIN_WEB_DIR/server.py
Restart=always
RestartSec=5
Environment=GOTELEGRAM_ADMIN_HOST=$ADMIN_WEB_HOST
Environment=GOTELEGRAM_ADMIN_PORT=$ADMIN_WEB_PORT
[Install]
WantedBy=multi-user.target
SVCEOF
systemctl daemon-reload
systemctl enable "$ADMIN_WEB_SERVICE" &>/dev/null
systemctl restart "$ADMIN_WEB_SERVICE" 2>/dev/null || systemctl start "$ADMIN_WEB_SERVICE"
log_success "Web admin installed: ${ADMIN_WEB_HOST}:${ADMIN_WEB_PORT}"
}
auto_install_admin_web_if_possible() {
[ -d "$SCRIPT_DIR/admin-web" ] || return 0
command -v python3 &>/dev/null || return 0
if [ "$(admin_web_service_status)" != "not_installed" ] && \
[ -f "$ADMIN_WEB_DIR/server.py" ] && \
cmp -s "$SCRIPT_DIR/admin-web/server.py" "$ADMIN_WEB_DIR/server.py" && \
cmp -s "$SCRIPT_DIR/admin-web/static/app.js" "$ADMIN_WEB_DIR/static/app.js" && \
cmp -s "$SCRIPT_DIR/admin-web/static/styles.css" "$ADMIN_WEB_DIR/static/styles.css"; then
return 0
fi
install_admin_web >/dev/null 2>&1 || true
}
remove_admin_web() {
systemctl stop "$ADMIN_WEB_SERVICE" 2>/dev/null
systemctl disable "$ADMIN_WEB_SERVICE" 2>/dev/null
rm -f "/etc/systemd/system/${ADMIN_WEB_SERVICE}.service"
systemctl daemon-reload 2>/dev/null
rm -rf "$ADMIN_WEB_DIR"
}
bot_service_status() {
if ! systemctl list-unit-files "$BOT_SERVICE.service" &>/dev/null 2>&1; then
echo "not_installed"
@@ -1136,6 +1211,8 @@ SVCEOF
systemctl enable "$BOT_SERVICE" &>/dev/null
systemctl restart "$BOT_SERVICE" 2>/dev/null || systemctl start "$BOT_SERVICE"
install_admin_web || log_warning "Web admin could not be installed"
# If auto mode — wait until bot captures first admin
local has_ids
has_ids=$(grep "^ALLOWED_IDS=" "$BOT_DIR/.env" 2>/dev/null | cut -d= -f2)
@@ -1700,6 +1777,7 @@ main() {
fi
auto_migrate_legacy_state || true
auto_install_admin_web_if_possible || true
# First-run language picker (before banner so banner appears in chosen lang)
first_run_language_picker