From 48bf1169bc5d70ef0f6b800fde4f21943aac8741 Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Thu, 13 May 2021 11:10:05 +0200 Subject: [PATCH] refactor: UIA registering --- lib/views/sign_up_password.dart | 69 ++++----------------------------- lib/views/widgets/matrix.dart | 4 +- 2 files changed, 10 insertions(+), 63 deletions(-) diff --git a/lib/views/sign_up_password.dart b/lib/views/sign_up_password.dart index c994e9e9..6489ecda 100644 --- a/lib/views/sign_up_password.dart +++ b/lib/views/sign_up_password.dart @@ -1,4 +1,3 @@ -import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:adaptive_page_layout/adaptive_page_layout.dart'; import 'package:famedlysdk/famedlysdk.dart'; @@ -7,7 +6,6 @@ import 'package:fluffychat/views/ui/sign_up_password_ui.dart'; import 'package:fluffychat/views/widgets/matrix.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:url_launcher/url_launcher.dart'; import '../utils/platform_infos.dart'; class SignUpPassword extends StatefulWidget { @@ -22,13 +20,12 @@ class SignUpPassword extends StatefulWidget { class SignUpPasswordController extends State { final TextEditingController passwordController = TextEditingController(); String passwordError; - String _lastAuthWebViewStage; bool loading = false; bool showPassword = true; void toggleShowPassword() => setState(() => showPassword = !showPassword); - void signUpAction({AuthenticationData auth}) async { + void signUpAction() async { final matrix = Matrix.of(context); if (passwordController.text.isEmpty) { setState(() => passwordError = L10n.of(context).pleaseEnterYourPassword); @@ -43,65 +40,13 @@ class SignUpPasswordController extends State { try { setState(() => loading = true); final waitForLogin = matrix.client.onLoginStateChanged.stream.first; - await matrix.client.register( - username: widget.username, - password: passwordController.text, - initialDeviceDisplayName: PlatformInfos.clientName, - auth: auth, - ); + await matrix.client.uiaRequestBackground((auth) => matrix.client.register( + username: widget.username, + password: passwordController.text, + initialDeviceDisplayName: PlatformInfos.clientName, + auth: auth, + )); await waitForLogin; - } on MatrixException catch (exception) { - if (exception.requireAdditionalAuthentication) { - final stages = exception.authenticationFlows.first.stages; - - final currentStage = exception.completedAuthenticationFlows == null - ? stages.first - : stages.firstWhere((stage) => - !exception.completedAuthenticationFlows.contains(stage) ?? - true); - - if (currentStage == 'm.login.dummy') { - signUpAction( - auth: AuthenticationData( - type: currentStage, - session: exception.session, - ), - ); - } else { - if (_lastAuthWebViewStage == currentStage) { - _lastAuthWebViewStage = null; - setState( - () => passwordError = L10n.of(context).oopsSomethingWentWrong); - return setState(() => loading = false); - } - _lastAuthWebViewStage = currentStage; - await launch( - Matrix.of(context).client.homeserver.toString() + - '/_matrix/client/r0/auth/$currentStage/fallback/web?session=${exception.session}', - ); - if (OkCancelResult.ok == - await showOkCancelAlertDialog( - message: L10n.of(context).pleaseFollowInstructionsOnWeb, - context: context, - okLabel: L10n.of(context).next, - cancelLabel: L10n.of(context).cancel, - useRootNavigator: false, - )) { - signUpAction( - auth: AuthenticationData(session: exception.session), - ); - } else { - setState(() { - loading = false; - passwordError = null; - }); - } - return; - } - } else { - setState(() => passwordError = exception.errorMessage); - return setState(() => loading = false); - } } catch (exception) { setState(() => passwordError = exception.toString()); return setState(() => loading = false); diff --git a/lib/views/widgets/matrix.dart b/lib/views/widgets/matrix.dart index a6111642..dd3ac66c 100644 --- a/lib/views/widgets/matrix.dart +++ b/lib/views/widgets/matrix.dart @@ -155,7 +155,7 @@ class MatrixState extends State with WidgetsBindingObserver { ); default: await launch( - Matrix.of(context).client.homeserver.toString() + + client.homeserver.toString() + '/_matrix/client/r0/auth/$stage/fallback/web?session=${uiaRequest.session}', ); if (OkCancelResult.ok == @@ -169,6 +169,8 @@ class MatrixState extends State with WidgetsBindingObserver { return uiaRequest.completeStage( AuthenticationData(session: uiaRequest.session), ); + } else { + return uiaRequest.cancel(); } } }