ctrlpanel/app/Classes/Settings/System.php
Shift 70208d2157
Apply Laravel coding style
Shift automatically applies the Laravel coding style - which uses the PSR-12 coding style as a base with some minor additions.

You may customize the code style applied by configuring [Pint](https://laravel.com/docs/pint), [PHP CS Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer), or [PHP CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) for your project root.

For more information on customizing the code style applied by Shift, [watch this short video](https://laravelshift.com/videos/shift-code-style).
2023-01-05 17:01:42 +00:00

128 lines
5.6 KiB
PHP

<?php
namespace App\Classes\Settings;
use App\Classes\Pterodactyl;
use App\Models\Settings;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Validator;
class System
{
public function __construct()
{
}
public function checkPteroClientkey()
{
$response = Pterodactyl::getClientUser();
if ($response->failed()) {
return redirect()->back()->with('error', __('Your Key or URL is not correct'));
}
return redirect()->back()->with('success', __('Everything is good!'));
}
public function updateSettings(Request $request)
{
$validator = Validator::make($request->all(), [
'register-ip-check' => 'string',
'server-create-charge-first-hour' => 'string',
'credits-display-name' => 'required|string',
'allocation-limit' => 'required|min:0|integer',
'force-email-verification' => 'string',
'force-discord-verification' => 'string',
'initial-credits' => 'required|min:0|integer',
'initial-server-limit' => 'required|min:0|integer',
'credits-reward-amount-discord' => 'required|min:0|integer',
'credits-reward-amount-email' => 'required|min:0|integer',
'server-limit-discord' => 'required|min:0|integer',
'server-limit-email' => 'required|min:0|integer',
'server-limit-purchase' => 'required|min:0|integer',
'pterodactyl-api-key' => 'required|string',
'pterodactyl-url' => 'required|string',
'per-page-limit' => 'required|min:0|integer',
'pterodactyl-admin-api-key' => 'required|string',
'enable-upgrades' => 'string',
'enable-disable-servers' => 'string',
'show-imprint' => 'string',
'show-privacy' => 'string',
'show-tos' => 'string',
]);
$validator->after(function ($validator) use ($request) {
// if enable-recaptcha is true then recaptcha-site-key and recaptcha-secret-key must be set
if ($request->get('enable-upgrades') == 'true' && (! $request->get('pterodactyl-admin-api-key'))) {
$validator->errors()->add('pterodactyl-admin-api-key', 'The admin api key is required when upgrades are enabled.');
}
});
if ($validator->fails()) {
return redirect(route('admin.settings.index').'#system')->with('error', __('System settings have not been updated!'))->withErrors($validator)
->withInput();
}
// update Icons from request
$this->updateIcons($request);
$values = [
'SETTINGS::SYSTEM:REGISTER_IP_CHECK' => 'register-ip-check',
'SETTINGS::SYSTEM:SERVER_CREATE_CHARGE_FIRST_HOUR' => 'server-create-charge-first-hour',
'SETTINGS::SYSTEM:CREDITS_DISPLAY_NAME' => 'credits-display-name',
'SETTINGS::SERVER:ALLOCATION_LIMIT' => 'allocation-limit',
'SETTINGS::USER:FORCE_DISCORD_VERIFICATION' => 'force-discord-verification',
'SETTINGS::USER:FORCE_EMAIL_VERIFICATION' => 'force-email-verification',
'SETTINGS::USER:INITIAL_CREDITS' => 'initial-credits',
'SETTINGS::USER:INITIAL_SERVER_LIMIT' => 'initial-server-limit',
'SETTINGS::USER:CREDITS_REWARD_AFTER_VERIFY_DISCORD' => 'credits-reward-amount-discord',
'SETTINGS::USER:CREDITS_REWARD_AFTER_VERIFY_EMAIL' => 'credits-reward-amount-email',
'SETTINGS::USER:SERVER_LIMIT_REWARD_AFTER_VERIFY_DISCORD' => 'server-limit-discord',
'SETTINGS::USER:SERVER_LIMIT_REWARD_AFTER_VERIFY_EMAIL' => 'server-limit-email',
'SETTINGS::USER:SERVER_LIMIT_AFTER_IRL_PURCHASE' => 'server-limit-purchase',
'SETTINGS::MISC:PHPMYADMIN:URL' => 'phpmyadmin-url',
'SETTINGS::SYSTEM:PTERODACTYL:URL' => 'pterodactyl-url',
'SETTINGS::SYSTEM:PTERODACTYL:PER_PAGE_LIMIT' => 'per-page-limit',
'SETTINGS::SYSTEM:PTERODACTYL:TOKEN' => 'pterodactyl-api-key',
'SETTINGS::SYSTEM:ENABLE_LOGIN_LOGO' => 'enable-login-logo',
'SETTINGS::SYSTEM:PTERODACTYL:ADMIN_USER_TOKEN' => 'pterodactyl-admin-api-key',
'SETTINGS::SYSTEM:ENABLE_UPGRADE' => 'enable-upgrade',
'SETTINGS::SYSTEM:CREATION_OF_NEW_SERVERS' => 'enable-disable-servers',
'SETTINGS::SYSTEM:CREATION_OF_NEW_USERS' => 'enable-disable-new-users',
'SETTINGS::SYSTEM:SHOW_IMPRINT' => 'show-imprint',
'SETTINGS::SYSTEM:SHOW_PRIVACY' => 'show-privacy',
'SETTINGS::SYSTEM:SHOW_TOS' => 'show-tos',
];
foreach ($values as $key => $value) {
$param = $request->get($value);
Settings::where('key', $key)->updateOrCreate(['key' => $key], ['value' => $param]);
Cache::forget('setting'.':'.$key);
}
return redirect(route('admin.settings.index').'#system')->with('success', __('System settings updated!'));
}
private function updateIcons(Request $request)
{
$request->validate([
'icon' => 'nullable|max:10000|mimes:jpg,png,jpeg',
'logo' => 'nullable|max:10000|mimes:jpg,png,jpeg',
'favicon' => 'nullable|max:10000|mimes:ico',
]);
if ($request->hasFile('icon')) {
$request->file('icon')->storeAs('public', 'icon.png');
}
if ($request->hasFile('logo')) {
$request->file('logo')->storeAs('public', 'logo.png');
}
if ($request->hasFile('favicon')) {
$request->file('favicon')->storeAs('public', 'favicon.ico');
}
}
}