From ec6f7615394724a957e8c71e5e95843feb0f7384 Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Mon, 14 Feb 2022 15:59:10 +0100 Subject: [PATCH] refactor: SSO Login and remove flutter in app view --- .../homeserver_picker/homeserver_picker.dart | 30 ---------- lib/utils/uia_request_manager.dart | 55 ++++++------------- pubspec.lock | 7 --- pubspec.yaml | 1 - 4 files changed, 16 insertions(+), 77 deletions(-) diff --git a/lib/pages/homeserver_picker/homeserver_picker.dart b/lib/pages/homeserver_picker/homeserver_picker.dart index dcd8f7579..885d12b3f 100644 --- a/lib/pages/homeserver_picker/homeserver_picker.dart +++ b/lib/pages/homeserver_picker/homeserver_picker.dart @@ -4,11 +4,9 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:flutter_web_auth/flutter_web_auth.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/matrix.dart'; -import 'package:uni_links/uni_links.dart'; import 'package:universal_html/html.dart' as html; import 'package:vrouter/vrouter.dart'; @@ -18,7 +16,6 @@ import 'package:fluffychat/pages/homeserver_picker/homeserver_picker_view.dart'; import 'package:fluffychat/utils/famedlysdk_store.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import '../../main.dart'; import '../../utils/localized_exception_extension.dart'; class HomeserverPicker extends StatefulWidget { @@ -67,34 +64,9 @@ class HomeserverPickerController extends State { ); } - void _processIncomingUris(String? text) async { - if (text == null || !text.startsWith(AppConfig.appOpenUrlScheme)) return; - await browser?.close(); - VRouter.of(context).to('/home'); - final token = Uri.parse(text).queryParameters['loginToken']; - if (token != null) _loginWithToken(token); - } - - void _initReceiveUri() { - if (!PlatformInfos.isMobile) return; - // For receiving shared Uris - _intentDataStreamSubscription = linkStream.listen(_processIncomingUris); - if (FluffyChatApp.gotInitialLink == false) { - FluffyChatApp.gotInitialLink = true; - getInitialLink().then(_processIncomingUris); - } - } - @override void initState() { super.initState(); - _initReceiveUri(); - if (kIsWeb) { - WidgetsBinding.instance!.addPostFrameCallback((_) { - final token = Matrix.of(context).widget.queryParameters!['loginToken']; - if (token != null) _loginWithToken(token); - }); - } checkHomeserverAction(); } @@ -198,8 +170,6 @@ class HomeserverPickerController extends State { .tryGetList('flows')! .any((flow) => flow['type'] == AuthenticationTypes.sso); - ChromeSafariBrowser? browser; - static const String ssoHomeserverKey = 'sso-homeserver'; void ssoLoginAction(String id) async { diff --git a/lib/utils/uia_request_manager.dart b/lib/utils/uia_request_manager.dart index 2c84ce541..d119d8938 100644 --- a/lib/utils/uia_request_manager.dart +++ b/lib/utils/uia_request_manager.dart @@ -2,11 +2,9 @@ import 'dart:async'; import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:matrix/matrix.dart'; import 'package:url_launcher/url_launcher.dart'; -import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/matrix.dart'; extension UiaRequestManager on MatrixState { @@ -84,39 +82,25 @@ extension UiaRequestManager on MatrixState { default: final url = Uri.parse(client.homeserver.toString() + '/_matrix/client/r0/auth/$stage/fallback/web?session=${uiaRequest.session}'); - if (PlatformInfos.isMobile) { - final browser = UiaFallbackBrowser(); - browser.addMenuItem( - ChromeSafariBrowserMenuItem( - action: (_, __) { - uiaRequest.cancel(); - }, - label: L10n.of(context)!.cancel, - id: 0, - ), + launch( + url.toString(), + forceSafariVC: true, + forceWebView: true, + ); + if (OkCancelResult.ok == + await showOkCancelAlertDialog( + useRootNavigator: false, + message: L10n.of(context)!.pleaseFollowInstructionsOnWeb, + context: navigatorContext, + okLabel: L10n.of(context)!.next, + cancelLabel: L10n.of(context)!.cancel, + )) { + return uiaRequest.completeStage( + AuthenticationData(session: uiaRequest.session), ); - await browser.open(url: url); - await browser.whenClosed.stream.first; } else { - launch(url.toString()); - if (OkCancelResult.ok == - await showOkCancelAlertDialog( - useRootNavigator: false, - message: L10n.of(context)!.pleaseFollowInstructionsOnWeb, - context: navigatorContext, - okLabel: L10n.of(context)!.next, - cancelLabel: L10n.of(context)!.cancel, - )) { - return uiaRequest.completeStage( - AuthenticationData(session: uiaRequest.session), - ); - } else { - return uiaRequest.cancel(); - } + return uiaRequest.cancel(); } - await uiaRequest.completeStage( - AuthenticationData(session: uiaRequest.session), - ); } } catch (e, s) { Logs().e('Error while background UIA', e, s); @@ -133,10 +117,3 @@ class UiaException implements Exception { @override String toString() => reason; } - -class UiaFallbackBrowser extends ChromeSafariBrowser { - final StreamController whenClosed = StreamController.broadcast(); - - @override - onClosed() => whenClosed.add(true); -} diff --git a/pubspec.lock b/pubspec.lock index 97b916fa2..38812fc6d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -405,13 +405,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.7.0" - flutter_inappwebview: - dependency: "direct main" - description: - name: flutter_inappwebview - url: "https://pub.dartlang.org" - source: hosted - version: "5.3.2" flutter_keyboard_visibility: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 9ed0761fb..ef38edccf 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -30,7 +30,6 @@ dependencies: flutter_app_lock: ^2.0.0 flutter_blurhash: ^0.6.0 flutter_cache_manager: ^3.1.2 - flutter_inappwebview: ^5.3.2 flutter_local_notifications: ^8.2.0 flutter_localizations: sdk: flutter