diff --git a/lib/pages/device_settings/device_settings.dart b/lib/pages/device_settings/device_settings.dart index 3ad1266c8..3e9f4d323 100644 --- a/lib/pages/device_settings/device_settings.dart +++ b/lib/pages/device_settings/device_settings.dart @@ -1,15 +1,14 @@ -import 'package:flutter/material.dart'; - import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:collection/collection.dart' show IterableExtension; +import 'package:fluffychat/pages/device_settings/device_settings_view.dart'; +import 'package:fluffychat/pages/key_verification/key_verification_dialog.dart'; +import 'package:fluffychat/utils/localized_exception_extension.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/encryption/utils/key_verification.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pages/device_settings/device_settings_view.dart'; -import 'package:fluffychat/pages/key_verification/key_verification_dialog.dart'; -import 'package:fluffychat/utils/localized_exception_extension.dart'; import '../../widgets/matrix.dart'; class DevicesSettings extends StatefulWidget { @@ -34,9 +33,6 @@ class DevicesSettingsController extends State { void removeDevicesAction(List devices) async { if (await showOkCancelAlertDialog( - // #Pangea - useRootNavigator: false, - // Pangea# context: context, title: L10n.of(context)!.areYouSure, okLabel: L10n.of(context)!.yes, @@ -72,9 +68,6 @@ class DevicesSettingsController extends State { void renameDeviceAction(Device device) async { final displayName = await showTextInputDialog( - // #Pangea - useRootNavigator: false, - // Pangea# context: context, title: L10n.of(context)!.changeDeviceName, okLabel: L10n.of(context)!.ok, @@ -98,7 +91,7 @@ class DevicesSettingsController extends State { } void verifyDeviceAction(Device device) async { - final req = Matrix.of(context) + final req = await Matrix.of(context) .client .userDeviceKeys[Matrix.of(context).client.userID!]! .deviceKeys[device.deviceId]! diff --git a/lib/pages/homeserver_picker/homeserver_picker.dart b/lib/pages/homeserver_picker/homeserver_picker.dart index 7c1e82ccf..ca8ac5c1a 100644 --- a/lib/pages/homeserver_picker/homeserver_picker.dart +++ b/lib/pages/homeserver_picker/homeserver_picker.dart @@ -1,11 +1,20 @@ import 'dart:async'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:collection/collection.dart'; import 'package:file_picker/file_picker.dart'; +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/pages/homeserver_picker/homeserver_picker_view.dart'; +import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/utils/firebase_analytics.dart'; +import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:fluffychat/utils/tor_stub.dart' + if (dart.library.html) 'package:tor_detector_web/tor_detector_web.dart'; +import 'package:fluffychat/widgets/app_lock.dart'; +import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_web_auth_2/flutter_web_auth_2.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; @@ -14,18 +23,8 @@ import 'package:hive_flutter/hive_flutter.dart'; import 'package:matrix/matrix.dart'; import 'package:universal_html/html.dart' as html; -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pages/homeserver_picker/homeserver_picker_view.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/utils/firebase_analytics.dart'; -import 'package:fluffychat/utils/platform_infos.dart'; -import 'package:fluffychat/widgets/app_lock.dart'; -import 'package:fluffychat/widgets/matrix.dart'; import '../../utils/localized_exception_extension.dart'; -import 'package:fluffychat/utils/tor_stub.dart' - if (dart.library.html) 'package:tor_detector_web/tor_detector_web.dart'; - class HomeserverPicker extends StatefulWidget { const HomeserverPicker({super.key}); @@ -131,34 +130,67 @@ class HomeserverPickerController extends State { ? '${html.window.origin!}/auth.html' : '${AppConfig.appOpenUrlScheme.toLowerCase()}://login'; //Pangea# - final url = - '${Matrix.of(context).getLoginClient().homeserver?.toString()}/_matrix/client/r0/login/sso/redirect/${Uri.encodeComponent(id)}?redirectUrl=${Uri.encodeQueryComponent(redirectUrl)}'; + final url = Matrix.of(context).getLoginClient().homeserver!.replace( + path: '/_matrix/client/v3/login/sso/redirect${id == null ? '' : '/$id'}', + queryParameters: {'redirectUrl': redirectUrl}, + ); + final urlScheme = isDefaultPlatform ? Uri.parse(redirectUrl).scheme : "http://localhost:3001"; - final result = await FlutterWebAuth2.authenticate( - url: url.toString(), - callbackUrlScheme: urlScheme, - ); + // #Pangea + // final result = await FlutterWebAuth2.authenticate( + // url: url.toString(), + // callbackUrlScheme: urlScheme, + // ); + String result; + try { + result = await FlutterWebAuth2.authenticate( + url: url.toString(), + callbackUrlScheme: urlScheme, + ); + } catch (err) { + if (err is PlatformException && err.code == 'CANCELED') { + debugPrint("user cancelled SSO login"); + return; + } + ErrorHandler.logError( + e: err, + s: StackTrace.current, + ); + return; + } + // Pangea# final token = Uri.parse(result).queryParameters['loginToken']; if (token?.isEmpty ?? false) return; - // #Pangea - final loginRes = await showFutureLoadingDialog( - // await showFutureLoadingDialog( - // Pangea# - context: context, - future: () => Matrix.of(context).getLoginClient().login( + setState(() { + error = null; + isLoading = isLoggingIn = true; + }); + try { + // #Pangea + final loginRes = await Matrix.of(context).getLoginClient().login( + // await Matrix.of(context).getLoginClient().login( + // Pangea# LoginType.mLoginToken, token: token, initialDeviceDisplayName: PlatformInfos.clientName, - ), - ); - //Pangea# - if (loginRes.result != null) { - GoogleAnalytics.login(provider.name!, loginRes.result!.userId); + ); + // #Pangea + GoogleAnalytics.login(provider.name!, loginRes.userId); + // Pangea# + } catch (e) { + setState(() { + error = e.toLocalizedString(context); + }); + } finally { + if (mounted) { + setState(() { + isLoading = isLoggingIn = false; + }); + } } - //Pangea# } List? get identityProviders { diff --git a/lib/pangea/controllers/pangea_controller.dart b/lib/pangea/controllers/pangea_controller.dart index 728f86131..68b1caa5a 100644 --- a/lib/pangea/controllers/pangea_controller.dart +++ b/lib/pangea/controllers/pangea_controller.dart @@ -1,12 +1,6 @@ import 'dart:developer'; import 'dart:math'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; - -import 'package:matrix/matrix.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; - import 'package:fluffychat/pangea/constants/class_default_values.dart'; import 'package:fluffychat/pangea/controllers/class_controller.dart'; import 'package:fluffychat/pangea/controllers/contextual_definition_controller.dart'; @@ -24,6 +18,11 @@ import 'package:fluffychat/pangea/utils/bot_name.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:fluffychat/pangea/utils/instructions.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/foundation.dart'; +import 'package:matrix/matrix.dart'; +import 'package:sentry_flutter/sentry_flutter.dart'; + import '../../config/app_config.dart'; import '../utils/firebase_analytics.dart'; import '../utils/p_store.dart'; @@ -160,6 +159,8 @@ class PangeaController { void startChatWithBotIfNotPresent() { Future.delayed(const Duration(milliseconds: 10000), () async { + // check if user is logged in + if (!matrixState.client.isLogged()) return; try { await matrixState.client.startDirectChat( BotName.byEnvironment, diff --git a/lib/pangea/models/it_response_model.dart b/lib/pangea/models/it_response_model.dart index c730a90e8..aa778829f 100644 --- a/lib/pangea/models/it_response_model.dart +++ b/lib/pangea/models/it_response_model.dart @@ -113,7 +113,7 @@ class Continuance { .cast() : []; return Continuance( - probability: json['probability'] as double, + probability: json['probability'].toDouble(), level: json['level'], text: json['text'], description: json['description'] ?? "", diff --git a/pubspec.lock b/pubspec.lock index 0117835d0..c5c084469 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -890,10 +890,10 @@ packages: dependency: "direct main" description: name: flutter_web_auth_2 - sha256: "75613aa4d8e43df3de0fc3d93df36ae5b4ba2e94070384c5a9baeda99f5a235f" + sha256: "3ea3a0cc539ca74319f4f2f7484f62742fe5b2ff9a0fca37575426d6e6f07901" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.1.1" flutter_web_auth_2_platform_interface: dependency: transitive description: @@ -1386,10 +1386,10 @@ packages: dependency: "direct main" description: name: matrix - sha256: b01a8a7141a586853a4f9b2e98b3c9912ff74bbceadc16b2bf3630bf055a830a + sha256: c5271ebe5a67d3af2b9490a05a538501b3a454f5eb2089f82cb18ddc9513455e url: "https://pub.dev" source: hosted - version: "0.22.7" + version: "0.25.3" matrix_api_lite: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index f10778925..8a788363b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -59,7 +59,7 @@ dependencies: flutter_secure_storage: ^9.0.0 flutter_svg: ^2.0.0+1 flutter_typeahead: ^4.8.0 - flutter_web_auth_2: ^3.0.3 + flutter_web_auth_2: ^3.1.1 flutter_webrtc: ^0.9.46 future_loading_dialog: ^0.3.0 geolocator: ^7.6.2 @@ -77,7 +77,7 @@ dependencies: language_tool: ^2.1.1 latlong2: ^0.8.1 linkify: ^5.0.0 - matrix: ^0.22.6 + matrix: ^0.25.3 matrix_homeserver_recommendations: ^0.3.0 native_imaging: ^0.1.0 new_version_plus: ^0.0.10 diff --git a/web/auth.html b/web/auth.html index f1d2fc0bc..806485b73 100644 --- a/web/auth.html +++ b/web/auth.html @@ -1,14 +1,13 @@ - - Authentication complete - - -

Authentication is complete. If this does not happen automatically, please - close the window. - - + } else { + localStorage.setItem('flutter-web-auth-2', window.location.href); + } + window.close(); + \ No newline at end of file