diff --git a/lib/components/matrix.dart b/lib/components/matrix.dart index 45e63dd6..ed0c76f9 100644 --- a/lib/components/matrix.dart +++ b/lib/components/matrix.dart @@ -20,6 +20,7 @@ import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:provider/provider.dart'; import 'package:universal_html/prefer_universal/html.dart' as html; import 'package:http/http.dart' as http; +import 'package:url_launcher/url_launcher.dart'; /*import 'package:fluffychat/views/chat.dart'; import 'package:fluffychat/app_config.dart'; import 'package:dbus/dbus.dart'; @@ -159,13 +160,21 @@ class MatrixState extends State { ), ); default: - await widget.apl.currentState.pushNamed( - '/authwebview/$stage/${uiaRequest.session}', - arguments: () => null, - ); - return uiaRequest.completeStage( - AuthenticationData(session: uiaRequest.session), + await launch( + Matrix.of(context).client.homeserver.toString() + + '/_matrix/client/r0/auth/$stage/fallback/web?session=${uiaRequest.session}', ); + if (OkCancelResult.ok == + await showOkCancelAlertDialog( + message: L10n.of(context).pleaseFollowInstructionsOnWeb, + context: context, + okLabel: L10n.of(context).next, + cancelLabel: L10n.of(context).cancel, + )) { + return uiaRequest.completeStage( + AuthenticationData(session: uiaRequest.session), + ); + } } } diff --git a/lib/config/routes.dart b/lib/config/routes.dart index d6de4aa2..ab1e971b 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -2,7 +2,6 @@ import 'package:adaptive_page_layout/adaptive_page_layout.dart'; import 'package:famedlysdk/famedlysdk.dart'; import 'package:fluffychat/components/matrix.dart'; import 'package:fluffychat/views/archive.dart'; -import 'package:fluffychat/views/auth_web_view.dart'; import 'package:fluffychat/views/chat.dart'; import 'package:fluffychat/views/chat_details.dart'; import 'package:fluffychat/views/chat_encryption_settings.dart'; @@ -61,16 +60,6 @@ class FluffyRoutes { ); } return ViewData(mainView: (_) => SignUp()); - case 'authwebview': - if (parts.length == 4) { - return ViewData( - mainView: (_) => AuthWebView( - parts[2], - Uri.decodeComponent(parts[3]), - settings.arguments, - ), - ); - } } } // Routes IF user is logged in @@ -138,17 +127,6 @@ class FluffyRoutes { mainView: (_) => Archive(), emptyView: (_) => EmptyPage(), ); - case 'authwebview': - if (parts.length == 4) { - return ViewData( - mainView: (_) => AuthWebView( - parts[2], - Uri.decodeComponent(parts[3]), - settings.arguments, - ), - ); - } - break; case 'discover': return ViewData( mainView: (_) => diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 65c4d816..d31a112a 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -142,6 +142,11 @@ "type": "text", "placeholders": {} }, + "pleaseFollowInstructionsOnWeb": "Please follow the instructions on the website and tap on next.", + "@pleaseFollowInstructionsOnWeb": { + "type": "text", + "placeholders": {} + }, "youWillBeConnectedTo": "You will be connected to {homeserver}", "@youWillBeConnectedTo": { "type": "text", @@ -149,6 +154,11 @@ "homeserver": {} } }, + "next": "Next", + "@next": { + "type": "text", + "placeholders": {} + }, "cachedKeys": "Keys cached", "@cachedKeys": { "type": "text", diff --git a/lib/views/auth_web_view.dart b/lib/views/auth_web_view.dart deleted file mode 100644 index 0024aabe..00000000 --- a/lib/views/auth_web_view.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:adaptive_page_layout/adaptive_page_layout.dart'; -import 'package:fluffychat/components/matrix.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:url_launcher/url_launcher.dart'; -import 'package:webview_flutter/webview_flutter.dart'; - -class AuthWebView extends StatefulWidget { - final String authType; - final String session; - final Function onAuthDone; - - const AuthWebView(this.authType, this.session, this.onAuthDone); - - @override - _AuthWebViewState createState() => _AuthWebViewState(); -} - -class _AuthWebViewState extends State { - bool _isLoading = true; - @override - Widget build(BuildContext context) { - final url = Matrix.of(context).client.homeserver.toString() + - '/_matrix/client/r0/auth/${widget.authType}/fallback/web?session=${widget.session}'; - if (kIsWeb) launch(url); - return Scaffold( - appBar: AppBar( - title: Text(L10n.of(context).authentication), - leading: IconButton( - icon: Icon(Icons.close), - onPressed: () { - AdaptivePageLayout.of(context).pop(); - widget.onAuthDone(); - }, - ), - ), - body: Column( - children: [ - if (_isLoading) LinearProgressIndicator(), - Expanded( - child: kIsWeb - ? Center(child: Icon(Icons.link_outlined)) - : WebView( - onPageFinished: (_) => setState(() => _isLoading = false), - initialUrl: url, - javascriptMode: JavascriptMode.unrestricted, - ), - ), - ], - ), - ); - } -} diff --git a/lib/views/sign_up_password.dart b/lib/views/sign_up_password.dart index f82f4c89..a6136c13 100644 --- a/lib/views/sign_up_password.dart +++ b/lib/views/sign_up_password.dart @@ -81,12 +81,20 @@ class _SignUpPasswordState extends State { ); if (OkCancelResult.ok == await showOkCancelAlertDialog( + message: L10n.of(context).pleaseFollowInstructionsOnWeb, context: context, + okLabel: L10n.of(context).next, + cancelLabel: L10n.of(context).cancel, )) { _signUpAction( context, auth: AuthenticationData(session: exception.session), ); + } else { + setState(() { + loading = false; + passwordError = null; + }); } return; }