From d681fb05eef9fdabd59ceb55b997861ef1616d18 Mon Sep 17 00:00:00 2001
From: vjrj <vjrj@comunes.org>
Date: Wed, 2 Aug 2023 22:36:29 +0200
Subject: [PATCH] Fix for VPN issue #45

---
 .../connectivity_widget_wrapper_wrapper.dart  | 37 ++++++++++++++++---
 pubspec.lock                                  |  8 ++++
 pubspec.yaml                                  |  1 +
 3 files changed, 40 insertions(+), 6 deletions(-)

diff --git a/lib/ui/widgets/connectivity_widget_wrapper_wrapper.dart b/lib/ui/widgets/connectivity_widget_wrapper_wrapper.dart
index 3d579943..b260027f 100644
--- a/lib/ui/widgets/connectivity_widget_wrapper_wrapper.dart
+++ b/lib/ui/widgets/connectivity_widget_wrapper_wrapper.dart
@@ -1,8 +1,9 @@
 import 'dart:io';
 
+import 'package:check_vpn_connection/check_vpn_connection.dart';
 import 'package:connectivity_wrapper/connectivity_wrapper.dart';
 import 'package:flutter/foundation.dart';
-import 'package:flutter/widgets.dart';
+import 'package:flutter/material.dart';
 
 import '../ui_helpers.dart';
 
@@ -20,14 +21,14 @@ class ConnectivityWidgetWrapperWrapper extends ConnectivityWidgetWrapper {
         ? <AddressCheckOptions>[]
         : List<AddressCheckOptions>.unmodifiable(
             <AddressCheckOptions>[
-              AddressCheckOptions(
+              /* AddressCheckOptions(
                 hostname: 'duniter.org',
                 port: 443,
               ),
               AddressCheckOptions(
                 hostname: 'moneda-libre.org',
                 port: 443,
-              ),
+              ), */
               // Cloudflare
               AddressCheckOptions(
                 address: InternetAddress(
@@ -88,9 +89,33 @@ class ConnectivityWidgetWrapperWrapper extends ConnectivityWidgetWrapper {
           );
   }
 
+  @override
+  Widget build(BuildContext context) {
+    return FutureBuilder<bool>(
+        future: CheckVpnConnection.isVpnActive(),
+        builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
+          if (snapshot.hasData && snapshot.data != null) {
+            final bool isVpnActive = snapshot.data!;
+            if (isVpnActive) {
+              return child;
+            } else {
+              return super.build(context);
+            }
+          } else {
+            return super.build(context);
+          }
+        });
+  }
+
   // This package does not work in IOS so we just return true
   // Also does not detect well in web production mode
-  static Future<bool> get isConnected => kIsWeb || isIOS
-      ? Future<bool>.value(true)
-      : ConnectivityWrapper.instance.isConnected;
+  static Future<bool> get isConnected async {
+    final bool vpn = await CheckVpnConnection.isVpnActive();
+    if (vpn) {
+      return true;
+    }
+    return kIsWeb || isIOS
+        ? Future<bool>.value(true)
+        : ConnectivityWrapper.instance.isConnected;
+  }
 }
diff --git a/pubspec.lock b/pubspec.lock
index b3e393b0..4eafcbb6 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -201,6 +201,14 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "1.3.1"
+  check_vpn_connection:
+    dependency: "direct main"
+    description:
+      name: check_vpn_connection
+      sha256: "68029b66124eb5de2bc877f516ad9773f8b57e0a9ccf5c64609bb7cb8f14f3a0"
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.0.2"
   checked_yaml:
     dependency: transitive
     description:
diff --git a/pubspec.yaml b/pubspec.yaml
index d2b3cc69..946074f3 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -93,6 +93,7 @@ dependencies:
   uni_links: ^0.5.1
   feedback: ^2.6.0
   sentry_dart_plugin: ^1.5.0
+  check_vpn_connection: ^0.0.2
 
 dev_dependencies:
   flutter_test:
-- 
GitLab