Commit | Line | Data |
---|---|---|
b9ddb2d5 | 1 | <?php |
a2f10958 PS |
2 | // This file is part of Moodle - http://moodle.org/ |
3 | // | |
4 | // Moodle is free software: you can redistribute it and/or modify | |
5 | // it under the terms of the GNU General Public License as published by | |
6 | // the Free Software Foundation, either version 3 of the License, or | |
7 | // (at your option) any later version. | |
8 | // | |
9 | // Moodle is distributed in the hope that it will be useful, | |
10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | // GNU General Public License for more details. | |
13 | // | |
14 | // You should have received a copy of the GNU General Public License | |
15 | // along with Moodle. If not, see <http://www.gnu.org/licenses/>. | |
b9ddb2d5 | 16 | |
17 | /** | |
b9ddb2d5 | 18 | * Authentication Plugin: Email Authentication |
19 | * | |
a2f10958 PS |
20 | * @author Martin Dougiamas |
21 | * @license http://www.gnu.org/copyleft/gpl.html GNU Public License | |
22 | * @package auth_email | |
b9ddb2d5 | 23 | */ |
24 | ||
60d7078a | 25 | defined('MOODLE_INTERNAL') || die(); |
b9ddb2d5 | 26 | |
6bc1e5d5 | 27 | require_once($CFG->libdir.'/authlib.php'); |
b9ddb2d5 | 28 | |
29 | /** | |
30 | * Email authentication plugin. | |
31 | */ | |
6bc1e5d5 | 32 | class auth_plugin_email extends auth_plugin_base { |
b9ddb2d5 | 33 | |
34 | /** | |
35 | * Constructor. | |
36 | */ | |
4a89e83b | 37 | public function __construct() { |
6bc1e5d5 | 38 | $this->authtype = 'email'; |
037273d8 | 39 | $this->config = get_config('auth_email'); |
b9ddb2d5 | 40 | } |
41 | ||
4a89e83b MG |
42 | /** |
43 | * Old syntax of class constructor. Deprecated in PHP7. | |
44 | * | |
45 | * @deprecated since Moodle 3.1 | |
46 | */ | |
47 | public function auth_plugin_email() { | |
48 | debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER); | |
49 | self::__construct(); | |
50 | } | |
51 | ||
b9ddb2d5 | 52 | /** |
53 | * Returns true if the username and password work and false if they are | |
54 | * wrong or don't exist. | |
55 | * | |
56 | * @param string $username The username | |
57 | * @param string $password The password | |
139ebfdb | 58 | * @return bool Authentication success or failure. |
b9ddb2d5 | 59 | */ |
60 | function user_login ($username, $password) { | |
be544ec3 | 61 | global $CFG, $DB; |
62 | if ($user = $DB->get_record('user', array('username'=>$username, 'mnethostid'=>$CFG->mnet_localhost_id))) { | |
b9ddb2d5 | 63 | return validate_internal_user_password($user, $password); |
64 | } | |
65 | return false; | |
66 | } | |
67 | ||
fb5c7739 | 68 | /** |
b9ddb2d5 | 69 | * Updates the user's password. |
70 | * | |
71 | * called when the user password is updated. | |
72 | * | |
c57dcb62 | 73 | * @param object $user User table object (with system magic quotes) |
74 | * @param string $newpassword Plaintext password (with system magic quotes) | |
b9ddb2d5 | 75 | * @return boolean result |
76 | * | |
77 | */ | |
da249a30 | 78 | function user_update_password($user, $newpassword) { |
79 | $user = get_complete_user_data('id', $user->id); | |
ec2d8ceb SC |
80 | // This will also update the stored hash to the latest algorithm |
81 | // if the existing hash is using an out-of-date algorithm (or the | |
82 | // legacy md5 algorithm). | |
b9ddb2d5 | 83 | return update_internal_user_password($user, $newpassword); |
84 | } | |
85 | ||
6bc1e5d5 | 86 | function can_signup() { |
87 | return true; | |
88 | } | |
89 | ||
430759a5 | 90 | /** |
b9ddb2d5 | 91 | * Sign up a new user ready for confirmation. |
dd0feda5 | 92 | * Password is passed in plaintext. |
93 | * | |
5d910388 | 94 | * @param object $user new user object |
dd0feda5 | 95 | * @param boolean $notify print notice with link and terminate |
b9ddb2d5 | 96 | */ |
6b8ad965 | 97 | function user_signup($user, $notify=true) { |
d6a25bc4 JL |
98 | // Standard signup, without custom confirmatinurl. |
99 | return $this->user_signup_with_confirmation($user, $notify); | |
100 | } | |
101 | ||
102 | /** | |
103 | * Sign up a new user ready for confirmation. | |
104 | * | |
105 | * Password is passed in plaintext. | |
106 | * A custom confirmationurl could be used. | |
107 | * | |
108 | * @param object $user new user object | |
109 | * @param boolean $notify print notice with link and terminate | |
110 | * @param string $confirmationurl user confirmation URL | |
111 | * @return boolean true if everything well ok and $notify is set to true | |
112 | * @throws moodle_exception | |
113 | * @since Moodle 3.2 | |
114 | */ | |
115 | public function user_signup_with_confirmation($user, $notify=true, $confirmationurl = null) { | |
feb23f1b | 116 | global $CFG, $DB, $SESSION; |
831d450e | 117 | require_once($CFG->dirroot.'/user/profile/lib.php'); |
bb78e249 | 118 | require_once($CFG->dirroot.'/user/lib.php'); |
5117d598 | 119 | |
1d658535 | 120 | $plainpassword = $user->password; |
dd0feda5 | 121 | $user->password = hash_internal_user_password($user->password); |
8bf0f207 MN |
122 | if (empty($user->calendartype)) { |
123 | $user->calendartype = $CFG->calendartype; | |
124 | } | |
dd0feda5 | 125 | |
9363073b | 126 | $user->id = user_create_user($user, false, false); |
5117d598 | 127 | |
1d658535 PS |
128 | user_add_password_history($user->id, $plainpassword); |
129 | ||
bb78e249 | 130 | // Save any custom profile field information. |
831d450e | 131 | profile_save_data($user); |
132 | ||
feb23f1b EV |
133 | // Save wantsurl against user's profile, so we can return them there upon confirmation. |
134 | if (!empty($SESSION->wantsurl)) { | |
135 | set_user_preference('auth_email_wantsurl', $SESSION->wantsurl, $user); | |
136 | } | |
137 | ||
9363073b RT |
138 | // Trigger event. |
139 | \core\event\user_created::create_from_userid($user->id)->trigger(); | |
140 | ||
d6a25bc4 JL |
141 | if (! send_confirmation_email($user, $confirmationurl)) { |
142 | print_error('auth_emailnoemail', 'auth_email'); | |
b9ddb2d5 | 143 | } |
144 | ||
145 | if ($notify) { | |
07ed083e | 146 | global $CFG, $PAGE, $OUTPUT; |
b9ddb2d5 | 147 | $emailconfirm = get_string('emailconfirm'); |
cfc5b79b | 148 | $PAGE->navbar->add($emailconfirm); |
149 | $PAGE->set_title($emailconfirm); | |
c93fdc7b | 150 | $PAGE->set_heading($PAGE->course->fullname); |
cfc5b79b | 151 | echo $OUTPUT->header(); |
b9ddb2d5 | 152 | notice(get_string('emailconfirmsent', '', $user->email), "$CFG->wwwroot/index.php"); |
dd0feda5 | 153 | } else { |
154 | return true; | |
139ebfdb | 155 | } |
b9ddb2d5 | 156 | } |
157 | ||
6bc1e5d5 | 158 | /** |
159 | * Returns true if plugin allows confirming of new users. | |
160 | * | |
161 | * @return bool | |
162 | */ | |
163 | function can_confirm() { | |
164 | return true; | |
165 | } | |
166 | ||
430759a5 | 167 | /** |
b9ddb2d5 | 168 | * Confirm the new user as registered. |
dd0feda5 | 169 | * |
b9a66360 | 170 | * @param string $username |
171 | * @param string $confirmsecret | |
b9ddb2d5 | 172 | */ |
173 | function user_confirm($username, $confirmsecret) { | |
feb23f1b | 174 | global $DB, $SESSION; |
b9ddb2d5 | 175 | $user = get_complete_user_data('username', $username); |
176 | ||
177 | if (!empty($user)) { | |
4f8b6d56 | 178 | if ($user->auth != $this->authtype) { |
dd0feda5 | 179 | return AUTH_CONFIRM_ERROR; |
180 | ||
4f8b6d56 MG |
181 | } else if ($user->secret == $confirmsecret && $user->confirmed) { |
182 | return AUTH_CONFIRM_ALREADY; | |
183 | ||
b9a66360 | 184 | } else if ($user->secret == $confirmsecret) { // They have provided the secret key to get in |
f685e830 | 185 | $DB->set_field("user", "confirmed", 1, array("id"=>$user->id)); |
feb23f1b EV |
186 | |
187 | if ($wantsurl = get_user_preferences('auth_email_wantsurl', false, $user)) { | |
188 | // Ensure user gets returned to page they were trying to access before signing up. | |
189 | $SESSION->wantsurl = $wantsurl; | |
190 | unset_user_preference('auth_email_wantsurl', $user); | |
191 | } | |
192 | ||
b9ddb2d5 | 193 | return AUTH_CONFIRM_OK; |
194 | } | |
dd0feda5 | 195 | } else { |
196 | return AUTH_CONFIRM_ERROR; | |
b9ddb2d5 | 197 | } |
198 | } | |
199 | ||
edb5da83 PS |
200 | function prevent_local_passwords() { |
201 | return false; | |
202 | } | |
203 | ||
b9ddb2d5 | 204 | /** |
205 | * Returns true if this authentication plugin is 'internal'. | |
206 | * | |
139ebfdb | 207 | * @return bool |
b9ddb2d5 | 208 | */ |
209 | function is_internal() { | |
210 | return true; | |
211 | } | |
139ebfdb | 212 | |
b9ddb2d5 | 213 | /** |
214 | * Returns true if this authentication plugin can change the user's | |
215 | * password. | |
216 | * | |
139ebfdb | 217 | * @return bool |
b9ddb2d5 | 218 | */ |
219 | function can_change_password() { | |
220 | return true; | |
221 | } | |
139ebfdb | 222 | |
b9ddb2d5 | 223 | /** |
430759a5 | 224 | * Returns the URL for changing the user's pw, or empty if the default can |
b9ddb2d5 | 225 | * be used. |
226 | * | |
99f9f85f | 227 | * @return moodle_url |
b9ddb2d5 | 228 | */ |
229 | function change_password_url() { | |
99f9f85f | 230 | return null; // use default internal method |
430759a5 | 231 | } |
232 | ||
233 | /** | |
234 | * Returns true if plugin allows resetting of internal password. | |
235 | * | |
236 | * @return bool | |
237 | */ | |
238 | function can_reset_password() { | |
239 | return true; | |
b9ddb2d5 | 240 | } |
139ebfdb | 241 | |
9b29f686 MN |
242 | /** |
243 | * Returns true if plugin can be manually set. | |
244 | * | |
245 | * @return bool | |
246 | */ | |
247 | function can_be_manually_set() { | |
248 | return true; | |
249 | } | |
250 | ||
9b5f87d2 | 251 | /** |
0f7f3002 | 252 | * Returns whether or not the captcha element is enabled. |
9b5f87d2 | 253 | * @return bool |
254 | */ | |
255 | function is_captcha_enabled() { | |
037273d8 | 256 | return get_config("auth_{$this->authtype}", 'recaptcha'); |
9b5f87d2 | 257 | } |
139ebfdb | 258 | |
b9ddb2d5 | 259 | } |
260 | ||
5117d598 | 261 |