* Class LdapService
* Handles any app-specific LDAP tasks.
*/
-class LdapService extends ExternalAuthService
+class LdapService
{
- protected $ldap;
+ protected Ldap $ldap;
+ protected GroupSyncService $groupSyncService;
+ protected UserAvatars $userAvatars;
+
+ /**
+ * @var resource
+ */
protected $ldapConnection;
- protected $userAvatars;
- protected $config;
- protected $enabled;
+
+ protected array $config;
+ protected bool $enabled;
/**
* LdapService constructor.
*/
- public function __construct(Ldap $ldap, UserAvatars $userAvatars)
+ public function __construct(Ldap $ldap, UserAvatars $userAvatars, GroupSyncService $groupSyncService)
{
$this->ldap = $ldap;
$this->userAvatars = $userAvatars;
+ $this->groupSyncService = $groupSyncService;
$this->config = config('services.ldap');
$this->enabled = config('auth.method') === 'ldap';
}
/**
* Check if groups should be synced.
- *
- * @return bool
*/
- public function shouldSyncGroups()
+ public function shouldSyncGroups(): bool
{
return $this->enabled && $this->config['user_to_groups'] !== false;
}
* Bind the system user to the LDAP connection using the given credentials
* otherwise anonymous access is attempted.
*
- * @param $connection
+ * @param resource $connection
*
* @throws LdapException
*/
* Get the groups a user is a part of on ldap.
*
* @throws LdapException
+ * @throws JsonDebugException
*/
public function getUserGroups(string $userName): array
{
}
$userGroups = $this->groupFilter($user);
- $userGroups = $this->getGroupsRecursive($userGroups, []);
+ $allGroups = $this->getGroupsRecursive($userGroups, []);
+
+ if ($this->config['dump_user_groups']) {
+ throw new JsonDebugException([
+ 'details_from_ldap' => $user,
+ 'parsed_direct_user_groups' => $userGroups,
+ 'parsed_recursive_user_groups' => $allGroups,
+ ]);
+ }
- return $userGroups;
+ return $allGroups;
}
/**
* Sync the LDAP groups to the user roles for the current user.
*
* @throws LdapException
+ * @throws JsonDebugException
*/
public function syncGroups(User $user, string $username)
{
$userLdapGroups = $this->getUserGroups($username);
- $this->syncWithGroups($user, $userLdapGroups);
+ $this->groupSyncService->syncUserWithFoundGroups($user, $userLdapGroups, $this->config['remove_from_groups']);
}
/**