Merge remote-tracking branch 'origin/develop'
This commit is contained in:
commit
56a15731ef
6 changed files with 73 additions and 68 deletions
|
@ -27,6 +27,19 @@ function ip_in_range( $ip, $range ) {
|
||||||
}
|
}
|
||||||
// NOTE - this function was shamelessly stolen from this gist: https://gist.github.com/tott/7684443
|
// NOTE - this function was shamelessly stolen from this gist: https://gist.github.com/tott/7684443
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ensure LDAP filters are parentheses-wrapped
|
||||||
|
*/
|
||||||
|
function parenthesized_filter($filter)
|
||||||
|
{
|
||||||
|
if(substr($filter,0,1) == "(" ) {
|
||||||
|
return $filter;
|
||||||
|
} else {
|
||||||
|
return "(".$filter.")";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
class LdapTroubleshooter extends Command
|
class LdapTroubleshooter extends Command
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
@ -70,6 +83,47 @@ class LdapTroubleshooter extends Command
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clean the results from ldap_get_entries into something useful
|
||||||
|
* @param array $array
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function ldap_results_cleaner ($array) {
|
||||||
|
$cleaned = [];
|
||||||
|
for($i = 0; $i < $array['count']; $i++) {
|
||||||
|
$row = $array[$i];
|
||||||
|
$clean_row = [];
|
||||||
|
foreach($row AS $key => $val ) {
|
||||||
|
$this->debugout("Key is: ".$key);
|
||||||
|
if($key == "count" || is_int($key) || $key == "dn") {
|
||||||
|
$this->debugout(" and we're gonna skip it\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$this->debugout(" And that seems fine.\n");
|
||||||
|
if(array_key_exists('count',$val)) {
|
||||||
|
if($val['count'] == 1) {
|
||||||
|
$clean_row[$key] = $val[0];
|
||||||
|
} else {
|
||||||
|
unset($val['count']); //these counts are annoying
|
||||||
|
$elements = [];
|
||||||
|
foreach($val as $entry) {
|
||||||
|
if(isset($ldap_constants[$entry])) {
|
||||||
|
$elements[] = $ldap_constants[$entry];
|
||||||
|
} else {
|
||||||
|
$elements[] = $entry;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$clean_row[$key] = $elements;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$clean_row[$key] = $val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$cleaned[$i] = $clean_row;
|
||||||
|
}
|
||||||
|
return $cleaned;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute the console command.
|
* Execute the console command.
|
||||||
*
|
*
|
||||||
|
@ -102,16 +156,12 @@ class LdapTroubleshooter extends Command
|
||||||
$output[] = "LDAPTLS_KEY=storage/ldap_client_tls.key";
|
$output[] = "LDAPTLS_KEY=storage/ldap_client_tls.key";
|
||||||
}
|
}
|
||||||
$output[] = "ldapsearch";
|
$output[] = "ldapsearch";
|
||||||
$output[] = $settings->ldap_server;
|
$output[] = "-H ".$settings->ldap_server;
|
||||||
$output[] = "-x";
|
$output[] = "-x";
|
||||||
$output[] = "-b ".escapeshellarg($settings->ldap_basedn);
|
$output[] = "-b ".escapeshellarg($settings->ldap_basedn);
|
||||||
$output[] = "-D ".escapeshellarg($settings->ldap_uname);
|
$output[] = "-D ".escapeshellarg($settings->ldap_uname);
|
||||||
$output[] = "-w ".escapeshellarg(\Crypt::Decrypt($settings->ldap_pword));
|
$output[] = "-w ".escapeshellarg(\Crypt::Decrypt($settings->ldap_pword));
|
||||||
if(substr($settings->ldap_filter,0,1) == "(" ) {
|
$output[] = escapeshellarg(parenthesized_filter($settings->ldap_filter));
|
||||||
$output[] = escapeshellarg($settings->ldap_filter);
|
|
||||||
} else {
|
|
||||||
$output[] = escapeshellarg("(".$settings->ldap_filter.")");
|
|
||||||
}
|
|
||||||
if($settings->ldap_tls) {
|
if($settings->ldap_tls) {
|
||||||
$this->line("# adding STARTTLS option");
|
$this->line("# adding STARTTLS option");
|
||||||
$output[] = "-Z";
|
$output[] = "-Z";
|
||||||
|
@ -290,45 +340,8 @@ class LdapTroubleshooter extends Command
|
||||||
}
|
}
|
||||||
$this->debugout("LDAP constants are: ".print_r($ldap_constants,true));
|
$this->debugout("LDAP constants are: ".print_r($ldap_constants,true));
|
||||||
|
|
||||||
// recursive function that 'cleans' the returned array from ldap_get_entries which are formatted awfully
|
|
||||||
$cleaner = function ($array) {
|
|
||||||
$cleaned = [];
|
|
||||||
for($i = 0; $i < $array['count']; $i++) {
|
|
||||||
$row = $array[$i];
|
|
||||||
$clean_row = [];
|
|
||||||
foreach($row AS $key => $val ) {
|
|
||||||
$this->debugout("Key is: ".$key);
|
|
||||||
if($key == "count" || is_int($key) || $key == "dn") {
|
|
||||||
$this->debugout(" and we're gonna skip it\n");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$this->debugout(" And that seems fine.\n");
|
|
||||||
if(array_key_exists('count',$val)) {
|
|
||||||
if($val['count'] == 1) {
|
|
||||||
$clean_row[$key] = $val[0];
|
|
||||||
} else {
|
|
||||||
unset($val['count']); //these counts are annoying
|
|
||||||
$elements = [];
|
|
||||||
foreach($val as $entry) {
|
|
||||||
if(isset($ldap_constants[$entry])) {
|
|
||||||
$elements[] = $ldap_constants[$entry];
|
|
||||||
} else {
|
|
||||||
$elements[] = $entry;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$clean_row[$key] = $elements;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$clean_row[$key] = $val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$cleaned[$i] = $clean_row;
|
|
||||||
}
|
|
||||||
return $cleaned;
|
|
||||||
};
|
|
||||||
|
|
||||||
foreach($ldap_urls AS $ldap_url) {
|
foreach($ldap_urls AS $ldap_url) {
|
||||||
if($this->test_informational_bind($ldap_url[0],$ldap_url[1],$ldap_url[2],$settings->ldap_uname,Crypt::decrypt($settings->ldap_pword))) {
|
if($this->test_informational_bind($ldap_url[0],$ldap_url[1],$ldap_url[2],$settings->ldap_uname,Crypt::decrypt($settings->ldap_pword),$settings)) {
|
||||||
$this->info("Success getting informational bind!");
|
$this->info("Success getting informational bind!");
|
||||||
} else {
|
} else {
|
||||||
$this->error("Unable to get information from bind.");
|
$this->error("Unable to get information from bind.");
|
||||||
|
@ -422,9 +435,9 @@ class LdapTroubleshooter extends Command
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_informational_bind($ldap_url, $check_cert, $start_tls, $username, $password)
|
public function test_informational_bind($ldap_url, $check_cert, $start_tls, $username, $password,$settings)
|
||||||
{
|
{
|
||||||
return $this->timed_boolean_execute(function () use ($ldap_url, $check_cert, $start_tls, $username, $password) {
|
return $this->timed_boolean_execute(function () use ($ldap_url, $check_cert, $start_tls, $username, $password, $settings) {
|
||||||
try { // TODO - copypasta'ed from test_authed_bind
|
try { // TODO - copypasta'ed from test_authed_bind
|
||||||
$conn = $this->connect_to_ldap($ldap_url, $check_cert, $start_tls);
|
$conn = $this->connect_to_ldap($ldap_url, $check_cert, $start_tls);
|
||||||
$bind_results = ldap_bind($conn, $username, $password);
|
$bind_results = ldap_bind($conn, $username, $password);
|
||||||
|
@ -435,12 +448,13 @@ class LdapTroubleshooter extends Command
|
||||||
$this->info("SUCCESS - Able to bind to $ldap_url as $username");
|
$this->info("SUCCESS - Able to bind to $ldap_url as $username");
|
||||||
$result = ldap_read($conn, '', '(objectClass=*)'/* , ['supportedControl']*/);
|
$result = ldap_read($conn, '', '(objectClass=*)'/* , ['supportedControl']*/);
|
||||||
$results = ldap_get_entries($conn, $result);
|
$results = ldap_get_entries($conn, $result);
|
||||||
$cleaned_results = $cleaner($results);
|
$cleaned_results = $this->ldap_results_cleaner($results);
|
||||||
$this->line(print_r($cleaned_results,true));
|
$this->line(print_r($cleaned_results,true));
|
||||||
//okay, great - now how do we display those results? I have no idea.
|
//okay, great - now how do we display those results? I have no idea.
|
||||||
// I don't see why this throws an Exception for Google LDAP, but I guess we ought to try and catch it?
|
// I don't see why this throws an Exception for Google LDAP, but I guess we ought to try and catch it?
|
||||||
$this->comment("I guess we're trying to do the ldap search here, but sometimes it takes too long?");
|
$this->comment("I guess we're trying to do the ldap search here, but sometimes it takes too long?");
|
||||||
$search_results = ldap_search($conn, $settings->base_dn, $settings->filter);
|
$this->debugout("Base DN is: ".$settings->ldap_basedn." and filter is: ".parenthesized_filter($settings->ldap_filter));
|
||||||
|
$search_results = ldap_search($conn, $settings->ldap_basedn, parenthesized_filter($settings->ldap_filter));
|
||||||
$this->info("Printing first 10 results: ");
|
$this->info("Printing first 10 results: ");
|
||||||
for($i=0;$i<10;$i++) {
|
for($i=0;$i<10;$i++) {
|
||||||
$this->info($search_results[$i]);
|
$this->info($search_results[$i]);
|
||||||
|
|
|
@ -71,6 +71,7 @@
|
||||||
data-toolbar="#assetsBulkEditToolbar"
|
data-toolbar="#assetsBulkEditToolbar"
|
||||||
data-bulk-button-id="#bulkAssetEditButton"
|
data-bulk-button-id="#bulkAssetEditButton"
|
||||||
data-bulk-form-id="#assetsBulkForm"
|
data-bulk-form-id="#assetsBulkForm"
|
||||||
|
data-click-to-select="true"
|
||||||
data-export-options='{
|
data-export-options='{
|
||||||
"fileName": "export-{{ str_slug($category->name) }}-assets-{{ date('Y-m-d') }}",
|
"fileName": "export-{{ str_slug($category->name) }}-assets-{{ date('Y-m-d') }}",
|
||||||
"ignoreColumn": ["actions","image","change","checkbox","checkincheckout","icon"]
|
"ignoreColumn": ["actions","image","change","checkbox","checkincheckout","icon"]
|
||||||
|
|
|
@ -90,7 +90,7 @@
|
||||||
data-columns="{{ \App\Presenters\UserPresenter::dataTableLayout() }}"
|
data-columns="{{ \App\Presenters\UserPresenter::dataTableLayout() }}"
|
||||||
data-cookie-id-table="usersTable"
|
data-cookie-id-table="usersTable"
|
||||||
data-pagination="true"
|
data-pagination="true"
|
||||||
data-id-table="#usersTable"
|
data-id-table="usersTable"
|
||||||
data-search="true"
|
data-search="true"
|
||||||
data-side-pagination="server"
|
data-side-pagination="server"
|
||||||
data-show-columns="true"
|
data-show-columns="true"
|
||||||
|
@ -100,6 +100,7 @@
|
||||||
data-toolbar="#userBulkEditToolbar"
|
data-toolbar="#userBulkEditToolbar"
|
||||||
data-bulk-button-id="#bulkUserEditButton"
|
data-bulk-button-id="#bulkUserEditButton"
|
||||||
data-bulk-form-id="#usersBulkForm"
|
data-bulk-form-id="#usersBulkForm"
|
||||||
|
data-click-to-select="true"
|
||||||
id="usersTable"
|
id="usersTable"
|
||||||
class="table table-striped snipe-table"
|
class="table table-striped snipe-table"
|
||||||
data-url="{{route('api.users.index', ['location_id' => $location->id])}}"
|
data-url="{{route('api.users.index', ['location_id' => $location->id])}}"
|
||||||
|
@ -131,6 +132,7 @@
|
||||||
data-toolbar="#assetsBulkEditToolbar"
|
data-toolbar="#assetsBulkEditToolbar"
|
||||||
data-bulk-button-id="#bulkAssetEditButton"
|
data-bulk-button-id="#bulkAssetEditButton"
|
||||||
data-bulk-form-id="#assetsBulkForm"
|
data-bulk-form-id="#assetsBulkForm"
|
||||||
|
data-click-to-select="true"
|
||||||
id="assetsListingTable"
|
id="assetsListingTable"
|
||||||
class="table table-striped snipe-table"
|
class="table table-striped snipe-table"
|
||||||
data-url="{{route('api.assets.index', ['location_id' => $location->id]) }}"
|
data-url="{{route('api.assets.index', ['location_id' => $location->id]) }}"
|
||||||
|
|
|
@ -59,6 +59,7 @@
|
||||||
data-toolbar="#assetsBulkEditToolbar"
|
data-toolbar="#assetsBulkEditToolbar"
|
||||||
data-bulk-button-id="#bulkAssetEditButton"
|
data-bulk-button-id="#bulkAssetEditButton"
|
||||||
data-bulk-form-id="#assetsBulkForm"
|
data-bulk-form-id="#assetsBulkForm"
|
||||||
|
data-click-to-select="true"
|
||||||
data-show-export="true"
|
data-show-export="true"
|
||||||
data-show-refresh="true"
|
data-show-refresh="true"
|
||||||
data-sort-order="asc"
|
data-sort-order="asc"
|
||||||
|
|
|
@ -124,8 +124,7 @@
|
||||||
|
|
||||||
$('.snipe-table').on('uncheck.bs.table .btSelectItem', function (row, $element) {
|
$('.snipe-table').on('uncheck.bs.table .btSelectItem', function (row, $element) {
|
||||||
var tableId = $(this).data('id-table');
|
var tableId = $(this).data('id-table');
|
||||||
$( "#" + tableId + "checkbox_" + $element.id).remove();
|
$( "#" + tableId + "_checkbox_" + $element.id).remove();
|
||||||
console.log("#" + tableId + "checkbox_" + $element.id);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,23 +12,7 @@
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<div class="box-body">
|
<div class="box-body">
|
||||||
{{ Form::open([
|
@include('partials.asset-bulk-actions')
|
||||||
'method' => 'POST',
|
|
||||||
'route' => ['hardware/bulkedit'],
|
|
||||||
'class' => 'form-inline',
|
|
||||||
'id' => 'bulkForm']) }}
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12">
|
|
||||||
@if (Request::get('status')!='Deleted')
|
|
||||||
<div id="toolbar">
|
|
||||||
<select name="bulk_actions" class="form-control select2">
|
|
||||||
<option value="edit">{{ trans('button.edit') }}</option>
|
|
||||||
<option value="delete">{{ trans('button.delete') }}</option>
|
|
||||||
<option value="labels">{{ trans_choice('button.generate_labels', 1) }}</option>
|
|
||||||
</select>
|
|
||||||
<button class="btn btn-default" id="bulkEdit" disabled>{{ trans('button.go') }}</button>
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
|
|
||||||
<table
|
<table
|
||||||
data-columns="{{ \App\Presenters\AssetPresenter::dataTableLayout() }}"
|
data-columns="{{ \App\Presenters\AssetPresenter::dataTableLayout() }}"
|
||||||
|
@ -41,6 +25,10 @@
|
||||||
data-show-export="true"
|
data-show-export="true"
|
||||||
data-show-refresh="true"
|
data-show-refresh="true"
|
||||||
data-sort-order="asc"
|
data-sort-order="asc"
|
||||||
|
data-toolbar="#assetsBulkEditToolbar"
|
||||||
|
data-bulk-button-id="#bulkAssetEditButton"
|
||||||
|
data-bulk-form-id="#assetsBulkForm"
|
||||||
|
data-click-to-select="true"
|
||||||
id="assetsListingTable"
|
id="assetsListingTable"
|
||||||
class="table table-striped snipe-table"
|
class="table table-striped snipe-table"
|
||||||
data-url="{{route('api.assets.index', ['status_id' => $statuslabel->id]) }}"
|
data-url="{{route('api.assets.index', ['status_id' => $statuslabel->id]) }}"
|
||||||
|
|
Loading…
Add table
Reference in a new issue