Compare commits
5 Commits
9b33a20cc4
...
87bae89ea3
Author | SHA1 | Date | |
---|---|---|---|
87bae89ea3 | |||
1abc2cc6e1 | |||
1abab9db94 | |||
410daf649e | |||
9666841c3c |
@ -557,7 +557,7 @@ final class AttributeType extends Base {
|
|||||||
->unique();
|
->unique();
|
||||||
|
|
||||||
$validation = collect(Arr::get(config('ldap.validation'),$this->name_lc,[]));
|
$validation = collect(Arr::get(config('ldap.validation'),$this->name_lc,[]));
|
||||||
if (($heirachy->intersect($this->required_by_object_classes)->count() > 0)
|
if (($heirachy->intersect($this->required_by_object_classes->keys())->count() > 0)
|
||||||
&& (! collect($validation->get($this->name_lc))->contains('required'))) {
|
&& (! collect($validation->get($this->name_lc))->contains('required'))) {
|
||||||
$validation->put($this->name_lc,array_merge(['required','min:1'],$validation->get($this->name_lc,[])))
|
$validation->put($this->name_lc,array_merge(['required','min:1'],$validation->get($this->name_lc,[])))
|
||||||
->put($this->name_lc.'.*',array_merge(['required','min:1'],$validation->get($this->name_lc.'.*',[])));
|
->put($this->name_lc.'.*',array_merge(['required','min:1'],$validation->get($this->name_lc.'.*',[])));
|
||||||
|
@ -14,39 +14,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="page-title-actions">
|
<div class="page-title-actions">
|
||||||
<div class="row">
|
@yield('page_actions')
|
||||||
<div class="col">
|
|
||||||
<div class="action-buttons float-end">
|
|
||||||
<ul class="nav">
|
|
||||||
@if(isset($page_actions) && $page_actions->contains('export'))
|
|
||||||
<li>
|
|
||||||
<span data-bs-toggle="modal" data-bs-target="#entry_export-modal">
|
|
||||||
<button class="btn btn-outline-dark p-1 m-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="@lang('Export')"><i class="fas fa-fw fa-download fs-5"></i></button>
|
|
||||||
</span>
|
|
||||||
</li>
|
|
||||||
@endif
|
|
||||||
@if(isset($page_actions) && $page_actions->contains('copy'))
|
|
||||||
<li>
|
|
||||||
<button class="btn btn-outline-dark p-1 m-1" id="entry-copy-move" data-bs-toggle="tooltip" data-bs-placement="bottom" title="@lang('Copy/Move')" disabled><i class="fas fa-fw fa-copy fs-5"></i></button>
|
|
||||||
</li>
|
|
||||||
@endif
|
|
||||||
@if((isset($page_actions) && $page_actions->contains('edit')) || old())
|
|
||||||
<li>
|
|
||||||
<button class="btn btn-outline-dark p-1 m-1" id="entry-edit" data-bs-toggle="tooltip" data-bs-placement="bottom" title="@lang('Edit Entry')"><i class="fas fa-fw fa-edit fs-5"></i></button>
|
|
||||||
</li>
|
|
||||||
@endif
|
|
||||||
<!-- @todo Dont offer the delete button for an entry with children -->
|
|
||||||
@if(isset($page_actions) && $page_actions->contains('delete'))
|
|
||||||
<li>
|
|
||||||
<span id="entry-delete" data-bs-toggle="modal" data-bs-target="#page-modal">
|
|
||||||
<button class="btn btn-outline-danger p-1 m-1" data-bs-custom-class="custom-tooltip-danger" data-bs-toggle="tooltip" data-bs-placement="bottom" title="@lang('Delete Entry')"><i class="fas fa-fw fa-trash-can fs-5"></i></button>
|
|
||||||
</span>
|
|
||||||
</li>
|
|
||||||
@endif
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="offset-1 col-4 p-2">
|
<div class="offset-1 col-4 p-2">
|
||||||
<span class="p-0 m-0">
|
<span class="p-0 m-0">
|
||||||
<button type="button" class="btn btn-sm btn-outline-dark mt-3" data-bs-toggle="modal" data-bs-target="#userpassword_check-modal"><i class="fas fa-user-check"></i> @lang('Check Password')</button>
|
<button id="entry-userpassword-check" type="button" class="btn btn-sm btn-outline-dark mt-3" data-bs-toggle="modal" data-bs-target="#page-modal"><i class="fas fa-user-check"></i> @lang('Check Password')</button>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -4,6 +4,42 @@
|
|||||||
@include('fragment.dn.header',['o'=>($o ?? $o=$server->fetch($dn))])
|
@include('fragment.dn.header',['o'=>($o ?? $o=$server->fetch($dn))])
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
|
@section('page_actions')
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<div class="action-buttons float-end">
|
||||||
|
<ul class="nav">
|
||||||
|
@if(isset($page_actions) && $page_actions->contains('export'))
|
||||||
|
<li>
|
||||||
|
<span id="entry-export" data-bs-toggle="modal" data-bs-target="#page-modal">
|
||||||
|
<button class="btn btn-outline-dark p-1 m-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="@lang('Export')"><i class="fas fa-fw fa-download fs-5"></i></button>
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
@endif
|
||||||
|
@if(isset($page_actions) && $page_actions->contains('copy'))
|
||||||
|
<li>
|
||||||
|
<button class="btn btn-outline-dark p-1 m-1" id="entry-copy-move" data-bs-toggle="tooltip" data-bs-placement="bottom" title="@lang('Copy/Move')" disabled><i class="fas fa-fw fa-copy fs-5"></i></button>
|
||||||
|
</li>
|
||||||
|
@endif
|
||||||
|
@if((isset($page_actions) && $page_actions->contains('edit')) || old())
|
||||||
|
<li>
|
||||||
|
<button class="btn btn-outline-dark p-1 m-1" id="entry-edit" data-bs-toggle="tooltip" data-bs-placement="bottom" title="@lang('Edit Entry')"><i class="fas fa-fw fa-edit fs-5"></i></button>
|
||||||
|
</li>
|
||||||
|
@endif
|
||||||
|
<!-- @todo Dont offer the delete button for an entry with children -->
|
||||||
|
@if(isset($page_actions) && $page_actions->contains('delete'))
|
||||||
|
<li>
|
||||||
|
<span id="entry-delete" data-bs-toggle="modal" data-bs-target="#page-modal">
|
||||||
|
<button class="btn btn-outline-danger p-1 m-1" data-bs-custom-class="custom-tooltip-danger" data-bs-toggle="tooltip" data-bs-placement="bottom" title="@lang('Delete Entry')"><i class="fas fa-fw fa-trash-can fs-5"></i></button>
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
@endif
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endsection
|
||||||
|
|
||||||
@section('main-content')
|
@section('main-content')
|
||||||
<x-note/>
|
<x-note/>
|
||||||
<x-updated/>
|
<x-updated/>
|
||||||
@ -77,63 +113,6 @@
|
|||||||
<div class="modal-content"></div>
|
<div class="modal-content"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- EXPORT -->
|
|
||||||
<div class="modal fade" id="entry_export-modal" tabindex="-1" aria-labelledby="entry_export-label" aria-hidden="true">
|
|
||||||
<div class="modal-dialog modal-lg modal-fullscreen-lg-down">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h1 class="modal-title fs-5" id="entry_export-label">LDIF for {{ $dn }}</h1>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal-body">
|
|
||||||
<div id="entry_export"><div class="fa-3x"><i class="fas fa-spinner fa-pulse fa-sm"></i></div></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Close</button>
|
|
||||||
<button type="button" class="btn btn-sm btn-primary" id="entry_export-download">Download</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
@if($up=$o->getObject('userpassword'))
|
|
||||||
<!-- CHECK USERPASSWORD -->
|
|
||||||
<div class="modal fade" id="userpassword_check-modal" tabindex="-1" aria-labelledby="userpassword_check-label" aria-hidden="true">
|
|
||||||
<div class="modal-dialog modal-lg modal-fullscreen-lg-down">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h1 class="modal-title fs-5" id="userpassword_check-label">Check Passwords for {{ $dn }}</h1>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal-body">
|
|
||||||
<table class="table table-bordered p-1">
|
|
||||||
@foreach($up->values as $key => $value)
|
|
||||||
<tr>
|
|
||||||
<th>Check</th>
|
|
||||||
<td>{{ $up->render_item_old($key) }}</td>
|
|
||||||
<td>
|
|
||||||
<input type="password" style="width: 90%" name="password[{{$key}}]"> <i class="fas fa-fw fa-lock"></i>
|
|
||||||
<div class="invalid-feedback pb-2">
|
|
||||||
Invalid Password
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Close</button>
|
|
||||||
<button type="button" class="btn btn-sm btn-primary" id="userpassword_check-submit"><i class="fas fa-fw fa-spinner fa-spin d-none"></i> Check</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
@section('page-scripts')
|
@section('page-scripts')
|
||||||
@ -141,18 +120,6 @@
|
|||||||
var dn = '{{ $o->getDNSecure() }}';
|
var dn = '{{ $o->getDNSecure() }}';
|
||||||
var oc = {!! $o->getObject('objectclass')->values !!};
|
var oc = {!! $o->getObject('objectclass')->values !!};
|
||||||
|
|
||||||
function download(filename,text) {
|
|
||||||
var element = document.createElement('a');
|
|
||||||
|
|
||||||
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
|
|
||||||
element.setAttribute('download', filename);
|
|
||||||
element.style.display = 'none';
|
|
||||||
document.body.appendChild(element);
|
|
||||||
|
|
||||||
element.click();
|
|
||||||
document.body.removeChild(element);
|
|
||||||
}
|
|
||||||
|
|
||||||
function editmode() {
|
function editmode() {
|
||||||
$('#dn-edit input[name="dn"]').val(dn);
|
$('#dn-edit input[name="dn"]').val(dn);
|
||||||
|
|
||||||
@ -195,7 +162,7 @@
|
|||||||
$('#newattrs').append(data);
|
$('#newattrs').append(data);
|
||||||
},
|
},
|
||||||
error: function(e) {
|
error: function(e) {
|
||||||
if (e.status != 412)
|
if (e.status !== 412)
|
||||||
alert('That didnt work? Please try again....');
|
alert('That didnt work? Please try again....');
|
||||||
},
|
},
|
||||||
url: '{{ url('entry/attr/add') }}/'+item.target.value,
|
url: '{{ url('entry/attr/add') }}/'+item.target.value,
|
||||||
@ -213,13 +180,6 @@
|
|||||||
$('#newattr-select').remove();
|
$('#newattr-select').remove();
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#entry_export-download').on('click',function(item) {
|
|
||||||
item.preventDefault();
|
|
||||||
|
|
||||||
let ldif = $('#entry_export').find('pre:first'); // update this selector in your local version
|
|
||||||
download('ldap-export.ldif',ldif.html());
|
|
||||||
});
|
|
||||||
|
|
||||||
$('#page-modal').on('shown.bs.modal',function(item) {
|
$('#page-modal').on('shown.bs.modal',function(item) {
|
||||||
var that = $(this).find('.modal-content');
|
var that = $(this).find('.modal-content');
|
||||||
|
|
||||||
@ -237,7 +197,63 @@
|
|||||||
that.empty().html(data);
|
that.empty().html(data);
|
||||||
},
|
},
|
||||||
error: function(e) {
|
error: function(e) {
|
||||||
if (e.status != 412)
|
if (e.status !== 412)
|
||||||
|
alert('That didnt work? Please try again....');
|
||||||
|
},
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'entry-export':
|
||||||
|
$.ajax({
|
||||||
|
method: 'GET',
|
||||||
|
url: '{{ url('modal/export') }}/'+dn,
|
||||||
|
dataType: 'html',
|
||||||
|
cache: false,
|
||||||
|
beforeSend: function() {
|
||||||
|
that.empty().append('<span class="p-3"><i class="fas fa-3x fa-spinner fa-pulse"></i></span>');
|
||||||
|
},
|
||||||
|
success: function(data) {
|
||||||
|
that.empty().html(data);
|
||||||
|
|
||||||
|
that = $('#entry_export');
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
method: 'GET',
|
||||||
|
url: '{{ url('entry/export') }}/'+dn,
|
||||||
|
cache: false,
|
||||||
|
beforeSend: function() {
|
||||||
|
that.empty().append('<span class="p-3"><i class="fas fa-3x fa-spinner fa-pulse"></i></span>');
|
||||||
|
},
|
||||||
|
success: function(data) {
|
||||||
|
that.empty().append(data);
|
||||||
|
},
|
||||||
|
error: function(e) {
|
||||||
|
if (e.status !== 412)
|
||||||
|
alert('That didnt work? Please try again....');
|
||||||
|
},
|
||||||
|
})
|
||||||
|
},
|
||||||
|
error: function(e) {
|
||||||
|
if (e.status !== 412)
|
||||||
|
alert('That didnt work? Please try again....');
|
||||||
|
},
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'entry-userpassword-check':
|
||||||
|
$.ajax({
|
||||||
|
method: 'GET',
|
||||||
|
url: '{{ url('modal/userpassword-check') }}/'+dn,
|
||||||
|
dataType: 'html',
|
||||||
|
cache: false,
|
||||||
|
beforeSend: function() {
|
||||||
|
that.empty().append('<span class="p-3"><i class="fas fa-3x fa-spinner fa-pulse"></i></span>');
|
||||||
|
},
|
||||||
|
success: function(data) {
|
||||||
|
that.empty().html(data);
|
||||||
|
},
|
||||||
|
error: function(e) {
|
||||||
|
if (e.status !== 412)
|
||||||
alert('That didnt work? Please try again....');
|
alert('That didnt work? Please try again....');
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@ -248,78 +264,6 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#entry_export-modal').on('shown.bs.modal',function() {
|
|
||||||
$.ajax({
|
|
||||||
type: 'GET',
|
|
||||||
success: function(data) {
|
|
||||||
$('#entry_export').empty().append(data);
|
|
||||||
},
|
|
||||||
error: function(e) {
|
|
||||||
if (e.status != 412)
|
|
||||||
alert('That didnt work? Please try again....');
|
|
||||||
},
|
|
||||||
url: '{{ url('entry/export') }}/'+dn,
|
|
||||||
cache: false
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
@if($up)
|
|
||||||
$('button[id=userpassword_check-submit]').on('click',function(item) {
|
|
||||||
var that = $(this);
|
|
||||||
|
|
||||||
var passwords = $('#userpassword_check-modal')
|
|
||||||
.find('input[name^="password["')
|
|
||||||
.map((key,item)=>item.value);
|
|
||||||
|
|
||||||
if (passwords.length === 0) return false;
|
|
||||||
|
|
||||||
$.ajax({
|
|
||||||
type: 'POST',
|
|
||||||
beforeSend: function() {
|
|
||||||
// Disable submit, add spinning icon
|
|
||||||
that.prop('disabled',true);
|
|
||||||
that.find('i').removeClass('d-none');
|
|
||||||
},
|
|
||||||
complete: function() {
|
|
||||||
that.prop('disabled',false);
|
|
||||||
that.find('i').addClass('d-none');
|
|
||||||
},
|
|
||||||
success: function(data) {
|
|
||||||
data.forEach(function(item,key) {
|
|
||||||
var i = $('#userpassword_check-modal')
|
|
||||||
.find('input[name="password['+key+']')
|
|
||||||
.siblings('i');
|
|
||||||
|
|
||||||
var feedback = $('#userpassword_check-modal')
|
|
||||||
.find('input[name="password['+key+']')
|
|
||||||
.siblings('div.invalid-feedback');
|
|
||||||
|
|
||||||
if (item === 'OK') {
|
|
||||||
i.removeClass('text-danger').addClass('text-success').removeClass('fa-lock').addClass('fa-lock-open');
|
|
||||||
if (feedback.is(':visible'))
|
|
||||||
feedback.hide();
|
|
||||||
} else {
|
|
||||||
i.removeClass('text-success').addClass('text-danger').removeClass('fa-lock-open').addClass('fa-lock');
|
|
||||||
if (! feedback.is(':visible'))
|
|
||||||
feedback.show();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
error: function(e) {
|
|
||||||
if (e.status != 412)
|
|
||||||
alert('That didnt work? Please try again....');
|
|
||||||
},
|
|
||||||
url: '{{ url('entry/password/check') }}',
|
|
||||||
data: {
|
|
||||||
dn: dn,
|
|
||||||
password: Array.from(passwords),
|
|
||||||
},
|
|
||||||
dataType: 'json',
|
|
||||||
cache: false
|
|
||||||
})
|
|
||||||
});
|
|
||||||
@endif
|
|
||||||
|
|
||||||
@if(old())
|
@if(old())
|
||||||
editmode();
|
editmode();
|
||||||
@endif
|
@endif
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<div class="modal-header bg-danger text-white">
|
<div class="modal-header bg-danger text-white">
|
||||||
<h1 class="modal-title fs-5" id="entry_export-label">
|
<h1 class="modal-title fs-5">
|
||||||
<i class="fas fa-fw fa-exclamation-triangle"></i> <strong>@lang('WARNING')</strong>: @lang('Delete') <strong>{{ Crypt::decryptString($dn) }}</strong>
|
<i class="fas fa-fw fa-exclamation-triangle"></i> <strong>@lang('WARNING')</strong>: @lang('Delete') <strong>{{ Crypt::decryptString($dn) }}</strong>
|
||||||
</h1>
|
</h1>
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
||||||
|
37
resources/views/modals/entry-export.blade.php
Normal file
37
resources/views/modals/entry-export.blade.php
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<div class="modal-header bg-dark text-white">
|
||||||
|
<h1 class="modal-title fs-5">
|
||||||
|
LDIF for {{ Crypt::decryptString($dn) }}
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
<div id="entry_export"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-footer">
|
||||||
|
<x-modal.close/>
|
||||||
|
<button id="entry_export-download" type="button" class="btn btn-sm btn-primary">@lang('Download')</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
function download(filename,text) {
|
||||||
|
var element = document.createElement('a');
|
||||||
|
|
||||||
|
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
|
||||||
|
element.setAttribute('download', filename);
|
||||||
|
element.style.display = 'none';
|
||||||
|
document.body.appendChild(element);
|
||||||
|
|
||||||
|
element.click();
|
||||||
|
document.body.removeChild(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('button[id=entry_export-download]').on('click',function(item) {
|
||||||
|
item.preventDefault();
|
||||||
|
|
||||||
|
let ldif = $('#entry_export').find('pre:first');
|
||||||
|
download('ldap-export.ldif',ldif.html());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
86
resources/views/modals/entry-userpassword-check.blade.php
Normal file
86
resources/views/modals/entry-userpassword-check.blade.php
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
@php
|
||||||
|
$o = $server->fetch(Crypt::decryptString($dn))
|
||||||
|
@endphp
|
||||||
|
<div class="modal-header bg-dark text-white">
|
||||||
|
<h1 class="modal-title fs-5">Check Passwords for {{ $o->getDN() }}</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
<table class="table table-bordered p-1">
|
||||||
|
@foreach(($up=$o->getObject('userpassword'))->values as $key => $value)
|
||||||
|
<tr>
|
||||||
|
<th>Check</th>
|
||||||
|
<td>{{ $up->render_item_old($key) }}</td>
|
||||||
|
<td>
|
||||||
|
<input type="password" style="width: 90%" name="password[{{$key}}]"> <i class="fas fa-fw fa-lock"></i>
|
||||||
|
<div class="invalid-feedback pb-2">
|
||||||
|
@lang('Invalid Password')
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-footer">
|
||||||
|
<x-modal.close/>
|
||||||
|
<button id="userpassword_check-submit" type="button" class="btn btn-sm btn-primary"><i class="fas fa-fw fa-spinner fa-spin d-none"></i> @lang('Check')</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$('button[id=userpassword_check-submit]').on('click',function(item) {
|
||||||
|
var that = $(this);
|
||||||
|
|
||||||
|
var passwords = $('#page-modal')
|
||||||
|
.find('input[name^="password["')
|
||||||
|
.map((key,item)=>item.value);
|
||||||
|
|
||||||
|
if (passwords.length === 0) return false;
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
method: 'POST',
|
||||||
|
url: '{{ url('entry/password/check') }}',
|
||||||
|
data: {
|
||||||
|
dn: dn,
|
||||||
|
password: Array.from(passwords),
|
||||||
|
},
|
||||||
|
dataType: 'json',
|
||||||
|
cache: false,
|
||||||
|
beforeSend: function() {
|
||||||
|
// Disable submit, add spinning icon
|
||||||
|
that.prop('disabled',true);
|
||||||
|
that.find('i').removeClass('d-none');
|
||||||
|
},
|
||||||
|
complete: function() {
|
||||||
|
that.prop('disabled',false);
|
||||||
|
that.find('i').addClass('d-none');
|
||||||
|
},
|
||||||
|
success: function(data) {
|
||||||
|
data.forEach(function(item,key) {
|
||||||
|
var i = $('#page-modal')
|
||||||
|
.find('input[name="password['+key+']')
|
||||||
|
.siblings('i');
|
||||||
|
|
||||||
|
var feedback = $('#page-modal')
|
||||||
|
.find('input[name="password['+key+']')
|
||||||
|
.siblings('div.invalid-feedback');
|
||||||
|
|
||||||
|
if (item === 'OK') {
|
||||||
|
i.removeClass('text-danger').addClass('text-success').removeClass('fa-lock').addClass('fa-lock-open');
|
||||||
|
if (feedback.is(':visible'))
|
||||||
|
feedback.hide();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
i.removeClass('text-success').addClass('text-danger').removeClass('fa-lock-open').addClass('fa-lock');
|
||||||
|
if (! feedback.is(':visible'))
|
||||||
|
feedback.show();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
error: function(e) {
|
||||||
|
if (e.status !== 412)
|
||||||
|
alert('That didnt work? Please try again....');
|
||||||
|
},
|
||||||
|
})
|
||||||
|
});
|
||||||
|
</script>
|
@ -54,5 +54,7 @@ Route::controller(HomeController::class)->group(function() {
|
|||||||
Route::post('import/process/{type}','import');
|
Route::post('import/process/{type}','import');
|
||||||
|
|
||||||
Route::view('modal/delete/{dn}','modals.entry-delete');
|
Route::view('modal/delete/{dn}','modals.entry-delete');
|
||||||
|
Route::view('modal/export/{dn}','modals.entry-export');
|
||||||
|
Route::view('modal/userpassword-check/{dn}','modals.entry-userpassword-check');
|
||||||
});
|
});
|
||||||
});
|
});
|
Loading…
x
Reference in New Issue
Block a user