Skip to content

Commit c09de6a

Browse files
committed
hotfix: LDAP group users cannot login to Liman
1 parent aa4c029 commit c09de6a

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

app/Http/Controllers/API/AuthController.php

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,13 @@ private function authWithLdap(Request $request, bool $create = false)
430430
$objectguid = bin2hex($ldapUser[$guidColumn]);
431431

432432
$userGroups = $ldapUser['memberof'] ?? [];
433+
if (is_string($userGroups)) {
434+
$userGroups = [$userGroups];
435+
}
436+
$userGroups = array_map(function ($item) {
437+
// Convert CN=a,OU=b,DC=A,DC=B format to a
438+
return explode(',', explode('=', $item)[1])[0];
439+
}, $userGroups);
433440

434441
$user = User::where('objectguid', $objectguid)->first();
435442

@@ -490,8 +497,8 @@ private function authWithLdap(Request $request, bool $create = false)
490497
}
491498

492499
RoleUser::where('user_id', $user->id)->where('type', 'ldap')->delete();
493-
if (isset($ldapUser['memberof'])) {
494-
foreach ($ldapUser['memberof'] as $row) {
500+
if (isset($userGroups) && is_array($userGroups) && count($userGroups) > 0) {
501+
foreach ($userGroups as $row) {
495502
RoleMapping::where('group_id', md5($row))->get()->map(function ($item) use ($user) {
496503
RoleUser::firstOrCreate([
497504
'user_id' => $user->id,
@@ -516,7 +523,9 @@ private function authWithLdap(Request $request, bool $create = false)
516523
$keys = [];
517524
foreach ($extensionWithLdap as $extension) {
518525
$extensionJson = getExtensionJson($extension->name);
519-
$extensionServers = $extension->servers()->get()->toArray();
526+
$extensionServers = $extension->servers()->get()->filter(function ($server) use ($user) {
527+
return Permission::can($user->id, 'server', 'id', $server->id);
528+
})->toArray();
520529
foreach ($extensionServers as $server) {
521530
if (! isset($extensionJson['ldap_support_fields'])) {
522531
$keys[$server['id']] = [
@@ -534,7 +543,9 @@ private function authWithLdap(Request $request, bool $create = false)
534543
...Server::where('ip_address', trim(env('LDAP_HOST')))->get(),
535544
];
536545
// Check if server list is unique by id
537-
$serverList = collect($serverList)->unique('id')->values();
546+
$serverList = collect($serverList)->filter(function ($server) use ($user) {
547+
return Permission::can($user->id, 'server', 'id', $server['id']);
548+
})->unique('id')->values();
538549

539550
foreach ($serverList as $server) {
540551
$encKey = env('APP_KEY').$user->id.$server['id'];

0 commit comments

Comments
 (0)