From 880fa0fc2db678974fc353b4114f6d70087b1f40 Mon Sep 17 00:00:00 2001 From: primozratej Date: Wed, 27 Nov 2024 20:12:48 +0100 Subject: [PATCH] Add latest userAgent and define applicationNameForUserAgent --- lib/app_flavored.dart | 4 ++-- lib/flavored/models/humhub.f.dart | 9 +++------ lib/flavored/web_view.f.dart | 4 ++-- lib/main.dart | 23 +---------------------- lib/models/global_package_info.dart | 9 +++++++++ lib/models/global_user_agent.dart | 18 ++++++++++++++++++ lib/models/hum_hub.dart | 19 +++++++++++++++++-- lib/util/auth_in_app_browser.dart | 16 +++++++--------- lib/util/file_handler.dart | 6 +++--- lib/util/notifications/channel.dart | 5 ++--- lib/util/providers.dart | 5 ++--- lib/util/web_view_global_controller.dart | 4 ++++ 12 files changed, 70 insertions(+), 52 deletions(-) create mode 100644 lib/models/global_package_info.dart create mode 100644 lib/models/global_user_agent.dart diff --git a/lib/app_flavored.dart b/lib/app_flavored.dart index de937a8..895a29f 100644 --- a/lib/app_flavored.dart +++ b/lib/app_flavored.dart @@ -50,6 +50,6 @@ class FlavoredAppState extends ConsumerState { } } -final humHubFProvider = FutureProvider((ref) { - return HumHubF.initialize(); +final humHubFProvider = Provider((ref) { + return HumHubF(); }); diff --git a/lib/flavored/models/humhub.f.dart b/lib/flavored/models/humhub.f.dart index e79a0d2..e1b993a 100644 --- a/lib/flavored/models/humhub.f.dart +++ b/lib/flavored/models/humhub.f.dart @@ -1,21 +1,19 @@ import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:humhub/flavored/models/manifest.f.dart'; +import 'package:humhub/models/global_package_info.dart'; import 'package:humhub/models/hum_hub.dart'; -import 'package:package_info_plus/package_info_plus.dart'; class HumHubF extends HumHub { @override ManifestF get manifest => ManifestF.fromEnv(); @override String get manifestUrl => dotenv.env['MANIFEST_URL']!; - final String bundleId; HumHubF({ bool isHideOpener = false, String? randomHash, String? appVersion, String? pushToken, - required this.bundleId, }) : super( isHideOpener: isHideOpener, randomHash: HumHub.generateHash(32), @@ -26,14 +24,13 @@ class HumHubF extends HumHub { Map get customHeaders => { 'x-humhub-app-token': randomHash!, 'x-humhub-app': appVersion ?? '1.0.0', - 'x-humhub-app-bundle-id': bundleId, + 'x-humhub-app-bundle-id': GlobalPackageInfo.info.packageName, 'x-humhub-app-ostate': isHideOpener ? '1' : '0', 'x-humhub-app-is-ios': isIos ? '1' : '0', 'x-humhub-app-is-android': isAndroid ? '1' : '0' }; static Future initialize() async { - PackageInfo packageInfo = await PackageInfo.fromPlatform(); - return HumHubF(bundleId: packageInfo.packageName); + return HumHubF(); } } diff --git a/lib/flavored/web_view.f.dart b/lib/flavored/web_view.f.dart index 8a1ed3c..f48ac4d 100644 --- a/lib/flavored/web_view.f.dart +++ b/lib/flavored/web_view.f.dart @@ -42,9 +42,9 @@ class FlavoredWebViewState extends ConsumerState { @override void initState() { - instance = ref.read(humHubFProvider).value!; + instance = ref.read(humHubFProvider); _authBrowser = AuthInAppBrowser( - manifest: ref.read(humHubFProvider).value!.manifest, + manifest: ref.read(humHubFProvider).manifest, concludeAuth: (URLRequest request) { _concludeAuth(request); }, diff --git a/lib/main.dart b/lib/main.dart index 446e52d..6c1e91f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,29 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:humhub/models/hum_hub.dart'; -import 'package:humhub/util/log.dart'; -import 'package:humhub/util/permission_handler.dart'; -import 'package:humhub/util/storage_service.dart'; -import 'package:loggy/loggy.dart'; -import 'package:package_info_plus/package_info_plus.dart'; -import 'package:permission_handler/permission_handler.dart'; main() async { - Loggy.initLoggy( - logPrinter: const GlobalLog(), - ); - WidgetsFlutterBinding.ensureInitialized(); - await SecureStorageService.clearSecureStorageOnReinstall(); - PackageInfo packageInfo = await PackageInfo.fromPlatform(); - final app = await HumHub.app(packageInfo.packageName); - await PermissionHandler.requestPermissions( - [ - Permission.notification, - Permission.camera, - Permission.microphone, - Permission.storage, - Permission.photos - ], - ); + final app = await HumHub.init(); runApp(ProviderScope(child: app)); } diff --git a/lib/models/global_package_info.dart b/lib/models/global_package_info.dart new file mode 100644 index 0000000..ae6737a --- /dev/null +++ b/lib/models/global_package_info.dart @@ -0,0 +1,9 @@ +import 'package:package_info_plus/package_info_plus.dart'; + +class GlobalPackageInfo { + static late PackageInfo info; + + static Future init() async { + info = await PackageInfo.fromPlatform(); + } +} diff --git a/lib/models/global_user_agent.dart b/lib/models/global_user_agent.dart new file mode 100644 index 0000000..539ee89 --- /dev/null +++ b/lib/models/global_user_agent.dart @@ -0,0 +1,18 @@ +import 'dart:io'; + +class GlobalUserAgent { + static const String _ios = + "Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/131.0.6778.73 Mobile/15E148 Safari/604.1"; + static const String _android = + "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.6778.81 Mobile Safari/537.36"; + + static String get value { + if (Platform.isIOS) { + return _ios; + } else if (Platform.isAndroid) { + return _android; + } else { + return "Unknown User Agent"; // Fallback for unsupported platforms + } + } +} diff --git a/lib/models/hum_hub.dart b/lib/models/hum_hub.dart index 154789c..025f14a 100644 --- a/lib/models/hum_hub.dart +++ b/lib/models/hum_hub.dart @@ -4,8 +4,14 @@ import 'package:flutter/material.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:humhub/app_flavored.dart'; import 'package:humhub/app_opener.dart'; +import 'package:humhub/models/global_package_info.dart'; import 'package:humhub/models/manifest.dart'; +import 'package:humhub/util/log.dart'; import 'package:humhub/util/openers/universal_opener_controller.dart'; +import 'package:humhub/util/permission_handler.dart'; +import 'package:humhub/util/storage_service.dart'; +import 'package:loggy/loggy.dart'; +import 'package:permission_handler/permission_handler.dart'; enum RedirectAction { opener, webView } @@ -73,8 +79,17 @@ class HumHub { 'x-humhub-app-is-android': isAndroid ? '1' : '0' }; - static Future app(String bundleId) async { - switch (bundleId) { + static Future init() async { + Loggy.initLoggy( + logPrinter: const GlobalLog(), + ); + WidgetsFlutterBinding.ensureInitialized(); + await SecureStorageService.clearSecureStorageOnReinstall(); + await GlobalPackageInfo.init(); + await PermissionHandler.requestPermissions( + [Permission.notification, Permission.camera, Permission.microphone, Permission.storage, Permission.photos], + ); + switch (GlobalPackageInfo.info.packageName) { case 'com.humhub.app': return const OpenerApp(); default: diff --git a/lib/util/auth_in_app_browser.dart b/lib/util/auth_in_app_browser.dart index f532e2a..675266d 100644 --- a/lib/util/auth_in_app_browser.dart +++ b/lib/util/auth_in_app_browser.dart @@ -1,18 +1,16 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; +import 'package:humhub/models/global_package_info.dart'; +import 'package:humhub/models/global_user_agent.dart'; import 'package:humhub/models/manifest.dart'; import 'package:loggy/loggy.dart'; - import 'extensions.dart'; class AuthInAppBrowser extends InAppBrowser { final Manifest manifest; late InAppBrowserClassSettings settings; final Function concludeAuth; - static const String userAgent = - 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'; - AuthInAppBrowser({required this.manifest, required this.concludeAuth}) { settings = InAppBrowserClassSettings( browserSettings: InAppBrowserSettings( @@ -23,10 +21,10 @@ class AuthInAppBrowser extends InAppBrowser { presentationStyle: ModalPresentationStyle.PAGE_SHEET, ), webViewSettings: InAppWebViewSettings( - javaScriptEnabled: true, - useShouldOverrideUrlLoading: true, - userAgent: userAgent, - ), + javaScriptEnabled: true, + useShouldOverrideUrlLoading: true, + userAgent: GlobalUserAgent.value, + applicationNameForUserAgent: GlobalPackageInfo.info.appName), ); } @@ -42,6 +40,6 @@ class AuthInAppBrowser extends InAppBrowser { } launchUrl(URLRequest urlRequest) { - openUrlRequest(urlRequest: urlRequest, settings: settings); + openUrlRequest(urlRequest: urlRequest, /*options: options,*/ settings: settings); } } diff --git a/lib/util/file_handler.dart b/lib/util/file_handler.dart index cb39be8..2f9e071 100644 --- a/lib/util/file_handler.dart +++ b/lib/util/file_handler.dart @@ -2,8 +2,8 @@ import 'dart:convert'; import 'dart:io'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; +import 'package:humhub/models/global_package_info.dart'; import 'package:humhub/util/permission_handler.dart'; -import 'package:package_info_plus/package_info_plus.dart'; import 'package:path_provider/path_provider.dart'; class FileHandler { @@ -143,6 +143,7 @@ class FileHandler { } } + // ignore: unused_element Future<(File file, String filename)> _saveFile(String base64Data) async { final decodedBytes = base64Decode(base64Data.split(",").last); @@ -160,8 +161,7 @@ class FileHandler { } Future _generateFilename() async { - PackageInfo packageInfo = await PackageInfo.fromPlatform(); - String appName = packageInfo.appName.replaceAll(' ', '_'); + String appName = GlobalPackageInfo.info.appName.replaceAll(' ', '_'); return '${appName}file'; } diff --git a/lib/util/notifications/channel.dart b/lib/util/notifications/channel.dart index 430bab6..fa73c80 100644 --- a/lib/util/notifications/channel.dart +++ b/lib/util/notifications/channel.dart @@ -1,10 +1,10 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:humhub/flavored/util/notifications/channel.f.dart'; +import 'package:humhub/models/global_package_info.dart'; import 'package:humhub/pages/web_view.dart'; import 'package:humhub/util/const.dart'; import 'package:humhub/util/init_from_url.dart'; import 'package:humhub/util/openers/universal_opener_controller.dart'; -import 'package:package_info_plus/package_info_plus.dart'; class NotificationChannel { final String id; @@ -43,8 +43,7 @@ class NotificationChannel { } static Future getChannel() async { - PackageInfo packageInfo = await PackageInfo.fromPlatform(); // Replace this with the actual condition logic - switch (packageInfo.packageName) { + switch (GlobalPackageInfo.info.packageName) { case 'com.humhub.app': return const NotificationChannel(); default: diff --git a/lib/util/providers.dart b/lib/util/providers.dart index 3bffdea..a9500e6 100644 --- a/lib/util/providers.dart +++ b/lib/util/providers.dart @@ -2,9 +2,9 @@ import 'dart:convert'; import 'package:flutter/cupertino.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:humhub/models/global_package_info.dart'; import 'package:humhub/models/hum_hub.dart'; import 'package:humhub/models/manifest.dart'; -import 'package:package_info_plus/package_info_plus.dart'; import 'const.dart'; @@ -35,11 +35,10 @@ class HumHubNotifier extends ChangeNotifier { } Future setInstance(HumHub instance) async { - PackageInfo packageInfo = await PackageInfo.fromPlatform(); _humHubInstance.manifest = instance.manifest; _humHubInstance.isHideOpener = instance.isHideOpener; _humHubInstance.randomHash = instance.randomHash; - _humHubInstance.appVersion = packageInfo.version; + _humHubInstance.appVersion = GlobalPackageInfo.info.version; _humHubInstance.manifestUrl = instance.manifestUrl; _updateSafeStorage(); notifyListeners(); diff --git a/lib/util/web_view_global_controller.dart b/lib/util/web_view_global_controller.dart index 6865d64..8f07280 100644 --- a/lib/util/web_view_global_controller.dart +++ b/lib/util/web_view_global_controller.dart @@ -1,6 +1,8 @@ import 'dart:convert'; import 'package:flutter/services.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; +import 'package:humhub/models/global_package_info.dart'; +import 'package:humhub/models/global_user_agent.dart'; import 'package:humhub/models/manifest.dart'; class WebViewGlobalController { @@ -138,6 +140,8 @@ class WebViewGlobalController { allowsInlineMediaPlayback: true, mediaPlaybackRequiresUserGesture: false, supportZoom: zoom ? true : false, + userAgent: GlobalUserAgent.value, + applicationNameForUserAgent: GlobalPackageInfo.info.appName, ); } }