esefxdzandClaude Opus 5 e67f0b93ee feat(session): hand the session back when the user disconnects
The client never called /session/stop - the string appears nowhere in
lib/ or local_packages/, on this branch or on main - while the server has
implemented the route all along (hivemind/api.py:237) and AGENTS.md rule
33 documents its ordering. Across a full device test session, two user
disconnects and several expiries, the control plane logged zero calls.

So a disconnect left the VLESS client provisioned in the Reality inbound
and the session dict in memory and sessions.json until its window ran
out. Anyone holding that UUID could keep tunnelling for the remainder.
Users were not locked out of their quota - _handle_main replaces the
session with a fresh full-length one on the next connect - so this is
hygiene rather than a user-facing bug.

Only SessionTimer.disconnect() calls it, which is reached only from the
connect button. Expiry, the hard cap and a server-ended session are
already gone server-side, and the route takes nothing but a device_id as
proof of ownership, so no error path may reach it. Unawaited and capped
at 3 s, so an unreachable API cannot delay the teardown, and every
failure is swallowed: the session expires on its own regardless.

Verified against a mock control plane:

  user disconnect  POST /api/session/stop -> session removed
  expiry           no call; alert still posted

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-10-17 16:31:51 +03:00
2026-09-06 13:07:37 +03:00
2026-07-28 20:56:08 +03:00
2026-07-28 21:37:59 +03:00
2026-10-08 13:20:52 +03:00

ReVoltVPN banner

ReVoltVPN

A free VPN app for Android. Open-source client, transparent infrastructure. Watch an ad, get 2 hours of full-speed traffic — no accounts, no logs, no subscriptions.


How it works

  1. Watch a short rewarded ad
  2. Server creates a temporary VLESS session (2 hours / 10 GB)
  3. Your traffic routes through a single server in Finland at full speed
  4. When time or data runs out, session ends — watch another ad to continue
  5. No throttling, no slow lane, no mid-session punishment

No email. No password. No payment. The ad pays for the server.


Protocol

  • Transport — VLESS over XHTTP (HTTP/2 multiplexed, path-hidden behind /revolt)
  • Obfuscation — Xray Reality spoofs a real website's TLS. To any DPI box, your tunnel looks like a browser visiting that website
  • Encryption — TLS 1.3 with borrowed certificate (Reality). No certbot, no domain ownership required
  • API — Standard HTTPS to a separate domain. Tunnel destination is IP-pinned — domain compromise is DoS only

Stack

Layer Technology
App Flutter (Android)
VPN VLESS + Xray Reality + XHTTP
Backend Python Flask ("Hivemind") — session management, quotas, stats
Ads Google AdMob rewarded, verified server-side
Server Debian, single Hetzner box in Finland

Limitations

  • One server, one location (Finland)
  • 2 vCPU / 4 GB RAM — not built for thousands of concurrent users
  • Android only

Privacy

Your traffic routes through Finland. We don't log it, inspect it, or sell it. Hivemind tracks only session liveness and byte counters for quota enforcement — no packet contents, no destination IPs, no DNS queries.

Full privacy policy: PRIVACY_POLICY.md


ReVoltVPN is not affiliated with any VPN company.

S
Description
A simple vless client built with flutter
Readme GPL-3.0
12 MiB
0 Stars 1 Watchers 0 Forks
3.3.8
Latest
2026-10-17 18:55:59 +03:00
Languages
Dart 59.5%
Kotlin 38.2%
Shell 2.3%