MDL-49026 webservice: Remove tokens on password change
authorJuan Leyva <juanleyvadelgado@gmail.com>
Mon, 11 Jul 2016 11:06:40 +0000 (12:06 +0100)
committerMr. Jenkins (CiBoT) <cibot@moodle.org>
Wed, 7 Sep 2016 01:07:29 +0000 (09:07 +0800)
lib/moodlelib.php
webservice/lib.php

index 230fef2..69c923f 100644 (file)
@@ -4465,6 +4465,7 @@ function hash_internal_user_password($password, $fasthash = false) {
  *
  * Updating the password will modify the $user object and the database
  * record to use the current hashing algorithm.
+ * It will remove Web Services user tokens too.
  *
  * @param stdClass $user User object (password property may be updated).
  * @param string $password Plain text password.
@@ -4513,6 +4514,10 @@ function update_internal_user_password($user, $password, $fasthash = false) {
         // Trigger event.
         $user = $DB->get_record('user', array('id' => $user->id));
         \core\event\user_password_updated::create_from_user($user)->trigger();
+
+        // Remove WS user tokens.
+        require_once($CFG->dirroot.'/webservice/lib.php');
+        webservice::delete_user_ws_tokens($user->id);
     }
 
     return true;
index 4a608a2..de39e61 100644 (file)
@@ -421,6 +421,16 @@ class webservice {
         $DB->delete_records('external_tokens', array('id'=>$tokenid));
     }
 
+    /**
+     * Delete all the tokens belonging to a user.
+     *
+     * @param int $userid the user id whose tokens must be deleted
+     */
+    public static function delete_user_ws_tokens($userid) {
+        global $DB;
+        $DB->delete_records('external_tokens', array('userid' => $userid));
+    }
+
     /**
      * Delete a service
      * Also delete function references and authorised user references.