// Benchtalks PROTECC v1.3.0
Benchtalks Changelog
[1.3.0] — 2026-03-09 In this release, IP Protection is added along with banning. Fixed some implementation issues and built some safeguards with context on the privacy and regulation of the platform.
Added
- IP privacy — client IPs captured at WebSocket connection time via X-Forwarded-For (falling back to r.RemoteAddr), held in memory on the Client struct only; never written to logs or disk
- Room admin banning — ban button on each message sends a client ID to the server; server looks up the IP internally and blocks it from rejoining; banned clients receive a reason before disconnection
- safeClose / safeSend / isClosed — panic-safe channel operations on Client; all bare close(client.send) calls replaced throughout the codebase
- bannedIPs on Hub — per-room IP ban sets with a dedicated mutex; lazy- initialised, same pattern as pairingMu and peersMu
- Terms of Service — 15 sections covering eligibility, prohibited uses, E2EE content responsibility, ephemeral architecture, liability, and law enforcement cooperation; served at /terms.html
- Privacy Policy — 14 sections including a full data inventory table, IP handling disclosure, GDPR rights, and Hetzner as the sole third party; served at /privacy.html
- Footer links to /terms.html and /privacy.html on all three public-facing pages (index.html, room.html, status.html)
Fixed
- Panic on closed channel — ban flow, readPump defer, and Broadcast could race to close or send on the same client channel; resolved by closeMu mutex and closed bool flag on Client
- Banned client seeing room interface briefly — handleSelfJoined() moved from ws.onopen into the welcome case so the interface only appears after server confirmation
- ws.onerror overwriting ban message — onerror now checks whether an error is already displayed before showing a connection error
- User count showing 0 after ban flow refactor — stale isConnected guard removed from join case
- join case continuing after a ban — isClosed() check added immediately after JoinRoom returns