Skip to content

Commit

Permalink
MDL-61848 auth_manual: Implement Privacy API
Browse files Browse the repository at this point in the history
  • Loading branch information
cescobedo committed Apr 19, 2018
1 parent 6a643e9 commit fa334d3
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 0 deletions.
72 changes: 72 additions & 0 deletions auth/manual/classes/privacy/provider.php
@@ -0,0 +1,72 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Privacy Subsystem implementation for auth_manual.
*
* @package auth_manual
* @copyright 2018 Carlos Escobedo <carlos@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

namespace auth_manual\privacy;

use \core_privacy\local\request\writer;
use \core_privacy\local\metadata\collection;
use \core_privacy\local\request\transform;

defined('MOODLE_INTERNAL') || die();

/**
* Privacy provider for the authentication manual.
*
* @copyright 2018 Carlos Escobedo <carlos@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class provider implements
\core_privacy\local\metadata\provider,
\core_privacy\local\request\user_preference_provider {

/**
* Returns meta data about this system.
*
* @param collection $collection The initialised item collection to add items to.
* @return collection A listing of user data stored through this system.
*/
public static function get_metadata(collection $collection) {
// There is a one user preference.
$collection->add_user_preference('auth_manual_passwordupdatetime',
'privacy:metadata:preference:passwordupdatetime');

return $collection;
}

/**
* Export all user preferences for the plugin.
*
* @param int $userid The userid of the user whose data is to be exported.
*/
public static function export_user_preferences($userid) {
$lastpasswordupdatetime = get_user_preferences('auth_manual_passwordupdatetime', null, $userid);
if ($lastpasswordupdatetime !== null) {
$time = transform::datetime($lastpasswordupdatetime);
writer::export_user_preference('auth_manual',
'auth_manual_passwordupdatetime',
$time,
get_string('privacy:metadata:preference:passwordupdatetime', 'auth_manual')
);
}
}
}
1 change: 1 addition & 0 deletions auth/manual/lang/en/auth_manual.php
Expand Up @@ -31,3 +31,4 @@
$string['passwdexpiretime_desc'] = 'Length of time for which a password is valid.';
$string['pluginname'] = 'Manual accounts';
$string['passwdexpire_settings'] = 'Password expiry settings';
$string['privacy:metadata:preference:passwordupdatetime'] = 'The date of the last password change.';
69 changes: 69 additions & 0 deletions auth/manual/tests/privacy_provider_test.php
@@ -0,0 +1,69 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Base class for unit tests for auth_manual.
*
* @package auth_manual
* @category test
* @copyright 2018 Carlos Escobedo <carlos@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

defined('MOODLE_INTERNAL') || die();

global $CFG;
require_once($CFG->dirroot.'/auth/manual/auth.php');

use \core_privacy\local\request\writer;
use \core_privacy\local\request\transform;
use \auth_manual\privacy\provider;

/**
* Unit tests for the auth_manual implementation of the privacy API.
*
* @copyright 2018 Carlos Escobedo <carlos@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class auth_manual_privacy_testcase extends \core_privacy\tests\provider_testcase {

/** @var auth_plugin_manual Keeps the authentication plugin. */
protected $authplugin;
/**
* Basic setup for these tests.
*/
public function setUp() {
$this->resetAfterTest(true);
$this->authplugin = new auth_plugin_manual();
}

/**
* Test to check export_user_preferences.
* returns user preferences data.
*/
public function test_export_user_preferences() {
$user = $this->getDataGenerator()->create_user();
$this->authplugin->user_update_password($user, 'MyPrivacytestPassword*');

provider::export_user_preferences($user->id);
$writer = writer::with_context(\context_system::instance());
$prefs = $writer->get_user_preferences('auth_manual');
$time = transform::datetime(get_user_preferences('auth_manual_passwordupdatetime', 0, $user->id));

$this->assertEquals($time, $prefs->auth_manual_passwordupdatetime->value);
$this->assertEquals(get_string('privacy:metadata:preference:passwordupdatetime', 'auth_manual'),
$prefs->auth_manual_passwordupdatetime->description);
}
}

0 comments on commit fa334d3

Please sign in to comment.