commit
1144557872
7 changed files with 91 additions and 66 deletions
|
|
@ -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<DevicesSettings> {
|
|||
|
||||
void removeDevicesAction(List<Device> 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<DevicesSettings> {
|
|||
|
||||
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<DevicesSettings> {
|
|||
}
|
||||
|
||||
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]!
|
||||
|
|
|
|||
|
|
@ -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<HomeserverPicker> {
|
|||
? '${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<IdentityProvider>? get identityProviders {
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ class Continuance {
|
|||
.cast<Lemma>()
|
||||
: [];
|
||||
return Continuance(
|
||||
probability: json['probability'] as double,
|
||||
probability: json['probability'].toDouble(),
|
||||
level: json['level'],
|
||||
text: json['text'],
|
||||
description: json['description'] ?? "",
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,14 +1,13 @@
|
|||
<!DOCTYPE html>
|
||||
<head>
|
||||
<title>Authentication complete</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>Authentication is complete. If this does not happen automatically, please
|
||||
close the window.
|
||||
<script>
|
||||
<title>Authentication complete</title>
|
||||
<p>Authentication is complete. If this does not happen automatically, please close the window.</p>
|
||||
<script>
|
||||
if (window.opener) {
|
||||
window.opener.postMessage({
|
||||
'flutter-web-auth-2': window.location.href
|
||||
}, window.location.origin);
|
||||
window.close();
|
||||
</script>
|
||||
</body>
|
||||
} else {
|
||||
localStorage.setItem('flutter-web-auth-2', window.location.href);
|
||||
}
|
||||
window.close();
|
||||
</script>
|
||||
Loading…
Add table
Reference in a new issue