diff --git a/auth/oauth2/db/upgrade.php b/auth/oauth2/db/upgrade.php index 8d0a6a6a0f2..79714107b09 100644 --- a/auth/oauth2/db/upgrade.php +++ b/auth/oauth2/db/upgrade.php @@ -50,5 +50,39 @@ function xmldb_auth_oauth2_upgrade($oldversion) { // Automatically generated Moodle v3.6.0 release upgrade line. // Put any upgrade step following this. + if ($oldversion < 2018120301) { + // Fetch Facebook, Google, and Microsoft issuers. We use the URL field to determine the issuer type as it's the only + // field that contains the keyword that can somewhat let us reliably determine the issuer type. + $likefacebook = $DB->sql_like('oe.url', ':facebook'); + $likegoogle = $DB->sql_like('oe.url', ':google'); + $likemicrosoft = $DB->sql_like('oe.url', ':microsoft'); + + $params = [ + 'facebook' => '%facebook%', + 'google' => '%google%', + 'microsoft' => '%microsoft%', + ]; + + // We're querying from the oauth2_endpoint table because the base URLs of FB and Microsoft can be empty in the issuer table. + $subsql = " + SELECT DISTINCT oe.issuerid + FROM {oauth2_endpoint} oe + WHERE $likefacebook + OR $likegoogle + OR $likemicrosoft"; + + // Update non-Facebook/Google/Microsoft issuers and set requireconfirmation to 1. + $updatesql = " + UPDATE {oauth2_issuer} + SET requireconfirmation = 1 + WHERE id NOT IN ({$subsql})"; + $DB->execute($updatesql, $params); + + // Delete linked logins for non-Facebook/Google/Microsoft issuers. They can easily re-link their logins anyway. + $DB->delete_records_select('auth_oauth2_linked_login', "issuerid NOT IN ($subsql)", $params); + + upgrade_plugin_savepoint(true, 2018120301, 'auth', 'oauth2'); + } + return true; } diff --git a/auth/oauth2/version.php b/auth/oauth2/version.php index 45bf5494c5c..7d84d2a80b7 100644 --- a/auth/oauth2/version.php +++ b/auth/oauth2/version.php @@ -24,6 +24,6 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2018120301; // The current plugin version (Date: YYYYMMDDXX). $plugin->requires = 2018112800; // Requires this Moodle version. $plugin->component = 'auth_oauth2'; // Full name of the plugin (used for diagnostics).