Commit Graph

29 Commits

Author SHA1 Message Date
Codex
7afeb59261 v2.5.0: maintenance and bot user management 2026-04-24 18:50:43 +03:00
anten-ka
eb5175ccab v2.4.6: universal apt_lock_wait helper (fix nginx install on fresh VPS)
- lib/common.sh: add apt_lock_wait + apt_install + apt_update helpers
  * waits up to 300s for dpkg lock held by unattended-upgrades
  * uses DPkg::Lock::Timeout=120 native flag
  * captures stderr to show real error if install fails
- lib/website.sh: install_nginx/install_certbot use apt_install
  (fixes "Could not get lock /var/lib/dpkg/lock-frontend" during Pro setup)
- install.sh: bot_install uses apt_install (removes duplicated lock logic)
- lib/common.sh: ensure_deps uses apt_update + apt_install
2026-04-10 20:01:20 +03:00
anten-ka
3403975636 fix(v2.4.5): wait for apt lock + versioned python3.X-venv fallback
- bot_install: wait up to 300s for dpkg/apt lock (unattended-upgrades)
- use apt-get -o DPkg::Lock::Timeout=120 as extra safety
- detect python3 minor version and include python3.X-venv in package list
- stop silencing apt errors with 2>/dev/null — surface them to user
- python3-full is optional; fall back to core packages if unavailable
- venv fallback path also installs versioned package and retries
- templates_catalog.json: skip cp when source==dest (symlink install)
2026-04-10 15:59:46 +03:00
anten-ka
3919f201f5 fix(v2.4.4): robust venv creation + UTF-8 safe install frame
- install.sh bot_install: always ensure python3-venv+pip, verify pip exists, check pip install exit code, sanity-check imports
- install.sh: replace box-frame with simple bullet lines (printf %-Ns was byte-counting, breaking Cyrillic UTF-8)
- common.sh: 2.4.4
- bot.py: 2.4.4
2026-04-10 14:03:28 +03:00
anten-ka
e9af6e969f fix(v2.4.3): flock serialization for bot_action_dispatch
Iteration 3 discovered a race condition: parallel CLI invocations of
change-lite-domain occasionally produced 'no secret in config' because
one process read config.json while another was mid-rewrite (jq -> tmp -> mv).
asyncio.Lock in bot.py only protects bot->bot races; CLI-level races and
bot+CLI mixed races were still possible.

- install.sh: bot_action_dispatch wraps dispatch in flock(1) on
  /var/lock/gotelegram-bot-action.lock, 30s timeout, EX_TEMPFAIL on timeout
- common.sh: flock added to critical deps; apt_pkg_for_cmd/dnf_pkg_for_cmd
  map flock -> util-linux
- common.sh: check_deps_present includes flock
- version bumped to 2.4.3 (common.sh + bot.py)
2026-04-10 13:35:22 +03:00
anten-ka
fc28a1a099 feat(v2.4.2): bot non-interactive install.sh actions
- install.sh: new bot_action_dispatch entry point for --action=X --json CLI invocation from the bot/scripts
- install.sh: bot_action_change_template — reuses download_template + deploy_template_to_nginx, updates config.json template_id
- install.sh: bot_action_change_lite_domain — regenerates telemt TOML with new fake-TLS mask domain, restarts telemt
- bot.py: run_bot_action() subprocess wrapper parses JSON result
- bot.py: cb_pro_confirm now performs real change-template when already in pro mode (fresh install still routes to CLI)
- bot.py: cb_lite_domain now performs real change-lite-domain when already in lite mode
- version -> 2.4.2
2026-04-10 13:19:26 +03:00
anten-ka
6b206a1697 fix(stats): add lib/stats.sh to bootstrap + auto-recreate history
Bug report: 'статистика не работает' — submenu_stats showed the
'stats module missing' fallback even though gotelegram-stats.service
was active. Root cause: bootstrap.sh FILES[] never included
lib/stats.sh, so on every (re)install the file was absent from
/opt/gotelegram/lib/ on disk. The running collector was sourcing it
from an in-memory bash process from a previous install, but
install.sh's `source stats.sh` at menu entry failed silently and
hit the 'stats_module_missing' branch.

Also: stats_collect silently skipped history writes if
stats_history.csv was deleted post-init (only stats_init created it
once). Now stats_collect auto-recreates the file with header.

- bootstrap.sh: add 'lib/stats.sh' to FILES[]
- lib/stats.sh: stats_collect auto-creates HISTORY_FILE if missing

Tested live on VPS: show_traffic_stats now outputs real counters
(23.1 MB proxy, 10 MB site, 394 KB/s peak).
2026-04-10 12:44:35 +03:00
anten-ka
6dc0000013 v2.4.1: full docs (DOCS_HUMAN.md + DOCS_AI.md)
- DOCS_HUMAN.md: user-facing guide (quick start, lite/pro, menu, bot,
  backup, requirements, FAQ, file locations, changelog)
- DOCS_AI.md: deep technical reference for AI agents (architecture,
  telemt v3 TOML format, subshell capture rules, bug history incl.
  start_telemt restart fix, github push workflow, VPS test workflow)
- lib/common.sh: bump GOTELEGRAM_VERSION 2.4.0 -> 2.4.1
2026-04-10 12:36:24 +03:00
anten-ka
663a5a2aae fix(install): restart telemt if already running so new config is applied
start_telemt() was a no-op when the service was already active, so
regenerating /etc/telemt/config.toml (e.g. reinstalling with a different
mask domain or switching lite<->pro) left the daemon running with the
OLD in-memory config. This caused the reported "lite-mode key does not
work" issue: after a fresh lite install over an existing pro install,
telemt kept tls_domain=anten-ka.com and dropped SNI=google.com clients
with unknown_sni_action=Drop even though /etc/telemt/config.toml said
tls_domain=google.com.

Fix: start_telemt now uses systemctl restart when the service is
already active, guaranteeing the fresh config is loaded.
2026-04-10 12:16:45 +03:00
anten-ka
0d087831d8 v2.4.0 — internationalization (EN/RU) + custom git templates
- i18n engine (lib/i18n.sh, lib/lang/en.sh, lib/lang/ru.sh)
- first-run language picker, persisted to .language + config.json
- install.sh, common.sh, backup.sh, templates_catalog.sh wired through t()/tf()
- backup.sh preserves .language marker and records language in metadata.json
- custom git template feature (first item in pro template picker)
  * validates HTTPS URLs, rejects shell metachars
  * 100MB size guard, 90s clone timeout
  * auto-detects index.html in dist/public/build/_site/site/docs/out/www
- bot v2.4.0: i18n.py + lang/{en,ru}.json, /lang command, language toggle button
- bot: custom git template via text input with waiter gating
2026-04-10 11:26:02 +03:00
anten-ka
9c084f37ec bugfix: {{NC}} typo, bot TOML v3 parsing, add_secret v3 format
- install.sh: fix {{NC}} -> ${NC} color escape on line 265
- bot.py: fix TOML parsing for telemt v3 [access.users] format
- bot.py: fix telemt config section [server].port instead of [config].listen_port
- telemt_config.sh: fix add_secret_to_config() for v3 format
2026-04-10 00:16:30 +03:00
anten-ka
63b2fc3717 fix: banner + credits frame alignment (common.sh) 2026-04-09 19:28:46 +03:00
anten-ka
fedc8f77fe fix: frame alignment, ee-prefix for lite mode, qrencode in deps
- All frame boxes: correct 54-char width with emoji compensation
- Lite mode links now include ee-prefix + mask_host hex (fake-TLS)
- Added qrencode to ensure_deps() so QR codes work after fresh install
- Centralized link generation in generate_proxy_link()
- Fixed bot.py get_proxy_link() for lite mode ee-prefix
2026-04-09 19:24:05 +03:00
anten-ka
a21d2ebea2 v2.3.1: fix QR top margin, use domain instead of IP for pro-mode links 2026-04-09 00:59:42 +03:00
anten-ka
3f136ec8a0 v2.3.1: promo update (2 hosters, QR codes, once-per-day display, 5sec delay) 2026-04-08 22:42:29 +03:00
anten-ka
52912e0ead fix: stats crash (set -u + CSV header), header box, QR spacing 2026-04-08 22:21:17 +03:00
anten-ka
6ec2123f83 v2.3.0: Lite/Pro rebrand, submenu system, traffic stats, bot stats 2026-04-08 21:49:03 +03:00
anten-ka
6e32ca9d12 fix: telemt v3 config format ([server], [censorship], [access.users]), stealth with dns_overrides 2026-04-08 20:31:50 +03:00
anten-ka
7f81c21d8e stealth: telemt on 0.0.0.0:443, nginx on 127.0.0.1:8443, domain-based proxy link with ee-secret 2026-04-08 20:18:25 +03:00
anten-ka
75a84e209b feat: expand template catalog to 1978 templates from 5 sources
Added ThemeWagon (1517), dawidolko (172), ColorlibHQ (177).
18 categories with auto-categorization.
Updated download_template for new sources.
2026-04-07 00:27:16 +03:00
anten-ka
d6045ace0c fix: stealth mode bind_to 127.0.0.1 + clarify internal port 8443 comments
telemt in stealth mode now binds to 127.0.0.1 instead of 0.0.0.0.
External port 8443 is not exposed - only nginx on 443 is public.
2026-04-07 00:10:13 +03:00
anten-ka
64da5de1ae fix: download_template - handle StartBootstrap dist/ structure + fallback index.html search
StartBootstrap templates store production files in dist/ subdirectory.
Added: dist/ detection, recursive index.html fallback, ls output to stderr.
2026-04-06 23:03:49 +03:00
anten-ka
a5347889bd fix: templates_catalog.sh - redirect show_template_preview stdout to stderr
Lines 168-172 in show_template_preview() were missing >&2,
causing stdout leak into subshell capture chain.
This corrupted template_dir variable and broke Stealth mode deployment.
2026-04-06 22:48:08 +03:00
anten-ka
1293b04430 Fix: download_telemt extract - use dedicated dir instead of find -newer 2026-04-06 22:11:46 +03:00
anten-ka
cc3f547273 Fix: subshell capture bug - interactive menus invisible in $()
- All UI output (echo, printf) in interactive functions now goes to stderr (>&2)
- Only return values go to stdout for $() capture
- Affected: select_quick_domain, select_port, select_category, select_template, show_template_preview
- Also fixed: log_*, confirm, select_option in common.sh
2026-04-06 22:05:20 +03:00
anten-ka
fee25f191e v2.2.1: unified menu with bot management, grouped sections, telemt download fix, QR cleanup, version bump 2026-04-06 21:40:34 +03:00
anten-ka
fe9e5fa019 v2.2.1 hotfix: fix telemt download grep pattern (grep -iE), add QR cleanup, bump version to 2.2.1 2026-04-06 21:32:00 +03:00
anten-ka
13cca51f5f v2.2.1 hotfix: fix telemt download grep pattern (grep -iE), add QR cleanup, bump version to 2.2.1 2026-04-06 21:30:30 +03:00
anten-ka
4985ec3679 v2.2.1: 11 security fixes (safe_edit_message, IP validation, os-release protection, config_get return codes, spinner stderr, domain check, mode sanitization, var init, XSS escape) 2026-04-06 20:49:31 +03:00