v2.0.7: security hardening, config sync, cleanup

- 6 new security audits (technical_debt_8 through 12)
- SNI rotation pool per session (5 sites)
- vless_ip pinned to hardcoded server IP
- TLS cert validation restored (domain-based)
- Swarm monitoring removed from public domain
- Xray routing blocks abuse ports (SMTP, NetBIOS, SSDP)
- flow: xtls-rprx-vision in add_vless_client
- TimerBox shows Connecting/Syncing spinner
- Outbound port blocking in Xray config
- Cleaned up comments, synced config templates
This commit is contained in:
esefxdz committed 2026-07-29 23:43:47 +03:00
1 parent f01a610182
commit f8abda9323
7 files changed
+109 -86

No files matched your search

+11 -27
View File
@@ -168,39 +168,23 @@ class Updater {
}
static Future<InstallSource> _detectInstallerSource() async {
// ╔══════════════════════════════════════════════════════════════════════╗
// ║ TODO — BEFORE PLAY STORE RELEASE ║
// ║ ║
// ║ Wire this method channel in MainActivity.kt so Play Store users ║
// ║ get redirected to the Play Store listing instead of GitHub. ║
// ║ ║
// ║ Kotlin (android/app/src/main/kotlin/.../MainActivity.kt): ║
// ║ ║
// ║ override fun configureFlutterEngine(flutterEngine: FlutterEngine) { ║
// ║ super.configureFlutterEngine(flutterEngine) ║
// ║ MethodChannel( ║
// ║ flutterEngine.dartExecutor.binaryMessenger, ║
// ║ "com.revoltvpn.app/installer" ║
// ║ ).setMethodCallHandler { call, result -> ║
// ║ if (call.method == "getInstallerPackage") { ║
// ║ val installer = packageManager ║
// ║ .getInstallerPackageName(packageName) ║
// ║ result.success(installer) ║
// ║ } else { result.notImplemented() } ║
// ║ } ║
// ║ } ║
// ║ ║
// ║ Then uncomment the 7 lines below this block. ║
// ╚══════════════════════════════════════════════════════════════════════╝
// ── Uncomment after wiring MainActivity.kt ──────────────────────────
// Install source detection is stubbed until the native method channel
// is wired in MainActivity.kt. Without it, all users default to the
// GitHub update path — which works, but Play Store users should ideally
// be sent to the Play Store listing instead.
//
// To wire: add a MethodChannel named "com.revoltvpn.app/installer" in
// MainActivity.kt that calls PackageManager.getInstallerPackageName().
// If it returns "com.android.vending", return InstallSource.playStore.
// Then uncomment the 7 lines below and delete the fallback return.
//
// const channel = MethodChannel('com.revoltvpn.app/installer');
// final installer = await channel.invokeMethod<String>('getInstallerPackage');
// if (installer == 'com.android.vending') {
// return InstallSource.playStore;
// }
// return InstallSource.sideload;
// ─────────────────────────────────────────────────────────────────────
return InstallSource.sideload; // TODO: remove this line after uncommenting above
return InstallSource.sideload; // Stubbed — see above.
}
/// Compares two semver strings. Positive = a > b, negative = a < b, 0 = equal.