Commit Graph
96 Commits
Author SHA1 Message Date
thePR0M3TH3AN 2de7ea073c feat: add autostart lifecycle controls 2026-03-19 16:15:51 -04:00
thePR0M3TH3AN 6c4d6d6aef feat: formalize platform runtime contracts 2026-03-19 15:57:50 -04:00
thePR0M3TH3AN 1fcb86ac8b chore: release v0.3.5 2026-03-17 15:35:17 -04:00
thePR0M3TH3AN 2b29d71ac5 chore: release v0.3.4 2026-03-17 14:18:42 -04:00
thePR0M3TH3ANandClaude Opus 4.6 46360ca6ea fix(install): clean stale generated files from site dirs before rebuild
Install script now removes index.html, QR codes, and download bundles
from existing site directories before rebuild-all regenerates them.
Preserves config.json, .onionshare-session, server.pid, and logs.
Also auto-rebuilds on serve if index.html is missing.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-03-16 21:46:14 -04:00
thePR0M3TH3ANandClaude Opus 4.6 03b1c51e27 feat(rebuild): add rebuild-all command and auto-rebuild on install
Existing sites kept stale index.html from old templates after upgrades.
New `voxvera rebuild-all` regenerates HTML for all sites from the
current master template while preserving keys, config, and content.
The install script now calls rebuild-all automatically after install.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-03-16 21:39:34 -04:00
thePR0M3TH3ANandClaude Opus 4.6 91391b1dd7 fix(lint): add missing Console() instances in export/import key functions
Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-03-16 21:12:35 -04:00
thePR0M3TH3ANandClaude Opus 4.6 d61a7b4c92 feat(keys): add Export Keys / Import Keys to per-site menu with 14-language support
Allows users to export onion service session keys as base64 and import
them on another instance, enabling domain migration without re-hosting.
Bump version to 0.3.3.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-03-16 21:04:34 -04:00
thePR0M3TH3ANandClaude Opus 4.6 ee5024678d fix(ui): tighten header spacing, preserve body edits on retry, add over-limit warning
- Switch content panel from space-between to flex-start so header
  elements (title, subtitle, headline) pack tightly instead of
  spreading across the full height
- Message area uses flex:1 to fill remaining space and keep footer
  at the bottom
- Body editor now preserves user text when re-editing after exceeding
  the 1000 character limit (previously reset to default)
- Show a yellow warning when user proceeds with over-limit body text
- Add body_over_limit_warning locale key across all 14 languages

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-03-16 19:41:40 -04:00
thePR0M3TH3ANandClaude Opus 4.6 445375e098 feat(templates): add "Create From Template" menu with 14-language support
- Add bundled preset templates under voxvera/templates/presets/ (moved
  from imports/, normalized field names to match config schema)
- New "Create From Template" option in the manage menu lets users pick
  a preset (aosp, bitcoin, jesus, meshtastic, nostr, voxvera) and
  customize it before publishing
- Template content is fully translated across all 14 supported languages;
  the displayed content matches the user's selected language
- Rebuild HTML files with updated locale data

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-03-16 18:55:38 -04:00
thePR0M3TH3ANandClaude Opus 4.6 bcc8616851 fix(content): apply newline-to-br conversion in build_site locale embedding and rebuild HTML
The build_site() path was missing the _newlines_to_br() call when
embedding user content into the locales JSON, causing literal \n to
appear in the generated index.html files. Fixed and rebuilt both
site/index.html and voxvera/host/voxvera/index.html.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-03-16 13:54:04 -04:00
thePR0M3TH3ANandClaude Opus 4.6 c9f2546e1d fix(content): complete newline/br round-trip for editor and all content sources
Convert <br> to real newlines before opening the editor so users see
proper paragraph breaks instead of raw markup. Ensure user-typed newlines
are converted back to <br> when embedded in the locales JSON for JS
rendering. Replace remaining \n with <br> in all import configs and
site/config.json for consistency.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-03-16 13:46:28 -04:00
thePR0M3TH3ANandClaude Opus 4.6 6189ae321e fix(content): robust newline-to-br conversion across all content sources
Root cause: three config.json files (src, templates, host) had different
newline encodings (\n, \\n, raw newlines). The templates version had
double-escaped \\n\\n which survived the simple replace chain.

- Replace \n with <br> in all three config.json files
- Replace raw newlines with <br> in bundled host/voxvera/index.html
- Add _newlines_to_br() helper that handles all encoding variants:
  real newlines, literal \n, already-converted <br>, and mixed content
- Use the helper in all four HTML injection sites in cli.py

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-03-16 13:17:12 -04:00
thePR0M3TH3ANandClaude Opus 4.6 b4a74a32f4 fix(cli): convert newlines to <br> in static HTML for Tor compatibility
User-entered line breaks were rendering as literal \n\n in the content
box because the static HTML injection didn't convert newlines to <br>
tags. Since Tor Browser disables JS, the fix must be server-side.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-03-16 11:39:26 -04:00
thePR0M3TH3ANandClaude Opus 4.6 bc64d1c3b5 feat(cli): persistent servers, start-all/stop-all, autostart on boot (v0.3.0)
Sites now survive terminal close and can start automatically on boot:

- subprocess.Popen uses start_new_session=True (Unix) or
  CREATE_NEW_PROCESS_GROUP (Windows) so onionshare-cli processes
  are fully detached and immune to SIGHUP when the terminal exits
- New `voxvera start-all` / `stop-all` commands for non-interactive
  batch control of all configured sites
- New `voxvera autostart` installs platform-appropriate boot service:
  - Linux: systemd user service + loginctl enable-linger
  - macOS: launchd LaunchAgent
  - Windows: schtasks scheduled task on login

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-03-16 11:00:44 -04:00
thePR0M3TH3ANandClaude Opus 4.6 b5ab447207 fix(cli): set PYTHONNOUSERSITE=1 for onionshare-cli subprocess, robust cleanup (v0.2.19)
Root cause: user-local werkzeug 2.0.3 in ~/.local/lib/python3.11/
site-packages shadows the system werkzeug 2.2.2, breaking Flask's
LocalProxy.unbound_message for the system onionshare-cli.

The pip3 show-based cleanup was unreliable (shows system package,
skips user-local). Two-pronged fix:

1. Set PYTHONNOUSERSITE=1 in the env passed to onionshare-cli so it
   never loads packages from ~/.local — uses only system packages.
2. Install script now directly rm -rf's conflicting packages from
   ~/.local/lib/python3.*/site-packages/ instead of relying on pip3.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-03-16 10:14:39 -04:00
thePR0M3TH3ANandClaude Opus 4.6 51ab72239f fix(cli): always use system onionshare-cli binary, even in PyInstaller builds (v0.2.17)
The previous fix only used the system binary for non-frozen (pip/pipx)
installs.  But the PyInstaller binary also needs this — it downloads
successfully but its bundled onionshare_cli import still crashes on
'No module named pkg_resources'.

Now both serve() and _internal_onionshare() unconditionally prefer the
system onionshare-cli/onionshare binary via shutil.which(), falling
back to the Python import only if no system binary exists.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-03-16 09:51:44 -04:00
thePR0M3TH3ANandClaude Opus 4.6 4e571b62ea fix(cli): robust onionshare invocation, delete ghost sites, stabilize DATA_DIR (v0.2.16)
Major fixes:
- Use system onionshare-cli binary directly (subprocess/execvp) instead of
  importing it as a Python module, avoiding pkg_resources crashes in pipx venvs
- get_servers() now only searches DATA_DIR/host (single source of truth);
  bundled example sites are seeded on first manage run then fully user-owned
- delete_server() now permanently removes sites (no ghost re-appearance)
- DATA_DIR defaults to ~/  instead of cwd, preventing sites from scattering
  across directories
- Fix attachment URL logic that incorrectly overwrote valid onion URLs

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-03-16 09:29:02 -04:00
thePR0M3TH3ANandClaude Opus 4.6 3bb8627d20 fix(install): restrict vendor sys.path and PyInstaller imports to frozen builds only (v0.2.15)
The vendor directory was unconditionally prepended to sys.path, causing
pip/pipx installs to load incomplete vendored setuptools (missing data
files like Lorem ipsum.txt) instead of the system package. Now the
vendor path is only added for PyInstaller frozen builds, and the
force-import block in cli.py is similarly guarded behind sys.frozen.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-03-16 09:11:23 -04:00
thePR0M3TH3AN f530e54f45 fix(build): force collect-all for pkg_resources and setuptools to guarantee inclusion (v0.2.13) 2026-03-15 22:06:03 -04:00
thePR0M3TH3AN dc83b76317 fix(cli): resolve PyInstaller nano crash, pkg_resources import error, and streamline attachment vs URL logic (v0.2.11) 2026-03-15 21:20:26 -04:00
thePR0M3TH3AN 9c699eb36b fix(cli): correct DATA_DIR paths for export and import, fix test paths (v0.2.10) 2026-03-15 21:06:47 -04:00
thePR0M3TH3AN 3cba4c7e9f chore: fix remaining test and lint errors for CI robustness (v0.2.9) 2026-03-15 20:48:26 -04:00
thePR0M3TH3AN 69ca9f6411 Fix PyInstaller volatility and bundle dependencies (v0.2.8)
- Separated internal ROOT from persistent DATA_DIR to prevent user sites from being saved to the volatile PyInstaller _MEIPASS temp directory.
- Updated unit tests to correctly mock DATA_DIR and ensure complete isolation between tests.
- Fixed binaries.yml and requirements.txt to correctly bundle the pinned Flask/Werkzeug versions, preventing onionshare-cli import failures in the standalone binary.
2026-03-15 20:23:04 -04:00
thePR0M3TH3AN 8662e2b16d feat: add Edit option to voxvera manage and improve server detection (v0.2.5) 2026-03-15 18:10:05 -04:00
thePR0M3TH3AN 765c0fa2a0 feat: add optional file attachment to flyers (v0.2.4) 2026-03-15 17:59:40 -04:00
thePR0M3TH3AN 9d1210cd51 Fix Windows .exe crash and bump version to 0.2.1 2026-03-15 17:13:21 -04:00
thePR0M3TH3AN 30ca68895f Fix linting and missing imports in CI/CD
- Added missing os import in tests/test_e2e.py.
- Removed trailing whitespace in voxvera/cli.py.
2026-03-14 22:33:14 -04:00
thePR0M3TH3AN b3ee6869a2 Final Robust CI/CD Fixes
- Switched Linux build runner to ubuntu-22.04 for better glibc compatibility.
- Improved OnionShare URL detection in ci/test-e2e.sh using grep -a and extra stabilization.
- Explicitly set TOR_BINARY environment variable in voxvera/cli.py when using bundled Tor.
- Standardized artifact handling and release flattening in binaries.yml.
2026-03-14 22:32:05 -04:00
thePR0M3TH3AN 4717304e1e Restore localized landing page content in build system
- Modified voxvera/cli.py to avoid overriding localized landing content if user config matches English defaults.
- Synchronized voxvera/src/config.json with site/config.json defaults for reliable comparison.
- Refreshed site/index.html and source bundle to reflect these changes.
2026-03-14 22:04:39 -04:00
thePR0M3TH3AN 0400199795 fix(cli): import __version__ to fix undefined name error in --version 2026-03-14 21:26:46 -04:00
thePR0M3TH3AN 00d55a2fda feat: add --version support 2026-03-14 21:21:05 -04:00
thePR0M3TH3AN c5b989767f chore: release v0.1.9 - bundle real Tor binaries and fix resource loading 2026-03-14 20:57:11 -04:00
thePR0M3TH3AN a017bf876f fix(core): ensure complete self-containment of Tor and OnionShare in binaries and test rigorously 2026-03-14 17:03:03 -04:00
thePR0M3TH3AN 193345e616 feat: simplify viral distribution to source ZIP and add uninstall scripts 2026-03-14 16:48:55 -04:00
thePR0M3TH3AN 4df0829c80 fix(build): ensure static replacement of landing tokens with user content and bump version to 0.1.4 2026-03-14 16:16:19 -04:00
thePR0M3TH3AN f53f9c2357 feat(cli): implement localized defaults for site configuration and bump version to 0.1.3 2026-03-14 15:59:54 -04:00
thePR0M3TH3AN e9635e08d3 feat(cli): improve body text editor, fix config reset, and transition to tilde redaction syntax 2026-03-14 09:33:28 -04:00
thePR0M3TH3AN 60e4d6bcea feat: add download dropdown with OS-specific binaries and source zip 2026-03-13 22:43:26 -04:00
thePR0M3TH3AN 885fb72388 build: regenerate standalone binary and fix portable bundle duplication 2026-03-13 22:29:51 -04:00
thePR0M3TH3AN 5bb1061393 chore: Final linting polish and whitespace cleanup 2026-03-13 17:01:14 -04:00
thePR0M3TH3AN 838250c588 feat: Improve portable bundle to include standalone binaries and Windows launcher 2026-03-13 16:30:50 -04:00
thePR0M3TH3AN ece805a6d2 feat: Add support for Russian, Hebrew (RTL), and Arabic (RTL) with visual width validation 2026-03-13 16:17:54 -04:00
thePR0M3TH3AN 6afbe29552 feat: Implement bulletproof layout system with precise char limits and CSS boundaries 2026-03-13 16:14:00 -04:00
thePR0M3TH3AN ec409bece3 feat: Support Markdown-style ~~ redaction syntax in locales and build logic 2026-03-13 16:04:32 -04:00
thePR0M3TH3AN 973b8262e0 fix: Add landing tokens to locales and ensure build_site pre-renders them correctly 2026-03-13 15:58:15 -04:00
thePR0M3TH3AN b4d8852c3e fix: Restore data-i18n attributes to re-enable language selector while preserving zero-JS support 2026-03-13 15:55:53 -04:00
thePR0M3TH3AN 1783d55973 security: Implement static translation injection for zero-JS Tor compatibility 2026-03-13 15:52:35 -04:00
thePR0M3TH3AN d22fb0c9bd feat: Implement Smart Translation to allow landing page content to be localized 2026-03-13 15:50:56 -04:00
thePR0M3TH3AN 40f7efee38 chore: Final project cleanup, import optimization, and full doc tokenization 2026-03-13 15:44:30 -04:00