Commit Graph
121 Commits
Author SHA1 Message Date
Raven Scott 6c1428c6f1 updates to server tunnels
CI / Build & Test (push) Successful in 2m45s
2026-02-28 21:47:40 -05:00
Raven Scott f5a299b9ec css fixes
CI / Build & Test (push) Successful in 3m29s
2026-02-28 21:34:30 -05:00
Raven Scott 2cb32f9537 fix(proxy): implement JS-layer SNI for per-TLD wildcard certs and fix chunked encoding
CI / Build & Test (push) Successful in 3m27s
Replace the bare-https HTTPS proxy with a bare-tcp server that implements
SNI entirely in JavaScript. A pure-JS TLS ClientHello parser extracts the
SNI hostname from each incoming connection, derives the wildcard parent
domain by stripping the leftmost label, and selects (or generates on demand)
the correct wildcard cert via certificate-authority.getOrCreateWildcardCert().
This fixes ERR_SSL_SERVER_CERT_BAD_FORMAT for custom TLDs and supports
hostnames of any depth (e.g. i.love.hole.sail → cert *.love.hole.sail).

Also fixes ERR_INVALID_CHUNKED_ENCODING by stripping hop-by-hop headers
(Transfer-Encoding, Connection, etc.) from proxied responses — bare-http1
decodes chunked bodies internally so forwarding the header caused Chrome
to misinterpret the already-decoded body bytes.

- https-proxy.js: rewrite using bare-tcp + JS SNI peek + bare-tls per conn
- certificate-authority.js: add getOrCreateWildcardCert(parentDomain)
- host.js: remove refreshProxyCert/getActiveBaseDomains (no longer needed)
- background.js: PAC dnsDomainIs clauses already match any depth correctly
- dashboard.html: update vhost hint text to show deep hostnames are supported
- docs: update ARCHITECTURE, SECURITY, NATIVE-HOST; add VIRTUAL-HOSTS.md
2026-02-28 21:20:20 -05:00
Raven Scott c51717699d update docs
CI / Build & Test (push) Has been cancelled
2026-02-28 21:18:23 -05:00
Raven Scott 8303c72140 further tests
CI / Build & Test (push) Successful in 3m44s
2026-02-28 21:07:39 -05:00
Raven Scott 15dd9b7bd1 test
CI / Build & Test (push) Successful in 3m22s
2026-02-28 20:59:38 -05:00
Raven Scott c734bfa1e3 further proxy fixes
CI / Build & Test (push) Successful in 3m0s
2026-02-28 20:48:30 -05:00
Raven Scott c7e33691e4 proxy fixes
CI / Build & Test (push) Successful in 3m30s
2026-02-28 20:38:19 -05:00
Raven Scott 82c75b289e fix: correct SSL cert for custom TLDs and immediate PAC update on vhost changes
CI / Build & Test (push) Successful in 3m18s
- Replace SNI callback approach (unsupported by bare-tls) with a multi-SAN
  wildcard cert covering all active base domains (e.g. *.hole.sail, *.heheh.jungle)
- Add buildMultiSanCert() in https-proxy.js — cert key encodes sorted domain list
  so cache invalidates automatically when TLDs are added or removed
- Add restart(baseDomains, callback) to https-proxy.js to stop and restart the
  proxy with a fresh cert without requiring a native host restart
- Add getActiveBaseDomains() and refreshProxyCert() in host.js; call after every
  successful setVirtualHost and removeVirtualHost
- Fix background.js send handler to fetch updated virtualHosts via getState and
  re-apply PAC immediately after setVirtualHost or removeVirtualHost succeeds,
  so new TLDs are routed without waiting for the next dashboard refresh
- Remove unused tls require from https-proxy.js
- Remove invalid "permissions" entry from manifest.json permissions array
2026-02-28 20:30:26 -05:00
Raven Scott 00d9c958ca feat: custom TLD virtual hosts with SNI certs, dynamic PAC, and TLD validation
CI / Build & Test (push) Successful in 3m15s
- Add isValidVhostHostname() to dashboard.js with embedded REAL_TLDS and
  REAL_SLD_TLDS blocklists; enforces 3-label minimum (two-tier TLD requirement),
  valid label characters, and blocks real public TLDs/SLDs (e.g. .com, co.uk)
- Replace hardcoded .hole.sail validation in vhost submit handler with new validator
- Update Add Virtual Host modal hint text and add inline format explanation
- Update applyPAC() in background.js to accept a tlds array, generating one
  dnsDomainIs clause per unique two-label base domain; .hole.sail always included
- Store virtualHosts in extensionState and pass derived TLD list to applyPAC at
  every getState response and retryGetStateForConnectProxy call
- Replace single upfront *.hole.sail cert in https-proxy.js with SNICallback that
  lazily generates a wildcard cert per two-label base domain on first connection;
  baseline *.hole.sail cert still pre-generated at startup
- Add chrome.permissions.request() in background.js send handler to grant host
  permissions for new TLDs dynamically after successful setVirtualHost
- Add optional_host_permissions: ["*://*/*"] and "permissions" to manifest.json
  to enable runtime host permission grants for custom TLDs
2026-02-28 20:20:28 -05:00
Raven Scott 8727809b12 update icon
CI / Build & Test (push) Successful in 4m2s
2026-02-28 20:03:03 -05:00
Raven Scott 25d3ec26e1 ssh-conn-meta and rdp-conn-meta rows have been removed from both card templates.
CI / Build & Test (push) Successful in 4m4s
2026-02-28 19:58:25 -05:00
Raven Scott 2a71311459 feat: persist RDP/SSH passwords as base64, fix card layouts and modal UX
CI / Build & Test (push) Successful in 3m52s
- Encode passwords as base64 (passwordB64) before persisting RDP and SSH
  connections to native host state, decoded back on load/refresh
- Pre-fill password field when editing existing RDP or SSH connections
- Fix Quick Actions "Add SSH/RDP Connection" buttons to call openAddSshModal(null)
  / openAddRdpModal(null) so forms are properly reset instead of showing stale data
- Autofocus xterm.js terminal when SSH WebSocket connection is established
- Redesign SSH and RDP connection cards with a two-row layout: label + actions
  in the top row, full hs:// key in a wrapping monospace meta row below;
  removes all JS truncation and CSS ellipsis clipping
2026-02-28 19:51:16 -05:00
Raven Scott fe779bf2d7 fix quick actions
CI / Build & Test (push) Successful in 3m8s
2026-02-28 19:44:28 -05:00
Raven Scott f773c5e2a3 Add SSH Password Base64
CI / Build & Test (push) Successful in 2m46s
2026-02-28 19:19:02 -05:00
Raven Scott ee383a1173 Save RDP Passwords in state as base64
CI / Build & Test (push) Successful in 3m24s
2026-02-28 19:12:05 -05:00
Raven Scott f3cad8f125 fix installer
CI / Build & Test (push) Successful in 3m19s
2026-02-28 19:05:53 -05:00
Raven Scott e5a1fa71fe fix: comprehensive bug fixes, security improvements, and feature additions
CI / Build & Test (push) Successful in 3m21s
Critical fixes:
- Fix wrong registry key (com.bridgeswarm → com.holesail.browser) in
  update-native-manifest-extension-id.ps1 — script was always failing on Windows
- Create missing wrong-domain.html redirect page for .host.test URLs
- Remove options_ui pointing to non-existent options.html from manifest

High-priority bug fixes:
- ssh-manager: track and kill orphaned printf FIFO writer when key auth succeeds
- ssh-manager: fix uncancelled 2000ms fallback password timer (assign to fallbackTimer,
  clear in cancelPasswordWatch); fix null-check before removeAllListeners
- ssh-manager: add 30s Promise.race timeout to holesailInst.ready()
- backup-manager: fix macOS cp -R nesting bug by removing destination before copy;
  add tar -tzf integrity check after archive creation
- host.js: restoreBackup now stops running tunnels before restore and re-starts them
- holesail-manager: fix stale closure bug in virtual host and service tunnel
  error/close handlers (guard with v.holesail === hs check)
- dashboard.js: remove dead setText('dashTabs', ...) call referencing non-existent element

Medium improvements:
- manifest: remove unused storage and scripting permissions; restrict
  web_accessible_resources match from <all_urls> to chrome-extension://*/*
- background.js: fix self-referential browser alias (globalThis.browser ?? chrome);
  add 30s per-request timeout to send(); clean up dashboardTabs on tab close
- holesail-manager: gate saveStateSync stderr log behind DEBUG flag; updateSettings
  now returns requiresRestart:true when proxy port changes; add backupRetention field
- host.js: pass requiresRestart through in updateSettings response
- dashboard.js: remove dead loadSettings() function; add requiresRestart warning toast;
  add chrome.runtime.lastError guards in fetchState and refreshBackups;
  set dynamic version from chrome.runtime.getManifest()
- dashboard.html: remove stray </button> tag; add id="sidebarVersion" for dynamic version
- install.sh/install.ps1: fetch version from RELEASE_BASE/VERSION instead of hardcoded 1.0.0
- install.ps1: add Firefox .xpi download and Firefox registry key
- update-native-manifest-extension-id.sh: add optional Firefox manifest update
- certificate-authority.js: defer RSA key generation to setImmediate to avoid blocking
  startup; expose caReady promise
- host.js: await caReady before starting HTTPS proxy

Documentation:
- REMOTE-DESKTOP.md: correct RDP WebSocket protocol field names to match rdp-manager.js
  (destLeft/destTop/destRight/destBottom, mouseMove/mouseButton/keyEvent/keyUnicode)

Feature additions:
- dashboard.js: add Reconnect button for service tunnels in error/closed state
- https-proxy.js: add WebSocket upgrade handler to support ws:// over *.hole.sail
- connect-proxy.js: add 10s header-read timeout to protect against idle connections
- native-host: add bare-fs as explicit dependency
2026-02-28 19:00:13 -05:00
Raven Scott a03f45a439 fix active scope
CI / Build & Test (push) Successful in 2m53s
2026-02-28 18:43:48 -05:00
Raven Scott d7340ab99b fixes
CI / Build & Test (push) Successful in 2m53s
2026-02-28 18:35:23 -05:00
Raven Scott 5641f1a0d4 attempts to fix dashboard
CI / Build & Test (push) Successful in 2m52s
2026-02-28 18:28:37 -05:00
Raven Scott 678e7e237c dashboard updates test
CI / Build & Test (push) Successful in 3m15s
2026-02-28 18:20:12 -05:00
Raven Scott 1b23cffb48 icon
CI / Build & Test (push) Successful in 3m6s
2026-02-28 18:14:17 -05:00
Raven Scott 49dca45d85 cleanup older downloads
CI / Build & Test (push) Successful in 3m7s
2026-02-28 18:07:35 -05:00
Raven Scott fad18d163b remove refresh button
CI / Build & Test (push) Has been cancelled
2026-02-28 18:04:48 -05:00
Raven Scott 6d732f716d fix warning
CI / Build & Test (push) Has been cancelled
2026-02-28 18:02:30 -05:00
Raven Scott b9b4727658 Update Overview
CI / Build & Test (push) Successful in 2m59s
2026-02-28 17:55:46 -05:00
Raven Scott 028f2e22d9 remove redundant settings for backup/restore
CI / Build & Test (push) Successful in 2m46s
2026-02-28 17:50:13 -05:00
Raven Scott 98f75f01b3 allow upgrades, restore state on reinstall
CI / Build & Test (push) Successful in 2m53s
2026-02-28 17:43:26 -05:00
Raven Scott 5ee11896d7 Update docs about SSH
CI / Build & Test (push) Successful in 3m1s
2026-02-28 17:40:08 -05:00
Raven Scott bd2cccaa38 ssh hone
CI / Build & Test (push) Successful in 2m55s
2026-02-28 17:31:42 -05:00
Raven Scott 8ae54f7816 further tests
CI / Build & Test (push) Successful in 2m44s
2026-02-28 17:25:29 -05:00
Raven Scott d6e4991c4a ssh tests - multi auth
CI / Build & Test (push) Successful in 2m49s
2026-02-28 17:19:13 -05:00
Raven Scott 08eddc48ba ssh auth test
CI / Build & Test (push) Successful in 2m51s
2026-02-28 17:11:08 -05:00
Raven Scott 6612beffa1 SSH AUTH
CI / Build & Test (push) Successful in 3m2s
2026-02-28 16:49:53 -05:00
Raven Scott 326411f0fb docs: document Firefox AMO signing path for permanent installation in regular Firefox
CI / Build & Test (push) Successful in 2m53s
Made-with: Cursor
2026-02-28 00:01:02 -05:00
Raven Scott f8d36e16bb fix(firefox): update install instructions to use about:debugging for regular Firefox, xpi for Dev Edition/Nightly
CI / Build & Test (push) Has been cancelled
Made-with: Cursor
2026-02-27 23:59:57 -05:00
Raven Scott c2a077abe2 fix(firefox): add background.scripts for Firefox MV3 compatibility, remove missing dashboard.css from WAR, bump strict_min_version to 109
CI / Build & Test (push) Has been cancelled
Made-with: Cursor
2026-02-27 23:57:13 -05:00
Raven Scott bfd180822b Update docs formatting
CI / Build & Test (push) Successful in 4m43s
2026-02-27 21:20:39 -05:00
Raven Scott 64e1f3ed5e fix(installer): kill pre-extraction process directly so no orphan native host remains after install
CI / Build & Test (push) Successful in 4m45s
Made-with: Cursor
2026-02-27 21:10:34 -05:00
Raven Scott 631536e21b remove releases dir
CI / Build & Test (push) Successful in 2m42s
2026-02-27 21:04:26 -05:00
Raven Scott 04541eba9c Remove cursor rules
CI / Build & Test (push) Has been cancelled
2026-02-27 21:03:02 -05:00
Raven Scott 073182dddd chore: add cursor rule to suppress Made-with attribution in commits
CI / Build & Test (push) Has been cancelled
Made-with: Cursor
2026-02-27 21:01:13 -05:00
Raven Scott 49b69013b0 fix: forward rdpConnections (and sshConnections) through background.js getState response
CI / Build & Test (push) Successful in 2m31s
Made-with: Cursor
2026-02-27 20:37:25 -05:00
Raven Scott 62ab961714 docs: fully rewrite README and all docs to reflect current features and architecture
CI / Build & Test (push) Successful in 2m29s
Made-with: Cursor
2026-02-27 20:26:50 -05:00
Raven Scott 75def4eee6 fix(ca): verify fingerprint match when checking CA trust — detects stale CA after regeneration
CI / Build & Test (push) Successful in 2m34s
Made-with: Cursor
2026-02-27 20:10:15 -05:00
Raven Scott 78e6af39f5 fix: exit on EADDRINUSE instead of reusing port — prevents ghost instances with no tunnels
CI / Build & Test (push) Successful in 2m48s
Made-with: Cursor
2026-02-27 19:57:47 -05:00
Raven Scott b0b17e26df fix(ca): silent install to login keychain with SSL policy — no sudo or Terminal needed
CI / Build & Test (push) Successful in 2m29s
Made-with: Cursor
2026-02-27 19:51:01 -05:00
Raven Scott eecdc98cb2 fix(ca): use .command file opened in Terminal to get sudo password prompt
CI / Build & Test (push) Successful in 2m36s
Made-with: Cursor
2026-02-27 19:47:27 -05:00
Raven Scott 3dd88df61f fix(install): reliably wait for addon extraction before signing on macOS
CI / Build & Test (push) Successful in 2m34s
Made-with: Cursor
2026-02-27 19:40:44 -05:00