Skip to content

Commit f9df463

Browse files
authored
Implement a better management interface for Settings (pterodactyl#809)
1 parent 75eb506 commit f9df463

40 files changed

+1274
-383
lines changed

.env.travis

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,4 @@ MAIL_DRIVER=array
1616
QUEUE_DRIVER=sync
1717

1818
HASHIDS_SALT=test123
19+
APP_ENVIRONMENT_ONLY=true
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
namespace Pterodactyl\Contracts\Repository;
4+
5+
interface SettingsRepositoryInterface extends RepositoryInterface
6+
{
7+
/**
8+
* Store a new persistent setting in the database.
9+
*
10+
* @param string $key
11+
* @param string $value
12+
* @return mixed
13+
*/
14+
public function set(string $key, string $value);
15+
16+
/**
17+
* Retrieve a persistent setting from the database.
18+
*
19+
* @param string $key
20+
* @param mixed $default
21+
* @return mixed
22+
*/
23+
public function get(string $key, $default);
24+
25+
/**
26+
* Remove a key from the database cache.
27+
*
28+
* @param string $key
29+
* @return mixed
30+
*/
31+
public function forget(string $key);
32+
}
Lines changed: 5 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,25 @@
11
<?php
2-
/**
3-
* Pterodactyl - Panel
4-
* Copyright (c) 2015 - 2017 Dane Everitt <dane@daneeveritt.com>.
5-
*
6-
* This software is licensed under the terms of the MIT license.
7-
* https://opensource.org/licenses/MIT
8-
*/
92

103
namespace Pterodactyl\Http\Controllers\Admin;
114

12-
use Krucas\Settings\Settings;
13-
use Prologue\Alerts\AlertsMessageBag;
5+
use Illuminate\View\View;
146
use Pterodactyl\Http\Controllers\Controller;
15-
use Pterodactyl\Http\Requests\Admin\BaseFormRequest;
167
use Pterodactyl\Services\Helpers\SoftwareVersionService;
178

189
class BaseController extends Controller
1910
{
20-
/**
21-
* @var \Prologue\Alerts\AlertsMessageBag
22-
*/
23-
protected $alert;
24-
25-
/**
26-
* @var \Krucas\Settings\Settings
27-
*/
28-
protected $settings;
29-
3011
/**
3112
* @var \Pterodactyl\Services\Helpers\SoftwareVersionService
3213
*/
33-
protected $version;
14+
private $version;
3415

3516
/**
3617
* BaseController constructor.
3718
*
38-
* @param \Prologue\Alerts\AlertsMessageBag $alert
39-
* @param \Krucas\Settings\Settings $settings
4019
* @param \Pterodactyl\Services\Helpers\SoftwareVersionService $version
4120
*/
42-
public function __construct(
43-
AlertsMessageBag $alert,
44-
Settings $settings,
45-
SoftwareVersionService $version
46-
) {
47-
$this->alert = $alert;
48-
$this->settings = $settings;
21+
public function __construct(SoftwareVersionService $version)
22+
{
4923
$this->version = $version;
5024
}
5125

@@ -54,34 +28,8 @@ public function __construct(
5428
*
5529
* @return \Illuminate\View\View
5630
*/
57-
public function getIndex()
31+
public function index(): View
5832
{
5933
return view('admin.index', ['version' => $this->version]);
6034
}
61-
62-
/**
63-
* Return the admin settings view.
64-
*
65-
* @return \Illuminate\View\View
66-
*/
67-
public function getSettings()
68-
{
69-
return view('admin.settings');
70-
}
71-
72-
/**
73-
* Handle settings post request.
74-
*
75-
* @param \Pterodactyl\Http\Requests\Admin\BaseFormRequest $request
76-
* @return \Illuminate\Http\RedirectResponse
77-
*/
78-
public function postSettings(BaseFormRequest $request)
79-
{
80-
$this->settings->set('company', $request->input('company'));
81-
$this->settings->set('2fa', $request->input('2fa'));
82-
83-
$this->alert->success('Settings have been successfully updated.')->flash();
84-
85-
return redirect()->route('admin.settings');
86-
}
8735
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Controllers\Admin\Settings;
4+
5+
use Illuminate\View\View;
6+
use Illuminate\Http\RedirectResponse;
7+
use Prologue\Alerts\AlertsMessageBag;
8+
use Illuminate\Contracts\Console\Kernel;
9+
use Pterodactyl\Http\Controllers\Controller;
10+
use Illuminate\Contracts\Config\Repository as ConfigRepository;
11+
use Pterodactyl\Contracts\Repository\SettingsRepositoryInterface;
12+
use Pterodactyl\Http\Requests\Admin\Settings\AdvancedSettingsFormRequest;
13+
14+
class AdvancedController extends Controller
15+
{
16+
/**
17+
* @var \Prologue\Alerts\AlertsMessageBag
18+
*/
19+
private $alert;
20+
21+
/**
22+
* @var \Illuminate\Contracts\Config\Repository
23+
*/
24+
private $config;
25+
26+
/**
27+
* @var \Illuminate\Contracts\Console\Kernel
28+
*/
29+
private $kernel;
30+
31+
/**
32+
* @var \Pterodactyl\Contracts\Repository\SettingsRepositoryInterface
33+
*/
34+
private $settings;
35+
36+
/**
37+
* AdvancedController constructor.
38+
*
39+
* @param \Prologue\Alerts\AlertsMessageBag $alert
40+
* @param \Illuminate\Contracts\Config\Repository $config
41+
* @param \Illuminate\Contracts\Console\Kernel $kernel
42+
* @param \Pterodactyl\Contracts\Repository\SettingsRepositoryInterface $settings
43+
*/
44+
public function __construct(
45+
AlertsMessageBag $alert,
46+
ConfigRepository $config,
47+
Kernel $kernel,
48+
SettingsRepositoryInterface $settings
49+
) {
50+
$this->alert = $alert;
51+
$this->config = $config;
52+
$this->kernel = $kernel;
53+
$this->settings = $settings;
54+
}
55+
56+
/**
57+
* Render advanced Panel settings UI.
58+
*
59+
* @return \Illuminate\View\View
60+
*/
61+
public function index(): View
62+
{
63+
$showRecaptchaWarning = false;
64+
if (
65+
$this->config->get('recaptcha._shipped_secret_key') === $this->config->get('recaptcha.secret_key')
66+
|| $this->config->get('recaptcha._shipped_website_key') === $this->config->get('recaptcha.website_key')
67+
) {
68+
$showRecaptchaWarning = true;
69+
}
70+
71+
return view('admin.settings.advanced', [
72+
'showRecaptchaWarning' => $showRecaptchaWarning,
73+
]);
74+
}
75+
76+
/**
77+
* @param \Pterodactyl\Http\Requests\Admin\Settings\AdvancedSettingsFormRequest $request
78+
* @return \Illuminate\Http\RedirectResponse
79+
*/
80+
public function update(AdvancedSettingsFormRequest $request): RedirectResponse
81+
{
82+
foreach ($request->normalize() as $key => $value) {
83+
$this->settings->set('settings::' . $key, $value);
84+
}
85+
86+
$this->kernel->call('queue:restart');
87+
$this->alert->success('Advanced settings have been updated successfully and the queue worker was restarted to apply these changes.')->flash();
88+
89+
return redirect()->route('admin.settings.advanced');
90+
}
91+
}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Controllers\Admin\Settings;
4+
5+
use Illuminate\View\View;
6+
use Illuminate\Http\RedirectResponse;
7+
use Prologue\Alerts\AlertsMessageBag;
8+
use Illuminate\Contracts\Console\Kernel;
9+
use Pterodactyl\Http\Controllers\Controller;
10+
use Pterodactyl\Traits\Helpers\AvailableLanguages;
11+
use Pterodactyl\Services\Helpers\SoftwareVersionService;
12+
use Pterodactyl\Contracts\Repository\SettingsRepositoryInterface;
13+
use Pterodactyl\Http\Requests\Admin\Settings\BaseSettingsFormRequest;
14+
15+
class IndexController extends Controller
16+
{
17+
use AvailableLanguages;
18+
19+
/**
20+
* @var \Prologue\Alerts\AlertsMessageBag
21+
*/
22+
private $alert;
23+
24+
/**
25+
* @var \Illuminate\Contracts\Console\Kernel
26+
*/
27+
private $kernel;
28+
29+
/**
30+
* @var \Pterodactyl\Contracts\Repository\SettingsRepositoryInterface
31+
*/
32+
private $settings;
33+
34+
/**
35+
* @var \Pterodactyl\Services\Helpers\SoftwareVersionService
36+
*/
37+
private $versionService;
38+
39+
/**
40+
* IndexController constructor.
41+
*
42+
* @param \Prologue\Alerts\AlertsMessageBag $alert
43+
* @param \Illuminate\Contracts\Console\Kernel $kernel
44+
* @param \Pterodactyl\Contracts\Repository\SettingsRepositoryInterface $settings
45+
* @param \Pterodactyl\Services\Helpers\SoftwareVersionService $versionService
46+
*/
47+
public function __construct(
48+
AlertsMessageBag $alert,
49+
Kernel $kernel,
50+
SettingsRepositoryInterface $settings,
51+
SoftwareVersionService $versionService)
52+
{
53+
$this->alert = $alert;
54+
$this->kernel = $kernel;
55+
$this->settings = $settings;
56+
$this->versionService = $versionService;
57+
}
58+
59+
/**
60+
* Render the UI for basic Panel settings.
61+
*
62+
* @return \Illuminate\View\View
63+
*/
64+
public function index(): View
65+
{
66+
return view('admin.settings.index', [
67+
'version' => $this->versionService,
68+
'languages' => $this->getAvailableLanguages(true),
69+
]);
70+
}
71+
72+
/**
73+
* Handle settings update.
74+
*
75+
* @param \Pterodactyl\Http\Requests\Admin\Settings\BaseSettingsFormRequest $request
76+
* @return \Illuminate\Http\RedirectResponse
77+
*/
78+
public function update(BaseSettingsFormRequest $request): RedirectResponse
79+
{
80+
foreach ($request->normalize() as $key => $value) {
81+
$this->settings->set('settings::' . $key, $value);
82+
}
83+
84+
$this->kernel->call('queue:restart');
85+
$this->alert->success('Panel settings have been updated successfully and the queue worker was restarted to apply these changes.')->flash();
86+
87+
return redirect()->route('admin.settings');
88+
}
89+
}

0 commit comments

Comments
 (0)