Add database management back to front-end and begin some refactoring
Here we go again boys...
This commit is contained in:
parent
2b80de03df
commit
97dc0519d6
32 changed files with 774 additions and 407 deletions
|
@ -302,7 +302,7 @@ return [
|
|||
'database' => [
|
||||
'header' => 'Databases',
|
||||
'header_sub' => 'All databases available for this server.',
|
||||
'your_dbs' => 'Your Databases',
|
||||
'your_dbs' => 'Configured Databases',
|
||||
'host' => 'MySQL Host',
|
||||
'reset_password' => 'Reset Password',
|
||||
'no_dbs' => 'There are no databases listed for this server.',
|
||||
|
|
|
@ -79,9 +79,8 @@
|
|||
</div>
|
||||
<div class="box-footer">
|
||||
{!! csrf_field() !!}
|
||||
{!! method_field('PATCH') !!}
|
||||
<button name="action" value="delete" class="btn btn-sm btn-danger pull-left muted muted-hover"><i class="fa fa-trash-o"></i></button>
|
||||
<button name="action" value="edit" class="btn btn-sm btn-primary pull-right">Save</button>
|
||||
<button name="_method" value="DELETE" class="btn btn-sm btn-danger pull-left muted muted-hover"><i class="fa fa-trash-o"></i></button>
|
||||
<button name="_method" value="PATCH" class="btn btn-sm btn-primary pull-right">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -40,6 +40,9 @@
|
|||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-7">
|
||||
<div class="alert alert-info">
|
||||
Database passwords can be viewed when <a href="{{ route('server.databases.index', ['server' => $server->uuidShort]) }}">visiting this server</a> on the front-end.
|
||||
</div>
|
||||
<div class="box box-primary">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">Active Databases</h3>
|
||||
|
@ -128,7 +131,7 @@
|
|||
}, function () {
|
||||
$.ajax({
|
||||
method: 'DELETE',
|
||||
url: Router.route('admin.servers.view.database.delete', { id: '{{ $server->id }}', database: self.data('id') }),
|
||||
url: Router.route('admin.servers.view.database.delete', { server: '{{ $server->id }}', database: self.data('id') }),
|
||||
headers: { 'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content') },
|
||||
}).done(function () {
|
||||
self.parent().parent().slideUp();
|
||||
|
@ -149,7 +152,7 @@
|
|||
$(this).addClass('disabled').find('i').addClass('fa-spin');
|
||||
$.ajax({
|
||||
type: 'PATCH',
|
||||
url: Router.route('admin.servers.view.database', { id: '{{ $server->id }}' }),
|
||||
url: Router.route('admin.servers.view.database', { server: '{{ $server->id }}' }),
|
||||
headers: { 'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content') },
|
||||
data: { database: $(this).data('id') },
|
||||
}).done(function (data) {
|
||||
|
|
|
@ -155,6 +155,17 @@
|
|||
</a>
|
||||
</li>
|
||||
@endcan
|
||||
@can('view-databases', $server)
|
||||
<li
|
||||
@if(starts_with(Route::currentRouteName(), 'server.databases'))
|
||||
class="active"
|
||||
@endif
|
||||
>
|
||||
<a href="{{ route('server.databases.index', $server->uuidShort)}}">
|
||||
<i class="fa fa-database"></i> <span>@lang('navigation.server.databases')</span>
|
||||
</a>
|
||||
</li>
|
||||
@endcan
|
||||
@if(Gate::allows('view-startup', $server) || Gate::allows('view-sftp', $server) || Gate::allows('view-databases', $server) || Gate::allows('view-allocation', $server))
|
||||
<li class="treeview
|
||||
@if(starts_with(Route::currentRouteName(), 'server.settings'))
|
||||
|
@ -178,9 +189,6 @@
|
|||
@can('view-startup', $server)
|
||||
<li class="{{ Route::currentRouteName() !== 'server.settings.startup' ?: 'active' }}"><a href="{{ route('server.settings.startup', $server->uuidShort) }}"><i class="fa fa-angle-right"></i> @lang('navigation.server.startup_parameters')</a></li>
|
||||
@endcan
|
||||
@can('view-databases', $server)
|
||||
<li class="{{ Route::currentRouteName() !== 'server.settings.databases' ?: 'active' }}"><a href="{{ route('server.settings.databases', $server->uuidShort) }}"><i class="fa fa-angle-right"></i> @lang('navigation.server.databases')</a></li>
|
||||
@endcan
|
||||
</ul>
|
||||
</li>
|
||||
@endif
|
||||
|
|
|
@ -25,6 +25,11 @@
|
|||
<div class="box">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">@lang('server.config.database.your_dbs')</h3>
|
||||
@if(auth()->user()->root_admin)
|
||||
<div class="box-tools">
|
||||
<a href="{{ route('admin.servers.view.database', ['server' => $server->id]) }}" target="_blank" class="btn btn-sm btn-success">Create New</a>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
@if(count($databases) > 0)
|
||||
<div class="box-body table-responsive no-padding">
|
||||
|
@ -41,7 +46,14 @@
|
|||
<tr>
|
||||
<td class="middle">{{ $database->database }}</td>
|
||||
<td class="middle">{{ $database->username }}</td>
|
||||
<td class="middle"><code data-attr="set-password">{{ Crypt::decrypt($database->password) }}</code></td>
|
||||
<td class="middle">
|
||||
<code class="toggle-display" style="cursor:pointer" data-toggle="tooltip" data-placement="right" title="Click to Reveal">
|
||||
<i class="fa fa-key"></i> ••••••••
|
||||
</code>
|
||||
<code class="hidden" data-attr="set-password">
|
||||
{{ Crypt::decrypt($database->password) }}
|
||||
</code>
|
||||
</td>
|
||||
<td class="middle"><code>{{ $database->host->host }}:{{ $database->host->port }}</code></td>
|
||||
@can('reset-db-password', $server)
|
||||
<td>
|
||||
|
@ -55,7 +67,7 @@
|
|||
</div>
|
||||
@else
|
||||
<div class="box-body">
|
||||
<div class="callout callout-info callout-nomargin">
|
||||
<div class="alert alert-info no-margin-bottom">
|
||||
@lang('server.config.database.no_dbs')
|
||||
@if(Auth::user()->root_admin === 1)
|
||||
<a href="{{ route('admin.servers.view', [
|
||||
|
@ -75,37 +87,44 @@
|
|||
@parent
|
||||
{!! Theme::js('js/frontend/server.socket.js') !!}
|
||||
<script>
|
||||
@can('reset-db-password', $server)
|
||||
$('[data-action="reset-password"]').click(function (e) {
|
||||
e.preventDefault();
|
||||
var block = $(this);
|
||||
$(this).addClass('disabled').find('i').addClass('fa-spin');
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: Router.route('server.ajax.reset-database-password', { server: Pterodactyl.server.uuidShort }),
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content'),
|
||||
},
|
||||
data: {
|
||||
database: $(this).data('id')
|
||||
}
|
||||
}).done(function (data) {
|
||||
block.parent().parent().find('[data-attr="set-password"]').html(data);
|
||||
}).fail(function(jqXHR, textStatus, errorThrown) {
|
||||
console.error(jqXHR);
|
||||
var error = 'An error occured while trying to process this request.';
|
||||
if (typeof jqXHR.responseJSON !== 'undefined' && typeof jqXHR.responseJSON.error !== 'undefined') {
|
||||
error = jqXHR.responseJSON.error;
|
||||
}
|
||||
swal({
|
||||
type: 'error',
|
||||
title: 'Whoops!',
|
||||
text: error
|
||||
});
|
||||
}).always(function () {
|
||||
block.removeClass('disabled').find('i').removeClass('fa-spin');
|
||||
});
|
||||
$(function () {
|
||||
$('[data-toggle="tooltip"]').tooltip()
|
||||
});
|
||||
@endcan
|
||||
$('.toggle-display').on('click', function () {
|
||||
$(this).parent().find('code[data-attr="set-password"]').removeClass('hidden');
|
||||
$(this).hide();
|
||||
});
|
||||
@can('reset-db-password', $server)
|
||||
$('[data-action="reset-password"]').click(function (e) {
|
||||
e.preventDefault();
|
||||
var block = $(this);
|
||||
$(this).addClass('disabled').find('i').addClass('fa-spin');
|
||||
$.ajax({
|
||||
type: 'PATCH',
|
||||
url: Router.route('server.databases.password', { server: Pterodactyl.server.uuidShort }),
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content'),
|
||||
},
|
||||
data: {
|
||||
database: $(this).data('id')
|
||||
}
|
||||
}).done(function (data) {
|
||||
block.parent().parent().find('[data-attr="set-password"]').html(data.password);
|
||||
}).fail(function(jqXHR) {
|
||||
console.error(jqXHR);
|
||||
var error = 'An error occured while trying to process this request.';
|
||||
if (typeof jqXHR.responseJSON !== 'undefined' && typeof jqXHR.responseJSON.error !== 'undefined') {
|
||||
error = jqXHR.responseJSON.error;
|
||||
}
|
||||
swal({
|
||||
type: 'error',
|
||||
title: 'Whoops!',
|
||||
text: error
|
||||
});
|
||||
}).always(function () {
|
||||
block.removeClass('disabled').find('i').removeClass('fa-spin');
|
||||
});
|
||||
});
|
||||
@endcan
|
||||
</script>
|
||||
@endsection
|
Loading…
Add table
Add a link
Reference in a new issue