Skip to content

Commit 331d9fa

Browse files
committed
Plugin: Azure: Add option to deactivate non-existing users in Azure when running sync_users script - refs BT#21930
1 parent 6949a07 commit 331d9fa

File tree

7 files changed

+41
-0
lines changed

7 files changed

+41
-0
lines changed

plugin/azure_active_directory/lang/dutch.php

+2
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,5 @@
4444
$strings['additional_interaction_required'] = 'Er is aanvullende interactie vereist om u te authenticeren. Log rechtstreeks in via <a href="https://login.microsoftonline.com" target="_blank">uw authenticatiesysteem</a> en kom dan terug naar deze pagina om in te loggen.';
4545
$strings['tenant_id'] = 'Mandanten-ID';
4646
$strings['tenant_id_help'] = 'Required to run scripts.';
47+
$strings['deactivate_nonexisting_users'] = 'Deactivate non-existing users';
48+
$strings['deactivate_nonexisting_users_help'] = 'Compare registered users in Chamilo with those in Azure and deactivate accounts in Chamilo that do not exist in Azure.';

plugin/azure_active_directory/lang/english.php

+2
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,5 @@
4444
$strings['additional_interaction_required'] = 'Some additional interaction is required to authenticate you. Please login directly through <a href="https://login.microsoftonline.com" target="_blank">your authentication system</a>, then come back to this page to login.';
4545
$strings['tenant_id'] = 'Tenant ID';
4646
$strings['tenant_id_help'] = 'Required to run scripts.';
47+
$strings['deactivate_nonexisting_users'] = 'Deactivate non-existing users';
48+
$strings['deactivate_nonexisting_users_help'] = 'Compare registered users in Chamilo with those in Azure and deactivate accounts in Chamilo that do not exist in Azure.';

plugin/azure_active_directory/lang/french.php

+2
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,5 @@
4444
$strings['additional_interaction_required'] = 'Une interaction supplémentaire est nécessaire pour vous authentifier. Veuillez vous connecter directement auprès de <a href="https://login.microsoftonline.com" target="_blank">votre système d\'authentification</a>, puis revenir ici pour vous connecter.';
4545
$strings['tenant_id'] = 'ID du client';
4646
$strings['tenant_id_help'] = 'Nécessaire pour exécuter des scripts.';
47+
$strings['deactivate_nonexisting_users'] = 'Deactivate non-existing users';
48+
$strings['deactivate_nonexisting_users_help'] = 'Compare registered users in Chamilo with those in Azure and deactivate accounts in Chamilo that do not exist in Azure.';

plugin/azure_active_directory/lang/spanish.php

+2
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,5 @@
4444
$strings['additional_interaction_required'] = 'Alguna interacción adicional es necesaria para identificarlo/a. Por favor conéctese primero a través de su <a href="https://login.microsoftonline.com" target="_blank">sistema de autenticación</a>, luego regrese aquí para logearse.';
4545
$strings['tenant_id'] = 'Id. del inquilino';
4646
$strings['tenant_id_help'] = 'Necesario para ejecutar scripts.';
47+
$strings['deactivate_nonexisting_users'] = 'Desactivar usuarios no existentes';
48+
$strings['deactivate_nonexisting_users_help'] = 'Compara los usuarios registrados en Chamilo con los de Azure y desactiva las cuentas en Chamilo que no existan en Azure.';

plugin/azure_active_directory/src/AzureActiveDirectory.php

+2
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class AzureActiveDirectory extends Plugin
2727
public const SETTING_GROUP_ID_TEACHER = 'group_id_teacher';
2828
public const SETTING_EXISTING_USER_VERIFICATION_ORDER = 'existing_user_verification_order';
2929
public const SETTING_TENANT_ID = 'tenant_id';
30+
public const SETTING_DEACTIVATE_NONEXISTING_USERS = 'deactivate_nonexisting_users';
3031

3132
public const URL_TYPE_AUTHORIZE = 'login';
3233
public const URL_TYPE_LOGOUT = 'logout';
@@ -55,6 +56,7 @@ protected function __construct()
5556
self::SETTING_GROUP_ID_TEACHER => 'text',
5657
self::SETTING_EXISTING_USER_VERIFICATION_ORDER => 'text',
5758
self::SETTING_TENANT_ID => 'text',
59+
self::SETTING_DEACTIVATE_NONEXISTING_USERS => 'boolean',
5860
];
5961

6062
parent::__construct('2.3', 'Angel Fernando Quiroz Campos, Yannick Warnier', $settings);

plugin/azure_active_directory/src/scripts/sync_users.php

+26
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@
4646

4747
printf("%s - Number of users obtained %d".PHP_EOL, time(), count($azureUsersInfo));
4848

49+
$existingUsers = [];
50+
4951
/** @var array $user */
5052
foreach ($azureUsersInfo as $azureUserInfo) {
5153
try {
@@ -58,6 +60,8 @@
5860
'id'
5961
);
6062

63+
$existingUsers[] = $userId;
64+
6165
$userInfo = api_get_user_info($userId);
6266

6367
printf("%s - UserInfo %s".PHP_EOL, time(), serialize($userInfo));
@@ -67,3 +71,25 @@
6771
continue;
6872
}
6973
}
74+
75+
if ('true' === $plugin->get(AzureActiveDirectory::SETTING_DEACTIVATE_NONEXISTING_USERS)) {
76+
echo '----------------'.PHP_EOL;
77+
printf('Trying deactivate non-existing users in Azure.'.PHP_EOL, time());
78+
79+
$users = UserManager::getRepository()->findByAuthSource('azure');
80+
$userIdList = array_map(
81+
function ($user) {
82+
return $user->getId();
83+
},
84+
$users
85+
);
86+
87+
$nonExistingUsers = array_diff($userIdList, $existingUsers);
88+
89+
UserManager::deactivate_users($nonExistingUsers);
90+
printf(
91+
"%d - Deactivated users IDs: %s".PHP_EOL,
92+
time(),
93+
implode(', ', $nonExistingUsers)
94+
);
95+
}

src/Chamilo/UserBundle/Repository/UserRepository.php

+5
Original file line numberDiff line numberDiff line change
@@ -1382,4 +1382,9 @@ public function getLastLogin(User $user)
13821382
->getQuery()
13831383
->getOneOrNullResult();
13841384
}
1385+
1386+
public function findByAuthSource(string $authSource): array
1387+
{
1388+
return $this->findBy(['authSource' => $authSource]);
1389+
}
13851390
}

0 commit comments

Comments
 (0)