From ecbe421611cecc0b93f91728b3a5de9395ff388e Mon Sep 17 00:00:00 2001 From: William Jordan-Cooley Date: Tue, 30 Jul 2024 11:34:14 -0400 Subject: [PATCH 1/2] if bot, don't invite people to your analytics room --- .../extensions/client_extension/client_analytics_extension.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/pangea/extensions/client_extension/client_analytics_extension.dart b/lib/pangea/extensions/client_extension/client_analytics_extension.dart index 396e09f8d..797850662 100644 --- a/lib/pangea/extensions/client_extension/client_analytics_extension.dart +++ b/lib/pangea/extensions/client_extension/client_analytics_extension.dart @@ -100,6 +100,7 @@ extension AnalyticsClientExtension on Client { /// Handles case when students cannot add analytics room to space(s) /// so teacher is still able to get analytics data for this student void _inviteAllTeachersToAllAnalyticsRooms() { + if (userID == null || userID == BotName.byEnvironment) return; for (final Room room in allMyAnalyticsRooms) { room.inviteTeachersToAnalyticsRoom(); } From 1abbb8ee3f7ec6e9273bd574d6df5857dd523bf5 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Tue, 30 Jul 2024 12:45:31 -0400 Subject: [PATCH 2/2] on profile create, also create pangea profile. If there's no pangea profile when fetching access token, create one. --- lib/pangea/controllers/user_controller.dart | 27 ++++++++++++++++--- lib/pangea/repo/user_repo.dart | 29 +++++++++++++++++++++ 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/lib/pangea/controllers/user_controller.dart b/lib/pangea/controllers/user_controller.dart index 2ef0227e5..bf8ce3c11 100644 --- a/lib/pangea/controllers/user_controller.dart +++ b/lib/pangea/controllers/user_controller.dart @@ -83,6 +83,15 @@ class UserController extends BaseController { createdAt: DateTime.now(), ); final newProfile = Profile(userSettings: userSettings); + + // we don't use the pangea profile anymore, but we still need + // it to get access token for the choreographer, so create one + await PUserRepo.repoCreatePangeaUser( + userID: userId!, + dob: dob.toIso8601String(), + fullName: fullname!, + matrixAccessToken: _matrixAccessToken!, + ); await newProfile.saveProfileData(waitForDataInSync: true); } @@ -155,13 +164,25 @@ class UserController extends BaseController { _pangeaController.pStoreService.read(PLocalKey.access); if (localAccessToken == null || needNewJWT(localAccessToken)) { - final PangeaProfileResponse? userModel = - await PUserRepo.fetchPangeaUserInfo( + PangeaProfileResponse? userModel = await PUserRepo.fetchPangeaUserInfo( userID: userId!, matrixAccessToken: _matrixAccessToken!, ); + // Oops, some accounts were made without creating pangea profiles, so they + // don't have access to an access token yet. In that case, create a pangea profile. if (userModel?.access == null) { - throw ("Trying to get accessToken with null userModel"); + final dob = profile.userSettings.dateOfBirth; + if (dob != null) { + userModel = await PUserRepo.repoCreatePangeaUser( + userID: userId!, + dob: dob.toIso8601String(), + fullName: fullname!, + matrixAccessToken: _matrixAccessToken!, + ); + if (userModel?.access == null) { + throw ("Trying to get accessToken with null userModel"); + } + } } _pangeaController.pStoreService.save( PLocalKey.access, diff --git a/lib/pangea/repo/user_repo.dart b/lib/pangea/repo/user_repo.dart index 47caaab0b..244e21c54 100644 --- a/lib/pangea/repo/user_repo.dart +++ b/lib/pangea/repo/user_repo.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'dart:developer'; import 'package:fluffychat/pangea/constants/model_keys.dart'; +import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:http/http.dart'; import '../models/user_model.dart'; @@ -10,6 +11,34 @@ import '../network/requests.dart'; import '../network/urls.dart'; class PUserRepo { + static Future repoCreatePangeaUser({ + required String userID, + required String dob, + required fullName, + required String matrixAccessToken, + }) async { + try { + final Requests req = Requests( + baseUrl: PApiUrls.baseAPI, + matrixAccessToken: matrixAccessToken, + ); + + final Map body = { + ModelKey.userFullName: fullName, + ModelKey.userPangeaUserId: userID, + ModelKey.userDateOfBirth: dob, + }; + final resp = await req.post( + url: PApiUrls.createUser, + body: body, + ); + return PangeaProfileResponse.fromJson(jsonDecode(resp.body)); + } catch (err, s) { + ErrorHandler.logError(e: err, s: s); + return null; + } + } + static Future fetchPangeaUserInfo({ required String userID, required String matrixAccessToken,