diff --git a/lib/pangea/guard/p_vguard.dart b/lib/pangea/guard/p_vguard.dart index 8d94849dc..9d1145439 100644 --- a/lib/pangea/guard/p_vguard.dart +++ b/lib/pangea/guard/p_vguard.dart @@ -1,11 +1,11 @@ import 'dart:async'; -import 'package:flutter/material.dart'; - -import 'package:go_router/go_router.dart'; - import 'package:fluffychat/pangea/course_plans/course_plan_room_extension.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; + import '../common/controllers/pangea_controller.dart'; class PAuthGaurd { @@ -55,7 +55,10 @@ class PAuthGaurd { // and their URL doesn’t include ‘course,’ redirect final bool hasSetL2 = await pController!.userController.isUserL2Set; final bool inCourse = Matrix.of(context).client.rooms.any( - (r) => r.isSpace && r.coursePlan != null, + (r) => + r.isSpace && + r.membership == Membership.join && + r.coursePlan != null, ) || state.fullPath?.contains('course') == true; @@ -81,6 +84,17 @@ class PAuthGaurd { final isLogged = Matrix.of(context).widget.clients.any( (client) => client.isLogged(), ); - return isLogged ? null : '/home'; + if (!isLogged) { + return '/home'; + } + + final bool hasSetL2 = await pController!.userController.isUserL2Set; + final bool inCourse = Matrix.of(context).client.rooms.any( + (r) => + r.isSpace && + r.membership == Membership.join && + r.coursePlan != null, + ); + return hasSetL2 && inCourse ? '/rooms' : null; } } diff --git a/lib/pangea/login/utils/sso_login_action.dart b/lib/pangea/login/utils/sso_login_action.dart index 6dbdf2c18..fe7c78163 100644 --- a/lib/pangea/login/utils/sso_login_action.dart +++ b/lib/pangea/login/utils/sso_login_action.dart @@ -54,14 +54,18 @@ Future pangeaSSOLoginAction( final token = Uri.parse(result).queryParameters['loginToken']; if (token?.isEmpty ?? false) return; + final langCode = FluffyChatApp.router.state.pathParameters['langcode']; + final path = langCode != null ? '/registration/$langCode' : '/registration'; + final redirect = client.onLoginStateChanged.stream .where((state) => state == LoginState.loggedIn) .first .then( (_) { final route = FluffyChatApp.router.state.fullPath; - if (route == null || !route.contains("/rooms")) { - context.go("/rooms"); + if (route == null || + (!route.contains("/rooms") && !route.contains('registration'))) { + context.go(path); } }, ).timeout(const Duration(seconds: 30)); @@ -70,17 +74,13 @@ Future pangeaSSOLoginAction( LoginType.mLoginToken, token: token, initialDeviceDisplayName: PlatformInfos.clientName, - onInitStateChanged: (state) { - if (state == InitState.settingUpEncryption) { - context.go("/rooms"); - } - }, ); if (client.onLoginStateChanged.value == LoginState.loggedIn) { final route = FluffyChatApp.router.state.fullPath; - if (route == null || !route.contains("/rooms")) { - context.go("/rooms"); + if (route == null || + (!route.contains("/rooms") && !route.contains('registration'))) { + context.go(path); } } else { await redirect;