Skip to content

Commit 3fd9dde

Browse files
committed
feature: LDAP auto credential fill for extensions
1 parent f73487a commit 3fd9dde

File tree

4 files changed

+57
-4
lines changed

4 files changed

+57
-4
lines changed

app/Http/Controllers/API/AuthController.php

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use App\Classes\LDAPSearchOptions;
77
use App\Http\Controllers\Controller;
88
use App\Models\AuthLog;
9+
use App\Models\Extension;
910
use App\Models\LdapRestriction;
1011
use App\Models\Oauth2Token;
1112
use App\Models\Permission;
@@ -505,12 +506,24 @@ private function authWithLdap(Request $request, bool $create = false)
505506
]);
506507
}
507508

508-
foreach (Server::where('ip_address', trim(env('LDAP_HOST')))->get() as $server) {
509-
$encKey = env('APP_KEY').$user->id.$server->id;
509+
$extensionWithLdap = Extension::where('ldap_support', true)->get();
510+
$serverList = [];
511+
foreach ($extensionWithLdap as $extension) {
512+
$serverList = array_merge($serverList, $extension->servers()->get()->toArray());
513+
}
514+
$serverList = [
515+
...$serverList,
516+
...Server::where('ip_address', trim(env('LDAP_HOST')))->get(),
517+
];
518+
// Check if server list is unique by id
519+
$serverList = collect($serverList)->unique('id')->values();
520+
521+
foreach ($serverList as $server) {
522+
$encKey = env('APP_KEY').$user->id.$server['id'];
510523
$encrypted = AES256::encrypt($request->email, $encKey);
511524
UserSettings::firstOrCreate([
512525
'user_id' => $user->id,
513-
'server_id' => $server->id,
526+
'server_id' => $server['id'],
514527
'name' => 'clientUsername',
515528
], [
516529
'value' => $encrypted,
@@ -520,7 +533,7 @@ private function authWithLdap(Request $request, bool $create = false)
520533

521534
UserSettings::firstOrCreate([
522535
'user_id' => $user->id,
523-
'server_id' => $server->id,
536+
'server_id' => $server['id'],
524537
'name' => 'clientPassword',
525538
], [
526539
'value' => $encrypted,

app/Http/Controllers/API/ExtensionController.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,13 @@ private function checkForMissingSettings($extension)
244244
$extra = ['clientUsername', 'clientPassword'];
245245
}
246246
foreach ($extension['database'] as $setting) {
247+
if (
248+
($setting['variable'] == 'clientUsername') ||
249+
($setting['variable'] == 'clientPassword')
250+
) {
251+
continue;
252+
}
253+
247254
if (isset($setting['required']) && $setting['required'] === false) {
248255
continue;
249256
}

app/Models/Extension.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class Extension extends Model
3434
'require_key',
3535
'status',
3636
'license_type',
37+
'ldap_support',
3738
];
3839

3940
protected $casts = [
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Database\Schema\Blueprint;
5+
use Illuminate\Support\Facades\Schema;
6+
7+
return new class extends Migration
8+
{
9+
/**
10+
* Run the migrations.
11+
*
12+
* @return void
13+
*/
14+
public function up()
15+
{
16+
Schema::table('extensions', function (Blueprint $table) {
17+
$table->boolean('ldap_support')->default(false);
18+
});
19+
}
20+
21+
/**
22+
* Reverse the migrations.
23+
*
24+
* @return void
25+
*/
26+
public function down()
27+
{
28+
Schema::table('extensions', function (Blueprint $table) {
29+
//
30+
});
31+
}
32+
};

0 commit comments

Comments
 (0)