fix: UiaRequestManager

This commit is contained in:
Krille Fear 2021-10-26 20:01:53 +02:00
parent 716952d852
commit 76e51ef315
2 changed files with 30 additions and 33 deletions

View File

@ -1,18 +1,16 @@
import 'package:fluffychat/widgets/matrix.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:matrix/matrix.dart'; import 'package:matrix/matrix.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
class UiaRequestManager { class UiaRequestManager {
final Client client; final MatrixState matrix;
final L10n l10n;
final BuildContext navigatorContext;
final String cachedPassword; final String cachedPassword;
UiaRequestManager(this.client, this.l10n, this.navigatorContext, UiaRequestManager(this.matrix, [this.cachedPassword]);
[this.cachedPassword]);
Future onUiaRequest(UiaRequest uiaRequest) async { Future onUiaRequest(UiaRequest uiaRequest) async {
try { try {
@ -23,11 +21,10 @@ class UiaRequestManager {
case AuthenticationTypes.password: case AuthenticationTypes.password:
final input = cachedPassword ?? final input = cachedPassword ??
(await showTextInputDialog( (await showTextInputDialog(
useRootNavigator: false, context: matrix.navigatorContext,
context: navigatorContext, title: L10n.of(matrix.context).pleaseEnterYourPassword,
title: l10n.pleaseEnterYourPassword, okLabel: L10n.of(matrix.context).ok,
okLabel: l10n.ok, cancelLabel: L10n.of(matrix.context).cancel,
cancelLabel: l10n.cancel,
textFields: [ textFields: [
const DialogTextField( const DialogTextField(
minLines: 1, minLines: 1,
@ -43,27 +40,30 @@ class UiaRequestManager {
AuthenticationPassword( AuthenticationPassword(
session: uiaRequest.session, session: uiaRequest.session,
password: input, password: input,
identifier: AuthenticationUserIdentifier(user: client.userID), identifier:
AuthenticationUserIdentifier(user: matrix.client.userID),
), ),
); );
case AuthenticationTypes.emailIdentity: case AuthenticationTypes.emailIdentity:
final emailInput = await showTextInputDialog( final emailInput = await showTextInputDialog(
context: navigatorContext, context: matrix.navigatorContext,
message: l10n.serverRequiresEmail, message: L10n.of(matrix.context).serverRequiresEmail,
okLabel: l10n.next, okLabel: L10n.of(matrix.context).next,
cancelLabel: l10n.cancel, cancelLabel: L10n.of(matrix.context).cancel,
textFields: [ textFields: [
DialogTextField( DialogTextField(
hintText: l10n.addEmail, hintText: L10n.of(matrix.context).addEmail,
keyboardType: TextInputType.emailAddress, keyboardType: TextInputType.emailAddress,
), ),
], ],
); );
if (emailInput == null || emailInput.isEmpty) { if (emailInput == null || emailInput.isEmpty) {
return uiaRequest.cancel(Exception(l10n.serverRequiresEmail)); return uiaRequest
.cancel(Exception(L10n.of(matrix.context).serverRequiresEmail));
} }
final clientSecret = DateTime.now().millisecondsSinceEpoch.toString(); final clientSecret = DateTime.now().millisecondsSinceEpoch.toString();
final currentThreepidCreds = await client.requestTokenToRegisterEmail( final currentThreepidCreds =
await matrix.client.requestTokenToRegisterEmail(
clientSecret, clientSecret,
emailInput.single, emailInput.single,
0, 0,
@ -81,11 +81,11 @@ class UiaRequestManager {
if (OkCancelResult.ok == if (OkCancelResult.ok ==
await showOkCancelAlertDialog( await showOkCancelAlertDialog(
useRootNavigator: false, useRootNavigator: false,
context: navigatorContext, context: matrix.navigatorContext,
title: l10n.weSentYouAnEmail, title: L10n.of(matrix.context).weSentYouAnEmail,
message: l10n.pleaseClickOnLink, message: L10n.of(matrix.context).pleaseClickOnLink,
okLabel: l10n.iHaveClickedOnLink, okLabel: L10n.of(matrix.context).iHaveClickedOnLink,
cancelLabel: l10n.cancel, cancelLabel: L10n.of(matrix.context).cancel,
)) { )) {
return uiaRequest.completeStage(auth); return uiaRequest.completeStage(auth);
} }
@ -99,16 +99,16 @@ class UiaRequestManager {
); );
default: default:
await launch( await launch(
client.homeserver.toString() + matrix.client.homeserver.toString() +
'/_matrix/client/r0/auth/$stage/fallback/web?session=${uiaRequest.session}', '/_matrix/client/r0/auth/$stage/fallback/web?session=${uiaRequest.session}',
); );
if (OkCancelResult.ok == if (OkCancelResult.ok ==
await showOkCancelAlertDialog( await showOkCancelAlertDialog(
useRootNavigator: false, useRootNavigator: false,
message: l10n.pleaseFollowInstructionsOnWeb, message: L10n.of(matrix.context).pleaseFollowInstructionsOnWeb,
context: navigatorContext, context: matrix.navigatorContext,
okLabel: l10n.next, okLabel: L10n.of(matrix.context).next,
cancelLabel: l10n.cancel, cancelLabel: L10n.of(matrix.context).cancel,
)) { )) {
return uiaRequest.completeStage( return uiaRequest.completeStage(
AuthenticationData(session: uiaRequest.session), AuthenticationData(session: uiaRequest.session),

View File

@ -346,10 +346,7 @@ class MatrixState extends State<Matrix> with WidgetsBindingObserver {
SettingKeys.ownStatusMessage, presence.presence.statusMsg); SettingKeys.ownStatusMessage, presence.presence.statusMsg);
} }
}); });
onUiaRequest[name] ??= c.onUiaRequest.stream.listen( onUiaRequest[name] ??= c.onUiaRequest.stream.listen(uiaRequestHandler);
UiaRequestManager(client, L10n.of(widget.context), navigatorContext)
.onUiaRequest,
);
if (PlatformInfos.isWeb || PlatformInfos.isLinux) { if (PlatformInfos.isWeb || PlatformInfos.isLinux) {
c.onSync.stream.first.then((s) { c.onSync.stream.first.then((s) {
html.Notification.requestPermission(); html.Notification.requestPermission();