mirror of
https://github.com/anten-ka/gotelegram_pro.git
synced 2026-05-19 11:26:03 +00:00
v2.5.0: add local web admin dashboard
This commit is contained in:
78
install.sh
78
install.sh
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user