@@ -21,6 +21,7 @@ class AzureActiveDirectory extends Plugin
21
21
public const SETTING_MANAGEMENT_LOGIN_ENABLE = 'management_login_enable ' ;
22
22
public const SETTING_MANAGEMENT_LOGIN_NAME = 'management_login_name ' ;
23
23
public const SETTING_PROVISION_USERS = 'provisioning ' ;
24
+ public const SETTING_UPDATE_USERS = 'update_users ' ;
24
25
public const SETTING_GROUP_ID_ADMIN = 'group_id_admin ' ;
25
26
public const SETTING_GROUP_ID_SESSION_ADMIN = 'group_id_session_admin ' ;
26
27
public const SETTING_GROUP_ID_TEACHER = 'group_id_teacher ' ;
@@ -47,6 +48,7 @@ protected function __construct()
47
48
self ::SETTING_MANAGEMENT_LOGIN_ENABLE => 'boolean ' ,
48
49
self ::SETTING_MANAGEMENT_LOGIN_NAME => 'text ' ,
49
50
self ::SETTING_PROVISION_USERS => 'boolean ' ,
51
+ self ::SETTING_UPDATE_USERS => 'boolean ' ,
50
52
self ::SETTING_GROUP_ID_ADMIN => 'text ' ,
51
53
self ::SETTING_GROUP_ID_SESSION_ADMIN => 'text ' ,
52
54
self ::SETTING_GROUP_ID_TEACHER => 'text ' ,
@@ -209,44 +211,36 @@ public function registerUser(
209
211
if (empty ($ userId )) {
210
212
// If we didn't find the user
211
213
if ($ this ->get (self ::SETTING_PROVISION_USERS ) === 'true ' ) {
212
- [$ userRole , $ isAdmin ] = $ this ->getUserRoleAndCheckIsAdmin (
213
- $ token ,
214
- $ provider ,
215
- $ apiGroupsRef ,
216
- $ objectIdKey
217
- );
218
-
219
- $ phone = null ;
220
-
221
- if (isset ($ azureUserInfo ['telephoneNumber ' ])) {
222
- $ phone = $ azureUserInfo ['telephoneNumber ' ];
223
- } elseif (isset ($ azureUserInfo ['businessPhones ' ][0 ])) {
224
- $ phone = $ azureUserInfo ['businessPhones ' ][0 ];
225
- } elseif (isset ($ azureUserInfo ['mobilePhone ' ])) {
226
- $ phone = $ azureUserInfo ['mobilePhone ' ];
227
- }
214
+ [
215
+ $ firstNme ,
216
+ $ lastName ,
217
+ $ username ,
218
+ $ email ,
219
+ $ phone ,
220
+ $ authSource ,
221
+ $ active ,
222
+ $ extra ,
223
+ $ userRole ,
224
+ $ isAdmin ,
225
+ ] = $ this ->formatUserData ($ token , $ provider , $ azureUserInfo , $ apiGroupsRef , $ objectIdKey , $ azureUidKey );
228
226
229
227
// If the option is set to create users, create it
230
228
$ userId = UserManager::create_user (
231
- $ azureUserInfo [ ' givenName ' ] ,
232
- $ azureUserInfo [ ' surname ' ] ,
229
+ $ firstNme ,
230
+ $ lastName ,
233
231
$ userRole ,
234
- $ azureUserInfo [ ' mail ' ] ,
235
- $ azureUserInfo [ ' userPrincipalName ' ] ,
232
+ $ email ,
233
+ $ username ,
236
234
'' ,
237
235
null ,
238
236
null ,
239
237
$ phone ,
240
238
null ,
241
- ' azure ' ,
239
+ $ authSource ,
242
240
null ,
243
- ( $ azureUserInfo [ ' accountEnabled ' ] ? 1 : 0 ) ,
241
+ $ active ,
244
242
null ,
245
- [
246
- 'extra_ ' .self ::EXTRA_FIELD_ORGANISATION_EMAIL => $ azureUserInfo ['mail ' ],
247
- 'extra_ ' .self ::EXTRA_FIELD_AZURE_ID => $ azureUserInfo ['mailNickname ' ],
248
- 'extra_ ' .self ::EXTRA_FIELD_AZURE_UID => $ azureUserInfo [$ azureUidKey ],
249
- ],
243
+ $ extra ,
250
244
null ,
251
245
null ,
252
246
$ isAdmin
@@ -257,11 +251,101 @@ public function registerUser(
257
251
} else {
258
252
throw new Exception ('User not found when checking the extra fields from ' .$ azureUserInfo ['mail ' ].' or ' .$ azureUserInfo ['mailNickname ' ].' or ' .$ azureUserInfo [$ azureUidKey ].'. ' );
259
253
}
254
+ } else {
255
+ if ($ this ->get (self ::SETTING_UPDATE_USERS ) === 'true ' ) {
256
+ [
257
+ $ firstNme ,
258
+ $ lastName ,
259
+ $ username ,
260
+ $ email ,
261
+ $ phone ,
262
+ $ authSource ,
263
+ $ active ,
264
+ $ extra ,
265
+ $ userRole ,
266
+ $ isAdmin ,
267
+ ] = $ this ->formatUserData ($ token , $ provider , $ azureUserInfo , $ apiGroupsRef , $ objectIdKey , $ azureUidKey );
268
+
269
+ $ userId = UserManager::update_user (
270
+ $ userId ,
271
+ $ firstNme ,
272
+ $ lastName ,
273
+ $ username ,
274
+ '' ,
275
+ $ authSource ,
276
+ $ email ,
277
+ $ userRole ,
278
+ null ,
279
+ $ phone ,
280
+ null ,
281
+ null ,
282
+ $ active ,
283
+ null ,
284
+ 0 ,
285
+ $ extra
286
+ );
287
+
288
+ if (!$ userId ) {
289
+ throw new Exception (get_lang ('CouldNotUpdateUser ' ).' ' .$ azureUserInfo ['userPrincipalName ' ]);
290
+ }
291
+ }
260
292
}
261
293
262
294
return $ userId ;
263
295
}
264
296
297
+ private function formatUserData (
298
+ AccessTokenInterface $ token ,
299
+ Azure $ provider ,
300
+ array $ azureUserInfo ,
301
+ string $ apiGroupsRef ,
302
+ string $ objectIdKey ,
303
+ string $ azureUidKey
304
+ ): array {
305
+ [$ userRole , $ isAdmin ] = $ this ->getUserRoleAndCheckIsAdmin (
306
+ $ token ,
307
+ $ provider ,
308
+ $ apiGroupsRef ,
309
+ $ objectIdKey
310
+ );
311
+
312
+ $ phone = null ;
313
+
314
+ if (isset ($ azureUserInfo ['telephoneNumber ' ])) {
315
+ $ phone = $ azureUserInfo ['telephoneNumber ' ];
316
+ } elseif (isset ($ azureUserInfo ['businessPhones ' ][0 ])) {
317
+ $ phone = $ azureUserInfo ['businessPhones ' ][0 ];
318
+ } elseif (isset ($ azureUserInfo ['mobilePhone ' ])) {
319
+ $ phone = $ azureUserInfo ['mobilePhone ' ];
320
+ }
321
+
322
+ // If the option is set to create users, create it
323
+ $ firstNme = $ azureUserInfo ['givenName ' ];
324
+ $ lastName = $ azureUserInfo ['surname ' ];
325
+ $ email = $ azureUserInfo ['mail ' ];
326
+ $ username = $ azureUserInfo ['userPrincipalName ' ];
327
+ $ authSource = 'azure ' ;
328
+ $ active = ($ azureUserInfo ['accountEnabled ' ] ? 1 : 0 );
329
+ $ extra = [
330
+ 'extra_ ' .self ::EXTRA_FIELD_ORGANISATION_EMAIL => $ azureUserInfo ['mail ' ],
331
+ 'extra_ ' .self ::EXTRA_FIELD_AZURE_ID => $ azureUserInfo ['mailNickname ' ],
332
+ 'extra_ ' .self ::EXTRA_FIELD_AZURE_UID => $ azureUserInfo [$ azureUidKey ],
333
+ ];
334
+
335
+ return [
336
+ $ firstNme ,
337
+ $ lastName ,
338
+ $ username ,
339
+ $ email ,
340
+ $ phone ,
341
+ $ authSource ,
342
+ $ active ,
343
+ $ extra ,
344
+ $ userRole ,
345
+ $ isAdmin ,
346
+ ];
347
+ }
348
+
265
349
private function getUserRoleAndCheckIsAdmin (
266
350
AccessTokenInterface $ token ,
267
351
Azure $ provider = null ,
0 commit comments