From cd4b26b3cd565e1e57109d34def38d8df539030d Mon Sep 17 00:00:00 2001 From: Jonathan Champ Date: Thu, 27 Feb 2025 12:19:22 -0500 Subject: [PATCH] scopes: use check_scopes in webservice::oauth() --- classes/webservice.php | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/classes/webservice.php b/classes/webservice.php index 36731e9f..ddcb66fa 100644 --- a/classes/webservice.php +++ b/classes/webservice.php @@ -1072,7 +1072,7 @@ public function list_tracking_fields() { $response = null; try { // Classic: tracking_fields:read:admin. - // Granular: tracking_field:read:list_tracking_fields:admin + // Granular: tracking_field:read:list_tracking_fields:admin. $response = $this->make_call('tracking_fields'); } catch (moodle_exception $error) { debugging($error->getMessage()); @@ -1304,31 +1304,29 @@ private function oauth($cache) { $scopes = explode(' ', $response->scope); + // Keep the scope information in memory. + $this->scopes = $scopes; + // Assume that we are using granular scopes. $requiredscopes = [ - 'meeting:read:meeting:admin', - 'meeting:read:invitation:admin', - 'meeting:delete:meeting:admin', - 'meeting:update:meeting:admin', - 'meeting:write:meeting:admin', - 'user:read:list_schedulers:admin', - 'user:read:settings:admin', - 'user:read:user:admin', - ]; - - // Check if we received classic scopes. - if (in_array('meeting:read:admin', $scopes, true)) { - $requiredscopes = [ + 'granular' => [ + 'meeting:read:meeting:admin', + 'meeting:read:invitation:admin', + 'meeting:delete:meeting:admin', + 'meeting:update:meeting:admin', + 'meeting:write:meeting:admin', + 'user:read:list_schedulers:admin', + 'user:read:settings:admin', + 'user:read:user:admin', + ], + 'classic' => [ 'meeting:read:admin', 'meeting:write:admin', 'user:read:admin', - ]; - } - - $missingscopes = array_diff($requiredscopes, $scopes); + ], + ]; - // Keep the scope information in memory. - $this->scopes = $scopes; + $missingscopes = $this->check_scopes($requiredscopes); if (!empty($missingscopes)) { $missingscopes = implode(', ', $missingscopes);