diff --git a/app/Console/Commands/LdapSync.php b/app/Console/Commands/LdapSync.php index c97add7d1b..523fc4ad0b 100755 --- a/app/Console/Commands/LdapSync.php +++ b/app/Console/Commands/LdapSync.php @@ -175,6 +175,8 @@ class LdapSync extends Command $tmp_pass = substr(str_shuffle('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), 0, 20); $pass = bcrypt($tmp_pass); + $manager_cache = []; + for ($i = 0; $i < $results['count']; $i++) { $item = []; $item['username'] = isset($results[$i][$ldap_result_username][0]) ? $results[$i][$ldap_result_username][0] : ''; @@ -217,34 +219,42 @@ class LdapSync extends Command $user->department_id = $department->id; if($item['manager'] != null) { - // Get the LDAP Manager - try { - $ldap_manager = Ldap::findLdapUsers($item['manager'], -1, $this->option('filter')); - } catch (\Exception $e) { - \Log::warn("Manager lookup caused an exception: ".$e->getMessage().". Falling back to direct username lookup"); - // Hail-mary for Okta manager 'shortnames' - will only work if - // Okta configuration is using full email-address-style usernames - $ldap_manager = [ - "count" => 1, - 0 => [ - $ldap_result_username => [$item['manager']] - ] - ]; - } - - if ($ldap_manager["count"] > 0) { - - // Get the Manager's username - // PHP LDAP returns every LDAP attribute as an array, and 90% of the time it's an array of just one item. But, hey, it's an array. - $ldapManagerUsername = $ldap_manager[0][$ldap_result_username][0]; - - // Get User from Manager username. - $ldap_manager = User::where('username', $ldapManagerUsername)->first(); - - if ( $ldap_manager && isset($ldap_manager->id) ) { - // Link user to manager id. - $user->manager_id = $ldap_manager->id; + // Check Cache first + if (isset($manager_cache[$item['manager']])) { + // found in cache; use that and avoid extra lookups + $user->manager_id = $manager_cache[$item['manager']]; + } else { + // Get the LDAP Manager + try { + $ldap_manager = Ldap::findLdapUsers($item['manager'], -1, $this->option('filter')); + } catch (\Exception $e) { + \Log::warn("Manager lookup caused an exception: " . $e->getMessage() . ". Falling back to direct username lookup"); + // Hail-mary for Okta manager 'shortnames' - will only work if + // Okta configuration is using full email-address-style usernames + $ldap_manager = [ + "count" => 1, + 0 => [ + $ldap_result_username => [$item['manager']] + ] + ]; } + + if ($ldap_manager["count"] > 0) { + + // Get the Manager's username + // PHP LDAP returns every LDAP attribute as an array, and 90% of the time it's an array of just one item. But, hey, it's an array. + $ldapManagerUsername = $ldap_manager[0][$ldap_result_username][0]; + + // Get User from Manager username. + $ldap_manager = User::where('username', $ldapManagerUsername)->first(); + + if ($ldap_manager && isset($ldap_manager->id)) { + // Link user to manager id. + $user->manager_id = $ldap_manager->id; + } + } + $manager_cache[$item['manager']] = $ldap_manager && isset($ldap_manager->id) ? $ldap_manager->id : null; // Store results in cache, even if 'failed' + } } diff --git a/app/Http/Controllers/Assets/BulkAssetsController.php b/app/Http/Controllers/Assets/BulkAssetsController.php index 52f3588e9a..ca48d91f43 100644 --- a/app/Http/Controllers/Assets/BulkAssetsController.php +++ b/app/Http/Controllers/Assets/BulkAssetsController.php @@ -33,7 +33,6 @@ class BulkAssetsController extends Controller if (! $request->filled('ids')) { return redirect()->back()->with('error', trans('admin/hardware/message.update.no_assets_selected')); - } // Figure out where we need to send the user after the update is complete, and store that in the session diff --git a/resources/views/importer/import.blade.php b/resources/views/importer/import.blade.php index 6b609028ad..5cd4199bbd 100644 --- a/resources/views/importer/import.blade.php +++ b/resources/views/importer/import.blade.php @@ -80,7 +80,7 @@