From e0700009c0c416c976391e19b21c8ea49e03815d Mon Sep 17 00:00:00 2001 From: ibrahimozkan Date: Tue, 25 Feb 2025 22:48:04 +0200 Subject: [PATCH] feat: enhance Fitbit credential handling to include permission scopes --- app/lib/util/fitbit_handler.dart | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/app/lib/util/fitbit_handler.dart b/app/lib/util/fitbit_handler.dart index 2f75d25d5..47513eacd 100644 --- a/app/lib/util/fitbit_handler.dart +++ b/app/lib/util/fitbit_handler.dart @@ -103,6 +103,7 @@ class FitbitHandler { static Future _obtainCredentials( Study study, + List types, ) async { final fitbitCreds = study.fitbitCredentials?.fitbitCredentials; @@ -123,12 +124,28 @@ class FitbitHandler { if (validCredentials != null) return validCredentials; } try { + final scopes = []; + + for (final type in types) { + switch (type) { + case FitbitQuestionType.steps: + scopes.add(fitbitter.FitbitAuthScope.ACTIVITY); + break; + case FitbitQuestionType.heartrate: + scopes.add(fitbitter.FitbitAuthScope.HEART_RATE); + break; + case FitbitQuestionType.sleep: + scopes.add(fitbitter.FitbitAuthScope.SLEEP); + break; + } + } + final newCredentials = await fitbitter.FitbitConnector.authorize( - clientID: fitbitCreds.clientId, - clientSecret: fitbitCreds.clientSecret, - redirectUri: fitbitRedirectUrl, - callbackUrlScheme: fitbitCallbackScheme, - ); + clientID: fitbitCreds.clientId, + clientSecret: fitbitCreds.clientSecret, + redirectUri: fitbitRedirectUrl, + callbackUrlScheme: fitbitCallbackScheme, + scopeList: scopes); if (newCredentials != null) { await _storeCredentials(newCredentials, study.id); @@ -418,7 +435,7 @@ class FitbitHandler { String taskId, StudySubject subject, ) async { - final credentials = await _obtainCredentials(study); + final credentials = await _obtainCredentials(study, question.types); if (credentials == null) { throw Exception(