]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - includes/AuthPlugin.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / includes / AuthPlugin.php
1 <?php
2 /**
3  * Authentication plugin interface
4  *
5  * Copyright © 2004 Brion Vibber <brion@pobox.com>
6  * https://www.mediawiki.org/
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License along
19  * with this program; if not, write to the Free Software Foundation, Inc.,
20  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  * http://www.gnu.org/copyleft/gpl.html
22  *
23  * @file
24  */
25
26 /**
27  * Authentication plugin interface. Instantiate a subclass of AuthPlugin
28  * and set $wgAuth to it to authenticate against some external tool.
29  *
30  * The default behavior is not to do anything, and use the local user
31  * database for all authentication. A subclass can require that all
32  * accounts authenticate externally, or use it only as a fallback; also
33  * you can transparently create internal wiki accounts the first time
34  * someone logs in who can be authenticated externally.
35  *
36  * @deprecated since 1.27
37  */
38 class AuthPlugin {
39         /**
40          * @var string
41          */
42         protected $domain;
43
44         /**
45          * Check whether there exists a user account with the given name.
46          * The name will be normalized to MediaWiki's requirements, so
47          * you might need to munge it (for instance, for lowercase initial
48          * letters).
49          *
50          * @param string $username Username.
51          * @return bool
52          */
53         public function userExists( $username ) {
54                 # Override this!
55                 return false;
56         }
57
58         /**
59          * Check if a username+password pair is a valid login.
60          * The name will be normalized to MediaWiki's requirements, so
61          * you might need to munge it (for instance, for lowercase initial
62          * letters).
63          *
64          * @param string $username Username.
65          * @param string $password User password.
66          * @return bool
67          */
68         public function authenticate( $username, $password ) {
69                 # Override this!
70                 return false;
71         }
72
73         /**
74          * Modify options in the login template.
75          *
76          * @param BaseTemplate &$template
77          * @param string &$type 'signup' or 'login'. Added in 1.16.
78          */
79         public function modifyUITemplate( &$template, &$type ) {
80                 # Override this!
81                 $template->set( 'usedomain', false );
82         }
83
84         /**
85          * Set the domain this plugin is supposed to use when authenticating.
86          *
87          * @param string $domain Authentication domain.
88          */
89         public function setDomain( $domain ) {
90                 $this->domain = $domain;
91         }
92
93         /**
94          * Get the user's domain
95          *
96          * @return string
97          */
98         public function getDomain() {
99                 if ( isset( $this->domain ) ) {
100                         return $this->domain;
101                 } else {
102                         return 'invaliddomain';
103                 }
104         }
105
106         /**
107          * Check to see if the specific domain is a valid domain.
108          *
109          * @param string $domain Authentication domain.
110          * @return bool
111          */
112         public function validDomain( $domain ) {
113                 # Override this!
114                 return true;
115         }
116
117         /**
118          * When a user logs in, optionally fill in preferences and such.
119          * For instance, you might pull the email address or real name from the
120          * external user database.
121          *
122          * The User object is passed by reference so it can be modified; don't
123          * forget the & on your function declaration.
124          *
125          * @deprecated since 1.26, use the UserLoggedIn hook instead. And assigning
126          *  a different User object to $user is no longer supported.
127          * @param User &$user
128          * @return bool
129          */
130         public function updateUser( &$user ) {
131                 # Override this and do something
132                 return true;
133         }
134
135         /**
136          * Return true if the wiki should create a new local account automatically
137          * when asked to login a user who doesn't exist locally but does in the
138          * external auth database.
139          *
140          * If you don't automatically create accounts, you must still create
141          * accounts in some way. It's not possible to authenticate without
142          * a local account.
143          *
144          * This is just a question, and shouldn't perform any actions.
145          *
146          * @return bool
147          */
148         public function autoCreate() {
149                 return false;
150         }
151
152         /**
153          * Allow a property change? Properties are the same as preferences
154          * and use the same keys. 'Realname' 'Emailaddress' and 'Nickname'
155          * all reference this.
156          *
157          * @param string $prop
158          *
159          * @return bool
160          */
161         public function allowPropChange( $prop = '' ) {
162                 if ( $prop == 'realname' && is_callable( [ $this, 'allowRealNameChange' ] ) ) {
163                         return $this->allowRealNameChange();
164                 } elseif ( $prop == 'emailaddress' && is_callable( [ $this, 'allowEmailChange' ] ) ) {
165                         return $this->allowEmailChange();
166                 } elseif ( $prop == 'nickname' && is_callable( [ $this, 'allowNickChange' ] ) ) {
167                         return $this->allowNickChange();
168                 } else {
169                         return true;
170                 }
171         }
172
173         /**
174          * Can users change their passwords?
175          *
176          * @return bool
177          */
178         public function allowPasswordChange() {
179                 return true;
180         }
181
182         /**
183          * Should MediaWiki store passwords in its local database?
184          *
185          * @return bool
186          */
187         public function allowSetLocalPassword() {
188                 return true;
189         }
190
191         /**
192          * Set the given password in the authentication database.
193          * As a special case, the password may be set to null to request
194          * locking the password to an unusable value, with the expectation
195          * that it will be set later through a mail reset or other method.
196          *
197          * Return true if successful.
198          *
199          * @param User $user
200          * @param string $password Password.
201          * @return bool
202          */
203         public function setPassword( $user, $password ) {
204                 return true;
205         }
206
207         /**
208          * Update user information in the external authentication database.
209          * Return true if successful.
210          *
211          * @deprecated since 1.26, use the UserSaveSettings hook instead.
212          * @param User $user
213          * @return bool
214          */
215         public function updateExternalDB( $user ) {
216                 return true;
217         }
218
219         /**
220          * Update user groups in the external authentication database.
221          * Return true if successful.
222          *
223          * @deprecated since 1.26, use the UserGroupsChanged hook instead.
224          * @param User $user
225          * @param array $addgroups Groups to add.
226          * @param array $delgroups Groups to remove.
227          * @return bool
228          */
229         public function updateExternalDBGroups( $user, $addgroups, $delgroups = [] ) {
230                 return true;
231         }
232
233         /**
234          * Check to see if external accounts can be created.
235          * Return true if external accounts can be created.
236          * @return bool
237          */
238         public function canCreateAccounts() {
239                 return false;
240         }
241
242         /**
243          * Add a user to the external authentication database.
244          * Return true if successful.
245          *
246          * @param User $user Only the name should be assumed valid at this point
247          * @param string $password
248          * @param string $email
249          * @param string $realname
250          * @return bool
251          */
252         public function addUser( $user, $password, $email = '', $realname = '' ) {
253                 return true;
254         }
255
256         /**
257          * Return true to prevent logins that don't authenticate here from being
258          * checked against the local database's password fields.
259          *
260          * This is just a question, and shouldn't perform any actions.
261          *
262          * @return bool
263          */
264         public function strict() {
265                 return false;
266         }
267
268         /**
269          * Check if a user should authenticate locally if the global authentication fails.
270          * If either this or strict() returns true, local authentication is not used.
271          *
272          * @param string $username Username.
273          * @return bool
274          */
275         public function strictUserAuth( $username ) {
276                 return false;
277         }
278
279         /**
280          * When creating a user account, optionally fill in preferences and such.
281          * For instance, you might pull the email address or real name from the
282          * external user database.
283          *
284          * The User object is passed by reference so it can be modified; don't
285          * forget the & on your function declaration.
286          *
287          * @deprecated since 1.26, use the UserLoggedIn hook instead. And assigning
288          *  a different User object to $user is no longer supported.
289          * @param User &$user
290          * @param bool $autocreate True if user is being autocreated on login
291          */
292         public function initUser( &$user, $autocreate = false ) {
293                 # Override this to do something.
294         }
295
296         /**
297          * If you want to munge the case of an account name before the final
298          * check, now is your chance.
299          * @param string $username
300          * @return string
301          */
302         public function getCanonicalName( $username ) {
303                 return $username;
304         }
305
306         /**
307          * Get an instance of a User object
308          *
309          * @param User &$user
310          *
311          * @return AuthPluginUser
312          */
313         public function getUserInstance( User &$user ) {
314                 return new AuthPluginUser( $user );
315         }
316
317         /**
318          * Get a list of domains (in HTMLForm options format) used.
319          *
320          * @return array
321          */
322         public function domainList() {
323                 return [];
324         }
325 }
326
327 /**
328  * @deprecated since 1.27
329  */
330 class AuthPluginUser {
331         function __construct( $user ) {
332                 # Override this!
333         }
334
335         public function getId() {
336                 # Override this!
337                 return -1;
338         }
339
340         /**
341          * Indicate whether the user is locked
342          * @deprecated since 1.26, use the UserIsLocked hook instead.
343          * @return bool
344          */
345         public function isLocked() {
346                 # Override this!
347                 return false;
348         }
349
350         /**
351          * Indicate whether the user is hidden
352          * @deprecated since 1.26, use the UserIsHidden hook instead.
353          * @return bool
354          */
355         public function isHidden() {
356                 # Override this!
357                 return false;
358         }
359
360         /**
361          * @deprecated since 1.28, use SessionManager::invalidateSessionForUser() instead.
362          * @return bool
363          */
364         public function resetAuthToken() {
365                 # Override this!
366                 return true;
367         }
368 }