mirror of
https://github.com/pixelfed/pixelfed.git
synced 2024-11-26 00:03:16 +00:00
Add Admin Configuration Editor
This commit is contained in:
parent
cd7ecd11a6
commit
94bef4c74c
4 changed files with 179 additions and 65 deletions
|
@ -25,9 +25,47 @@ trait AdminSettingsController
|
||||||
|
|
||||||
public function settingsConfig(Request $request)
|
public function settingsConfig(Request $request)
|
||||||
{
|
{
|
||||||
$editor = [];
|
$editor = config('pixelfed.admin.env_editor');
|
||||||
$config = file_get_contents(base_path('.env'));
|
$config = !$editor ? false : file_get_contents(base_path('.env'));
|
||||||
return view('admin.settings.config', compact('editor', 'config'));
|
$backup = !$editor ? false : file_get_contents(base_path('.env.backup'));
|
||||||
|
return view('admin.settings.config', compact('editor', 'config', 'backup'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function settingsConfigStore(Request $request)
|
||||||
|
{
|
||||||
|
if(config('pixelfed.admin.env_editor') !== true) {
|
||||||
|
abort(400);
|
||||||
|
}
|
||||||
|
$res = $request->input('res');
|
||||||
|
|
||||||
|
$old = file_get_contents(app()->environmentFilePath());
|
||||||
|
if(empty($old) || $old != $res) {
|
||||||
|
$oldFile = fopen(app()->environmentFilePath().'.backup', 'w');
|
||||||
|
fwrite($oldFile, $old);
|
||||||
|
fclose($oldFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
$file = fopen(app()->environmentFilePath(), 'w');
|
||||||
|
fwrite($file, $res);
|
||||||
|
fclose($file);
|
||||||
|
Artisan::call('config:cache');
|
||||||
|
return ['msg' => 200];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function settingsConfigRestore(Request $request)
|
||||||
|
{
|
||||||
|
if(config('pixelfed.admin.env_editor') !== true) {
|
||||||
|
abort(400);
|
||||||
|
}
|
||||||
|
$res = file_get_contents(app()->environmentFilePath().'.backup');
|
||||||
|
if(empty($res)) {
|
||||||
|
abort(400, 'No backup exists.');
|
||||||
|
}
|
||||||
|
$file = fopen(app()->environmentFilePath(), 'w');
|
||||||
|
fwrite($file, $res);
|
||||||
|
fclose($file);
|
||||||
|
Artisan::call('config:cache');
|
||||||
|
return ['msg' => 200];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function settingsMaintenance(Request $request)
|
public function settingsMaintenance(Request $request)
|
||||||
|
|
|
@ -274,4 +274,8 @@ return [
|
||||||
'sanitizer' => [
|
'sanitizer' => [
|
||||||
'restrict_html_types' => env('RESTRICT_HTML_TYPES', true)
|
'restrict_html_types' => env('RESTRICT_HTML_TYPES', true)
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'admin' => [
|
||||||
|
'env_editor' => env('ADMIN_ENV_EDITOR', false)
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|
|
@ -5,10 +5,80 @@
|
||||||
@section('section')
|
@section('section')
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<h3 class="font-weight-bold">Configuration Settings</h3>
|
<h3 class="font-weight-bold">Configuration Settings</h3>
|
||||||
|
@if($editor == false)
|
||||||
|
<hr>
|
||||||
|
<div class="card bg-light shadow-none rounded-0">
|
||||||
|
<div class="card-body text-center py-5">
|
||||||
|
<p class="lead text-muted font-weight-bold">Configuration Editor is disabled</p>
|
||||||
|
<p class="mb-0">To enable it, add <code>ADMIN_ENV_EDITOR=true</code> to <code>.env</code><br>then run <code>php artisan config:cache</code></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@else
|
||||||
<p class="lead">Edit configuration settings</p>
|
<p class="lead">Edit configuration settings</p>
|
||||||
|
<p class="alert alert-warning">
|
||||||
|
<strong>Warning:</strong> Editing the .env file may cause issues if you change the wrong setting or set the wrong value.
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
<p class="alert alert-warning">
|
<div>
|
||||||
<strong>Feature Unavailable:</strong> This feature will be released in a future version.
|
<div id="editor">{{$config}}</div>
|
||||||
</p>
|
<hr>
|
||||||
|
<div class="d-flex justify-content-between px-3">
|
||||||
|
<button class="btn btn-outline-secondary font-weight-bold py-1 btn-restore">Restore backup .env</button>
|
||||||
|
<button class="btn btn-primary font-weight-bold py-1 btn-save">Save</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
@endsection
|
@endsection
|
||||||
|
@if($editor == true)
|
||||||
|
@push('scripts')
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.4/ace.js"></script>
|
||||||
|
<script>
|
||||||
|
let editor = ace.edit("editor");
|
||||||
|
editor.session.setUseWrapMode(true);
|
||||||
|
editor.setTheme("ace/theme/monokai");
|
||||||
|
editor.session.setMode("ace/mode/javascript");
|
||||||
|
|
||||||
|
$('.btn-restore').on('click', function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
let confirm = window.confirm('Are you sure you want to restore your backup .env?');
|
||||||
|
if(!confirm) {
|
||||||
|
swal('Cancelled', 'You have cancelled the .env backup restore.', 'warning');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
axios.post('/i/admin/settings/config/restore', {
|
||||||
|
}).then(res => {
|
||||||
|
window.location.href = window.location.href;
|
||||||
|
});
|
||||||
|
})
|
||||||
|
|
||||||
|
$('.btn-save').on('click', function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
let confirm = window.confirm('Are you sure you want to overwrite your current .env?');
|
||||||
|
if(!confirm) {
|
||||||
|
swal('Cancelled', 'You have cancelled the .env update.', 'warning');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
axios.post('/i/admin/settings/config', {
|
||||||
|
res: editor.getValue()
|
||||||
|
}).then(res => {
|
||||||
|
window.location.href = window.location.href;
|
||||||
|
});
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
@endpush
|
||||||
|
|
||||||
|
@push('styles')
|
||||||
|
<style type="text/css" media="screen">
|
||||||
|
#editor {
|
||||||
|
display: block;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
min-height: 400px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
@endpush
|
||||||
|
@endif
|
|
@ -23,6 +23,8 @@ Route::domain(config('pixelfed.domain.admin'))->prefix('i/admin')->group(functio
|
||||||
Route::get('settings', 'AdminController@settings')->name('admin.settings');
|
Route::get('settings', 'AdminController@settings')->name('admin.settings');
|
||||||
Route::post('settings', 'AdminController@settingsHomeStore');
|
Route::post('settings', 'AdminController@settingsHomeStore');
|
||||||
Route::get('settings/config', 'AdminController@settingsConfig')->name('admin.settings.config');
|
Route::get('settings/config', 'AdminController@settingsConfig')->name('admin.settings.config');
|
||||||
|
Route::post('settings/config', 'AdminController@settingsConfigStore');
|
||||||
|
Route::post('settings/config/restore', 'AdminController@settingsConfigRestore');
|
||||||
Route::get('settings/features', 'AdminController@settingsFeatures')->name('admin.settings.features');
|
Route::get('settings/features', 'AdminController@settingsFeatures')->name('admin.settings.features');
|
||||||
Route::get('settings/pages', 'AdminController@settingsPages')->name('admin.settings.pages');
|
Route::get('settings/pages', 'AdminController@settingsPages')->name('admin.settings.pages');
|
||||||
Route::get('settings/pages/edit', 'PageController@edit')->name('admin.settings.pages.edit');
|
Route::get('settings/pages/edit', 'PageController@edit')->name('admin.settings.pages.edit');
|
||||||
|
|
Loading…
Reference in a new issue