From 44bce9b40bd65ac98f90e1122f8275948c2fc321 Mon Sep 17 00:00:00 2001 From: skodak Date: Tue, 6 Oct 2009 20:26:22 +0000 Subject: [PATCH] MDL-17135 basic ws auth plugin, this plugin does not allow normal logins through /login/index.php --- auth/webservice/auth.php | 156 +++++++++++++++++++++++++++++++ lang/en_utf8/auth_webservice.php | 4 + 2 files changed, 160 insertions(+) create mode 100644 auth/webservice/auth.php create mode 100644 lang/en_utf8/auth_webservice.php diff --git a/auth/webservice/auth.php b/auth/webservice/auth.php new file mode 100644 index 0000000000..d92bb382c5 --- /dev/null +++ b/auth/webservice/auth.php @@ -0,0 +1,156 @@ +. + +/** + * Web service auth plugin, reserves username, prevents normal login. + * TODO: add IP restrictions and some other features - MDL-17135 + * + * @package moodlecore + * @subpackage webservice + * @copyright 2008 Petr Skoda (http://skodak.org) + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page +} + +require_once($CFG->libdir.'/authlib.php'); + +/** + * Web service auth plugin. + */ +class auth_plugin_webservice extends auth_plugin_base { + + /** + * Constructor. + */ + function auth_plugin_webservice() { + $this->authtype = 'webservice'; + $this->config = get_config('auth/webservice'); + } + + /** + * Returns true if the username and password work and false if they are + * wrong or don't exist. + * + * @param string $username The username (with system magic quotes) + * @param string $password The password (with system magic quotes) + * + * @return bool Authentication success or failure. + */ + function user_login($username, $password) { + // normla logins not allowed! + return false; + } + + /** + * Custom auth hook for web services. + * @param string $username + * @param string $password + * @return bool success + */ + function user_login_webservice($username, $password) { + global $CFG, $DB; + // special web service login + if ($user = $DB->get_record('user', array('username'=>$username, 'mnethostid'=>$CFG->mnet_localhost_id))) { + return validate_internal_user_password($user, $password); + } + return false; + } + + /** + * Updates the user's password. + * + * called when the user password is updated. + * + * @param object $user User table object (with system magic quotes) + * @param string $newpassword Plaintext password (with system magic quotes) + * @return boolean result + * + */ + function user_update_password($user, $newpassword) { + $user = get_complete_user_data('id', $user->id); + return update_internal_user_password($user, $newpassword); + } + + /** + * Returns true if this authentication plugin is 'internal'. + * + * @return bool + */ + function is_internal() { + return true; + } + + /** + * Returns true if this authentication plugin can change the user's + * password. + * + * @return bool + */ + function can_change_password() { + return false; + } + + /** + * Returns the URL for changing the user's pw, or empty if the default can + * be used. + * + * @return string + */ + function change_password_url() { + return ''; + } + + /** + * Returns true if plugin allows resetting of internal password. + * + * @return bool + */ + function can_reset_password() { + return false; + } + + /** + * Prints a form for configuring this authentication plugin. + * + * This function is called from admin/auth.php, and outputs a full page with + * a form for configuring this plugin. + * + * @param array $page An object containing all the data for this page. + */ + function config_form($config, $err, $user_fields) { + } + + /** + * Processes and stores configuration data for this authentication plugin. + */ + function process_config($config) { + return true; + } + + /** + * Confirm the new user as registered. This should normally not be used, + * but it may be necessary if the user auth_method is changed to manual + * before the user is confirmed. + */ + function user_confirm($username, $confirmsecret = null) { + return AUTH_CONFIRM_ERROR; + } + +} diff --git a/lang/en_utf8/auth_webservice.php b/lang/en_utf8/auth_webservice.php new file mode 100644 index 0000000000..cb64a9a149 --- /dev/null +++ b/lang/en_utf8/auth_webservice.php @@ -0,0 +1,4 @@ +