Commit graph

20 commits

Author SHA1 Message Date
ancsemi
45ddb27d84 v2.9.5: License changed to AGPL-3.0
- Replaced custom MIT-NC license with GNU Affero General Public License v3
- Haven is now truly open source under an OSI-approved license
- AGPL copyleft ensures forks deployed as network services must release source
- Updated all license references across README, package.json, docs, website, and TOS
- Fixed bot/webhook pinned messages showing raw username instead of [BOT] prefix
2026-04-06 22:21:47 -04:00
ancsemi
b1fa8c5aac Follow-up: make voice panel hiding and sidebar controls opt-in
- Voice panel visible on desktop by default (add 'Hide Voice Panel' setting)
- Mute/deafen buttons in voice panel header by default (add 'Sidebar Voice Controls' setting)
- Add header mute/deafen buttons back alongside sidebar buttons
- Sync both button sets via _syncMuteDeafenButtons helper
- Restore _renderVoiceUsers call in voice-users-update (respects setting)
- Restore voice-user-item.talking CSS + talking indicators for voice panel
- Deduplicate muted/deafened strikethrough CSS into shared rules
- Remove broken tlsClientError redirect (localAddress != hostname)
- Keep all PR #188 features: mute/deafen sync, graceful shutdown, deafen-implies-mute
2026-03-21 20:07:59 -04:00
anmire
544824d9a7
feat: One-click installer, FCM mobile push notifications, push relay (#109)
Contributed by @anmire.

- One-Click Installer: Windows (.bat bootstrap + PowerShell WPF wizard), Linux/macOS (bash with package-manager auto-detect), web-based setup UI (installer/server.js + installer/index.html), Inno Setup script for Windows .exe
- FCM Mobile Push Notifications: src/fcm.js module supporting direct mode (Firebase service account), custom relay mode, or automatic Haven Global Relay fallback. No new runtime dependencies (uses existing jsonwebtoken). Hooks into sendPushNotifications alongside existing web-push.
- Push Relay: haven-push-relay/ — standalone Express relay server + Firebase Cloud Function for self-hosted relay deployments
2026-03-01 21:27:58 -05:00
ancsemi
884fbb58fd Add TOTP two-factor authentication (Issue #58)
- New dependencies: otpauth, qrcode
- Database migrations: totp_secret, totp_enabled columns + totp_backup_codes table
- Server endpoints: /totp/setup, /totp/verify-setup, /totp/validate, /totp/disable, /totp/status, /totp/regenerate-backup
- Modified login flow: returns challengeToken when TOTP enabled, validated in second step
- Auth page: TOTP code input form with backup code toggle
- App settings: Two-Factor section with enable/disable, QR setup, backup code management
- Backup codes: 8 one-time-use codes (XXXX-XXXX format), SHA-256 hashed in DB
- Admin recovery intentionally bypasses TOTP as last-resort access
2026-03-01 01:43:05 -05:00
ancsemi
674fc26671 v2.3.4 — Fix duplicate effect sliders, hover popup close, channel roles in profile, donor tier styling, voice right-click 2026-02-26 14:36:46 -05:00
ancsemi
417700d3e9 release: v2.3.2 sound manager, kick revoke, role auto-assign fix, font size fixes 2026-02-25 15:52:30 -05:00
ancsemi
25e2fe06c7 fix: replace haven-app.com with ancsemi.github.io/Haven, remove bad CNAME, fix desktop promo links
- Replace all haven-app.com references with https://ancsemi.github.io/Haven/
- Delete website/CNAME (domain not owned)
- Fix desktop promo popup and banner links to point to website download section
- Sync docs/ from website/
- Include package-lock.json version bump to 2.3.0
2026-02-24 19:20:25 -05:00
ancsemi
42e6fc6259 v2.3.0 Webcam video, plugin/theme system, font size, channel invites, admin members panel, desktop app beta, session invalidation, security fixes 2026-02-24 18:54:00 -05:00
ancsemi
a3f75d3720 v2.2.5 Remove desktop app, security fixes, bug fixes
- Remove desktop/ directory and all desktop-grafted code from server
- Fix missing express-rate-limit import (server crash on startup)
- Validate webhook avatar_url protocol (block data: URI tracking)
- FORCE_HTTP support for reverse proxies (#48)
- Auto-assign default roles (#14)
- SSRF bypass prevention in link previews
- JWT admin claim verification from DB (13 endpoints)
- Path traversal fix in avatar uploads
- mark-read membership check
- transfer-admin race condition mutex
- Server-side sanitizeText() defense-in-depth
- broadcastChannelLists debounce (DoS fix)
- reorder-channels capped at 500
- Role color XSS prevention (server + client)
- Screen share quality controls, black screen fixes
- SSL setup script, cross-platform gameplan doc
- Website & docs updated to v2.2.5
2026-02-23 21:52:38 -05:00
ancsemi
1761b6b98d v2.2.4 security hotfix
Security:
- Fix SSRF bypass in link previews (manual redirect following with re-validation)
- Fix JWT admin claim trust (all 13 REST endpoints verify from DB)
- Fix path traversal in avatar/icon uploads (strict regex validation)
- Fix mark-read missing channel membership check
- Fix transfer-admin race condition (mutex + post-await DB re-check)
- Add server-side content sanitization (strip dangerous HTML tags/attrs)
- Patch all dependency vulnerabilities (0 remaining)

Fixed:
- Debounce broadcastChannelLists to prevent O(N) DoS
- Cap reorder-channels array to 500 items

Added:
- Desktop Electron app (initial scaffolding)
2026-02-22 09:55:49 -05:00
ancsemi
a6c43159e0 chore: bump to v2.2.2, fix Docker ARM build, update website and changelog 2026-02-21 13:30:54 -05:00
ancsemi
488e8ce396 fix: setup wizard step 2 now auto-advances after channel creation (#42) 2026-02-19 21:32:22 -05:00
ancsemi
61a237f521 feat: configurable TURN server support for voice/screen sharing over internet
Adds TURN_URL, TURN_SECRET, TURN_USERNAME, TURN_PASSWORD env vars.
New /api/ice-servers endpoint serves STUN + TURN config to authenticated clients.
Supports both coturn shared-secret (time-limited credentials) and static auth.
Client fetches ICE config on init and refreshes before each voice join.

Closes #37
2026-02-19 10:38:40 -05:00
ancsemi
05ee43c6d0 fix: tunnel UX (button replaces checkbox), infinite scroll pagination, sidebar organize buttons
- Tunnel: replace checkbox with Start/Stop button, remove auto-start on boot, add polling for starting state
- Messages: add infinite scroll to load older history on scroll-to-top (server already supported pagination)
- Sidebar: fix organize buttons  add border:none to .icon-btn, increase size/opacity, add z-index above Matrix overlay, add hover effect
2026-02-18 22:16:17 -05:00
ancsemi
0e0957c95c v2.0.0 Discord history import, E2E password-change fix, scroll fix
Added:
- Discord history import  Direct Connect (paste token, pick server, select channels)
- Discord history import  File upload (DiscordChatExporter JSON/ZIP)
- Tabbed import modal (Upload File | Connect to Discord)
- Full server structure import (text, announcement, forum, media, threads)
- Forum tag resolution and display
- Discord avatar preservation (webhook_avatar column)
- Channel type indicators in import picker

Fixed:
- E2E key loss on password change (re-wraps key with new password)
- Scroll-to-bottom loop when images load while scrolled up
- ARM64 Docker support (#34)

Changed:
- Website, README, GUIDE updated with Discord import docs
- Version bumped to 2.0.0
2026-02-18 19:53:58 -05:00
ancsemi
9d43d98aa3 Fix E2E: prevent silent key regeneration, lock icon to right, password recovery
- e2e.js: Don't generate new keys when server has existing encrypted key
  but no password is available (token auto-login). Previously this silently
  overwrote the server's public key, making all old messages unreadable.
- e2e.js: Added recoverWithPassword() for post-login key recovery.
- app.js: Show password recovery banner when E2E needs password unlock.
- app.js: Move lock icon from inside message-content to absolute-right
  position in compact messages (was appearing LEFT of text).
- app.js: Remove redundant lock emoji from decrypt fallback text (e2eTag
  span handles the icon display separately).
- style.css: .message-compact > .e2e-tag positioned absolute right.
2026-02-17 20:07:04 -05:00
ancsemi
ecbdf13326 v1.9.0 setup wizard, one-click launcher, E2E fix, reaction improvements
Features:
- First-time admin setup wizard (4-step guided onboarding)
- Port reachability check API
- One-click Windows launcher with Node.js auto-install
- Full emoji reaction picker (searchable, all categories)
- Unified upload button with input actions toolbar
- Node.js version guard (pin to v22 LTS)

Fixes:
- E2E encryption permanent decrypt failure (stale key cache)
- DM messages pushed to right side (lock icon layout)
- Reactions inconsistent position + lost on promotion
- npm install killing batch launcher (missing call keyword)
- Node v24 build failures (no prebuilt binaries)
- dotenv MODULE_NOT_FOUND on fresh install
2026-02-17 19:40:22 -05:00
ancsemi
d275c6bcef Integrate PR #17: Mod Mode, tunnel support, PWA, push & UX improvements
Cherry-picked and cleaned up changes from anmire's PR #17
(amni-modmode-tunnel-fixes). PR had merge conflicts so changes
were manually integrated with quality improvements.

New features:
- Mod Mode: drag-and-drop sidebar section reordering + panel
  snap zones (left/right/top/bottom) for layout customization
- Tunnel support: localtunnel and cloudflared providers with
  admin toggle, auto-start on boot, and status display
- PWA manifest + SVG icons for installability and iOS push
- Mobile settings button (gear icon in bottom bar on <=900px)

Push notification improvements:
- Visibility-based targeting: only push to users with tab hidden
- iOS standalone detection with Add-to-Home-Screen guidance
- Re-subscribe existing push subscriptions on every page load
- Early 'denied' permission detection to avoid failed attempts
- Browser-specific error modal with copyable Brave settings URL
- isSecureContext check (cleaner than manual protocol matching)

Code quality fixes vs original PR:
- Removed aggressive SW precaching (would serve stale assets)
- Kept all code comments (PR stripped many)
- Removed always-visible mod-mode wrench from bottom bar (admin
  settings panel only)
- Kept VAPID email as mailto: format (not GitHub URL)
- Delta-based sidebar resize (works with mod-mode repositioning)
- Tunnel settings use immediate sync (not Save/Cancel flow)

Files added: icon-192.svg, icon-512.svg, manifest.webmanifest,
  src/tunnel.js, public/js/modmode.js
Files modified: app.html, index.html, sw.js, server.js,
  socketHandlers.js, app.js, style.css, package.json
2026-02-16 00:34:50 -05:00
ancsemi
11c179a1aa v1.6.0 Auto-update checker, mobile UX overhaul, message grouping fix
Features:
- Automatic update detection: checks GitHub releases and shows a pulsing 'Update Available' pill in the header with one-click download
- Mobile input area: media buttons (image, file, emoji, GIF) now sit in their own row above the textbox so the input never gets cramped
- Mobile message actions: long-press (500ms) to show toolbar instead of tap, preventing accidental pin/edit/delete. Tap anywhere to dismiss
- Haptic feedback on mobile long-press (vibration API)

Bug fixes:
- Deleting the root message of a group no longer orphans subsequent compact messages  the next message is promoted to full format with avatar and header
- Invisible status: server now sends per-socket customized user lists so invisible users appear offline to others
- DM section badge: now properly clears when all DMs are read
- Emoji search: added ~200 emoji keyword mappings for accurate search results
- Emoji picker: fixed scroll flicker caused by overflow-y:auto toggling scrollbar
- Sound upload: fixed bug where response wrapper broke custom sound loading
- Channel rename: DMs no longer show 'Unknown' after renaming channels or managing sub-channels

Other:
- Idle timer extended from 5 to 10 minutes
- Sub-channel styling: tighter spacing, deeper indent, smaller font
- /api/version endpoint for programmatic version queries
- Scramble effect: separated matrix rain from matrix scan lines into independent toggleable effects
2026-02-14 23:23:31 -05:00
ancsemi
b7b8b1bb86 v1.0.0 Haven public release 2026-02-11 00:15:56 -05:00