Add encrypted migrations and closes #897

This commit is contained in:
Ferks-FK 2023-10-22 11:11:49 -04:00
parent ee5b99ce71
commit 754d4f178f
7 changed files with 42 additions and 31 deletions

View file

@ -6,7 +6,7 @@ class CreateMollieSettings extends SettingsMigration
{ {
public function up(): void public function up(): void
{ {
$this->migrator->add('mollie.api_key', null); $this->migrator->addEncrypted('mollie.api_key', null);
$this->migrator->add('mollie.enabled', false); $this->migrator->add('mollie.enabled', false);
} }

View file

@ -11,10 +11,10 @@ class CreatePayPalSettings extends SettingsMigration
$table_exists = DB::table('settings_old')->exists(); $table_exists = DB::table('settings_old')->exists();
$this->migrator->add('paypal.client_id', $table_exists ? $this->getOldValue('SETTINGS::PAYMENTS:PAYPAL:CLIENT_ID') : null); $this->migrator->addEncrypted('paypal.client_id', $table_exists ? $this->getOldValue('SETTINGS::PAYMENTS:PAYPAL:CLIENT_ID') : null);
$this->migrator->add('paypal.client_secret', $table_exists ? $this->getOldValue('SETTINGS::PAYMENTS:PAYPAL:SECRET') : null); $this->migrator->addEncrypted('paypal.client_secret', $table_exists ? $this->getOldValue('SETTINGS::PAYMENTS:PAYPAL:SECRET') : null);
$this->migrator->add('paypal.sandbox_client_id', $table_exists ? $this->getOldValue('SETTINGS::PAYMENTS:PAYPAL:SANDBOX_CLIENT_ID') : null); $this->migrator->addEncrypted('paypal.sandbox_client_id', $table_exists ? $this->getOldValue('SETTINGS::PAYMENTS:PAYPAL:SANDBOX_CLIENT_ID') : null);
$this->migrator->add('paypal.sandbox_client_secret', $table_exists ? $this->getOldValue('SETTINGS::PAYMENTS:PAYPAL:SANDBOX_SECRET') : null); $this->migrator->addEncrypted('paypal.sandbox_client_secret', $table_exists ? $this->getOldValue('SETTINGS::PAYMENTS:PAYPAL:SANDBOX_SECRET') : null);
$this->migrator->add('paypal.enabled', false); $this->migrator->add('paypal.enabled', false);
} }

View file

@ -9,9 +9,9 @@ class CreateStripeSettings extends SettingsMigration
{ {
$table_exists = DB::table('settings_old')->exists(); $table_exists = DB::table('settings_old')->exists();
$this->migrator->add('stripe.secret_key', $table_exists ? $this->getOldValue('SETTINGS::PAYMENTS:STRIPE:SECRET') : null); $this->migrator->addEncrypted('stripe.secret_key', $table_exists ? $this->getOldValue('SETTINGS::PAYMENTS:STRIPE:SECRET') : null);
$this->migrator->add('stripe.endpoint_secret', $table_exists ? $this->getOldValue('SETTINGS::PAYMENTS:STRIPE:ENDPOINT_SECRET') : null); $this->migrator->add('stripe.endpoint_secret', $table_exists ? $this->getOldValue('SETTINGS::PAYMENTS:STRIPE:ENDPOINT_SECRET') : null);
$this->migrator->add('stripe.test_secret_key', $table_exists ? $this->getOldValue('SETTINGS::PAYMENTS:STRIPE:TEST_SECRET') : null); $this->migrator->addEncrypted('stripe.test_secret_key', $table_exists ? $this->getOldValue('SETTINGS::PAYMENTS:STRIPE:TEST_SECRET') : null);
$this->migrator->add('stripe.test_endpoint_secret', $table_exists ? $this->getOldValue('SETTINGS::PAYMENTS:STRIPE:ENDPOINT_TEST_SECRET') : null); $this->migrator->add('stripe.test_endpoint_secret', $table_exists ? $this->getOldValue('SETTINGS::PAYMENTS:STRIPE:ENDPOINT_TEST_SECRET') : null);
$this->migrator->add('stripe.enabled', false); $this->migrator->add('stripe.enabled', false);
} }

View file

@ -80,12 +80,17 @@ class MailSettings extends Settings
], ],
'mail_password' => [ 'mail_password' => [
'label' => 'Mail Password', 'label' => 'Mail Password',
'type' => 'string', 'type' => 'password',
'description' => 'The password of your mail server.', 'description' => 'The password of your mail server.',
], ],
'mail_encryption' => [ 'mail_encryption' => [
'label' => 'Mail Encryption', 'label' => 'Mail Encryption',
'type' => 'string', 'type' => 'select',
'options' => [
'null' => 'None',
'tls' => 'TLS',
'ssl' => 'SSL'
],
'description' => 'The encryption of your mail server.', 'description' => 'The encryption of your mail server.',
], ],
'mail_from_address' => [ 'mail_from_address' => [

View file

@ -10,8 +10,8 @@ class CreatePterodactylSettings extends SettingsMigration
$table_exists = DB::table('settings_old')->exists(); $table_exists = DB::table('settings_old')->exists();
// Get the user-set configuration values from the old table. // Get the user-set configuration values from the old table.
$this->migrator->add('pterodactyl.admin_token', $table_exists ? $this->getOldValue('SETTINGS::SYSTEM:PTERODACTYL:TOKEN') : env('PTERODACTYL_TOKEN', '')); $this->migrator->addEncrypted('pterodactyl.admin_token', $table_exists ? $this->getOldValue('SETTINGS::SYSTEM:PTERODACTYL:TOKEN') : env('PTERODACTYL_TOKEN', ''));
$this->migrator->add('pterodactyl.user_token', $table_exists ? $this->getOldValue('SETTINGS::SYSTEM:PTERODACTYL:ADMIN_USER_TOKEN') : ''); $this->migrator->addEncrypted('pterodactyl.user_token', $table_exists ? $this->getOldValue('SETTINGS::SYSTEM:PTERODACTYL:ADMIN_USER_TOKEN') : '');
$this->migrator->add('pterodactyl.panel_url', $table_exists ? $this->getOldValue('SETTINGS::SYSTEM:PTERODACTYL:URL') : env('PTERODACTYL_URL', '')); $this->migrator->add('pterodactyl.panel_url', $table_exists ? $this->getOldValue('SETTINGS::SYSTEM:PTERODACTYL:URL') : env('PTERODACTYL_URL', ''));
$this->migrator->add('pterodactyl.per_page_limit', $table_exists ? $this->getOldValue('SETTINGS::SYSTEM:PTERODACTYL:PER_PAGE_LIMIT') : 200); $this->migrator->add('pterodactyl.per_page_limit', $table_exists ? $this->getOldValue('SETTINGS::SYSTEM:PTERODACTYL:PER_PAGE_LIMIT') : 200);
} }

View file

@ -13,7 +13,7 @@ class CreateMailSettings extends SettingsMigration
$this->migrator->add('mail.mail_host', $table_exists ? $this->getOldValue('SETTINGS::MAIL:HOST') : env('MAIL_HOST', 'localhost')); $this->migrator->add('mail.mail_host', $table_exists ? $this->getOldValue('SETTINGS::MAIL:HOST') : env('MAIL_HOST', 'localhost'));
$this->migrator->add('mail.mail_port', $table_exists ? $this->getOldValue('SETTINGS::MAIL:PORT') : env('MAIL_PORT', 25)); $this->migrator->add('mail.mail_port', $table_exists ? $this->getOldValue('SETTINGS::MAIL:PORT') : env('MAIL_PORT', 25));
$this->migrator->add('mail.mail_username', $table_exists ? $this->getOldValue('SETTINGS::MAIL:USERNAME') : env('MAIL_USERNAME', '')); $this->migrator->add('mail.mail_username', $table_exists ? $this->getOldValue('SETTINGS::MAIL:USERNAME') : env('MAIL_USERNAME', ''));
$this->migrator->add('mail.mail_password', $table_exists ? $this->getOldValue('SETTINGS::MAIL:PASSWORD') : env('MAIL_PASSWORD', '')); $this->migrator->addEncrypted('mail.mail_password', $table_exists ? $this->getOldValue('SETTINGS::MAIL:PASSWORD') : env('MAIL_PASSWORD', ''));
$this->migrator->add('mail.mail_encryption', $table_exists ? $this->getOldValue('SETTINGS::MAIL:ENCRYPTION') : env('MAIL_ENCRYPTION', 'tls')); $this->migrator->add('mail.mail_encryption', $table_exists ? $this->getOldValue('SETTINGS::MAIL:ENCRYPTION') : env('MAIL_ENCRYPTION', 'tls'));
$this->migrator->add('mail.mail_from_address', $table_exists ? $this->getOldValue('SETTINGS::MAIL:FROM_ADDRESS') : env('MAIL_FROM_ADDRESS', 'example@example.com')); $this->migrator->add('mail.mail_from_address', $table_exists ? $this->getOldValue('SETTINGS::MAIL:FROM_ADDRESS') : env('MAIL_FROM_ADDRESS', 'example@example.com'));
$this->migrator->add('mail.mail_from_name', $table_exists ? $this->getOldValue('SETTINGS::MAIL:FROM_NAME') : env('APP_NAME', 'CtrlPanel.gg')); $this->migrator->add('mail.mail_from_name', $table_exists ? $this->getOldValue('SETTINGS::MAIL:FROM_NAME') : env('APP_NAME', 'CtrlPanel.gg'));

View file

@ -4,7 +4,7 @@
<!-- CONTENT HEADER --> <!-- CONTENT HEADER -->
<section class="content-header"> <section class="content-header">
<div class="container-fluid"> <div class="container-fluid">
<div class="row mb-2"> <div class="mb-2 row">
<div class="col-sm-6"> <div class="col-sm-6">
<h1>{{ __('Settings') }}</h1> <h1>{{ __('Settings') }}</h1>
</div> </div>
@ -37,13 +37,13 @@
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header">
<div class="d-flex justify-content-between"> <div class="d-flex justify-content-between">
<h5 class="card-title"><i class="fas fa-tools mr-2"></i>{{ __('Settings') }}</h5> <h5 class="card-title"><i class="mr-2 fas fa-tools"></i>{{ __('Settings') }}</h5>
</div> </div>
</div> </div>
<div class="card-body"> <div class="card-body">
<!-- Sidebar Menu --> <!-- Sidebar Menu -->
<div class="d-flex w-100"> <div class="d-flex w-100">
<div class="col-2 p-0"> <div class="p-0 col-2">
<nav class="mt-1"> <nav class="mt-1">
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="tablist" <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="tablist"
data-accordion="false"> data-accordion="false">
@ -109,17 +109,17 @@
</div> </div>
<!-- /.sidebar-menu --> <!-- /.sidebar-menu -->
<!-- Content in $settings --> <!-- Content in $settings -->
<div class="col-10 p-0"> <div class="p-0 col-10">
<div class="tab-content ml-3" style="width: 100%;"> <div class="ml-3 tab-content" style="width: 100%;">
<div container class="tab-pane fade container" id="icons" role="tabpanel"> <div container class="container tab-pane fade" id="icons" role="tabpanel">
<form method="POST" enctype="multipart/form-data" class="mb-3" <form method="POST" enctype="multipart/form-data" class="mb-3"
action="{{ route('admin.settings.updateIcons') }}"> action="{{ route('admin.settings.updateIcons') }}">
@csrf @csrf
@method('POST') @method('POST')
<div class="row"> <div class="row">
<div class="card ml-5" style="width: 18rem;"> <div class="ml-5 card" style="width: 18rem;">
<span class="h3 text-center">{{ __('FavIcon') }} </span> <span class="text-center h3">{{ __('FavIcon') }} </span>
<img src="{{ Storage::disk('public')->exists('favicon.ico') ? asset('storage/favicon.ico') : asset('images/controlpanel_logo.png') }}" <img src="{{ Storage::disk('public')->exists('favicon.ico') ? asset('storage/favicon.ico') : asset('images/controlpanel_logo.png') }}"
style="width:5vw;display: block; margin-left: auto;margin-right: auto" style="width:5vw;display: block; margin-left: auto;margin-right: auto"
class="card-img-top" alt="..."> class="card-img-top" alt="...">
@ -130,8 +130,8 @@
name="favicon" id="favicon"> name="favicon" id="favicon">
</div> </div>
<div class="card ml-5" style="width: 18rem;"> <div class="ml-5 card" style="width: 18rem;">
<span class="h3 text-center">{{ __('Icon') }} </span> <span class="text-center h3">{{ __('Icon') }} </span>
<img src="{{ Storage::disk('public')->exists('icon.png') ? asset('storage/icon.png') : asset('images/controlpanel_logo.png') }}" <img src="{{ Storage::disk('public')->exists('icon.png') ? asset('storage/icon.png') : asset('images/controlpanel_logo.png') }}"
style="width:5vw;display: block; margin-left: auto;margin-right: auto" style="width:5vw;display: block; margin-left: auto;margin-right: auto"
class="card-img-top" alt="..."> class="card-img-top" alt="...">
@ -142,8 +142,8 @@
class="form-control" name="icon" id="icon"> class="form-control" name="icon" id="icon">
</div> </div>
<div class="card ml-5" style="width: 18rem;"> <div class="ml-5 card" style="width: 18rem;">
<span class="h3 text-center">{{ __('Login-page Logo') }} </span> <span class="text-center h3">{{ __('Login-page Logo') }} </span>
<img src="{{ Storage::disk('public')->exists('logo.png') ? asset('storage/logo.png') : asset('images/controlpanel_logo.png') }}" <img src="{{ Storage::disk('public')->exists('logo.png') ? asset('storage/logo.png') : asset('images/controlpanel_logo.png') }}"
style="width:5vw;display: block; margin-left: auto;margin-right: auto" style="width:5vw;display: block; margin-left: auto;margin-right: auto"
class="card-img-top" alt="..."> class="card-img-top" alt="...">
@ -155,7 +155,7 @@
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<button class="btn btn-primary ml-3 mt-3">{{ __('Save') }}</button> <button class="mt-3 ml-3 btn btn-primary">{{ __('Save') }}</button>
</div> </div>
</form> </form>
</div> </div>
@ -182,14 +182,14 @@
</div> </div>
<div class="col-8"> <div class="col-8">
<div class="custom-control mb-3 d-flex align-items-center"> <div class="mb-3 custom-control d-flex align-items-center">
@if ($value['description']) @if ($value['description'])
<i class="fas fa-info-circle mr-4" data-toggle="popover" <i class="mr-4 fas fa-info-circle" data-toggle="popover"
data-trigger="hover" data-placement="top" data-trigger="hover" data-placement="top"
data-html="true" data-html="true"
data-content="{{ $value['description'] }}"></i> data-content="{{ $value['description'] }}"></i>
@else @else
<i class="fas fa-info-circle mr-4 invisible"></i> <i class="invisible mr-4 fas fa-info-circle"></i>
@endif @endif
<div class="w-100"> <div class="w-100">
@ -200,6 +200,12 @@
value="{{ $value['value'] }}"> value="{{ $value['value'] }}">
@break @break
@case($value['type'] == 'password')
<input type="password" class="form-control"
name="{{ $key }}"
value="{{ $value['value'] }}">
@break
@case($value['type'] == 'boolean') @case($value['type'] == 'boolean')
<input type="checkbox" name="{{ $key }}" <input type="checkbox" name="{{ $key }}"
value="{{ $value['value'] }}" value="{{ $value['value'] }}"
@ -277,7 +283,7 @@
<div class="col-8"> <div class="col-8">
<div class="w-100"> <div class="w-100">
<div class="input-group mb-3"> <div class="mb-3 input-group">
{!! htmlScriptTagJsApi() !!} {!! htmlScriptTagJsApi() !!}
{!! htmlFormSnippet() !!} {!! htmlFormSnippet() !!}
@error('g-recaptcha-response') @error('g-recaptcha-response')
@ -294,10 +300,10 @@
<div class="row"> <div class="row">
<div class="col-12 d-flex align-items-center justify-content-end"> <div class="col-12 d-flex align-items-center justify-content-end">
<button type="submit" class="btn btn-primary float-right ">Save <button type="submit" class="float-right btn btn-primary ">Save
</button> </button>
<button type="reset" <button type="reset"
class="btn btn-secondary float-right ml-2">Reset class="float-right ml-2 btn btn-secondary">Reset
</button> </button>
</div> </div>
</div> </div>