From cfd370eb6dbea4d32ea1861eb6296801085280b5 Mon Sep 17 00:00:00 2001 From: Ferks-FK Date: Sat, 4 Feb 2023 16:40:42 +0000 Subject: [PATCH] Too many changes to mention. --- .../Controllers/Admin/InvoiceController.php | 4 +- .../Controllers/Admin/OverViewController.php | 10 ++--- .../Controllers/Admin/PaymentController.php | 5 --- .../Controllers/Admin/ProductController.php | 9 ++-- .../Controllers/Admin/ServerController.php | 6 +-- .../Admin/ShopProductController.php | 2 +- app/Http/Controllers/Admin/UserController.php | 8 ++-- app/Http/Controllers/Api/UserController.php | 9 ++-- .../Controllers/Auth/RegisterController.php | 3 +- app/Http/Controllers/Controller.php | 4 +- app/Http/Controllers/ProductController.php | 6 +-- app/Http/Controllers/ProfileController.php | 14 +++---- app/Http/Controllers/ServerController.php | 41 +++++++++---------- app/Http/Controllers/StoreController.php | 7 ++-- app/Settings/ServerSettings.php | 2 + database/seeders/DatabaseSeeder.php | 2 +- ...3_02_01_164731_create_general_settings.php | 13 +++++- ..._01_181334_create_pterodactyl_settings.php | 13 +++++- ...2023_02_01_181453_create_mail_settings.php | 15 ++++++- ...2023_02_01_181925_create_user_settings.php | 13 +++++- ...23_02_01_181950_create_server_settings.php | 14 ++++++- ...3_02_01_182021_create_invoice_settings.php | 25 +++++++---- ...3_02_01_182043_create_discord_settings.php | 21 +++++++--- ...23_02_01_182108_create_locale_settings.php | 13 +++++- ..._02_01_182135_create_referral_settings.php | 13 +++++- ...3_02_01_182158_create_website_settings.php | 13 +++++- 26 files changed, 194 insertions(+), 91 deletions(-) diff --git a/app/Http/Controllers/Admin/InvoiceController.php b/app/Http/Controllers/Admin/InvoiceController.php index e3fc0bca..1897a639 100644 --- a/app/Http/Controllers/Admin/InvoiceController.php +++ b/app/Http/Controllers/Admin/InvoiceController.php @@ -15,7 +15,7 @@ class InvoiceController extends Controller $zip = new ZipArchive; $zip_safe_path = storage_path('invoices.zip'); $res = $zip->open($zip_safe_path, ZipArchive::CREATE | ZipArchive::OVERWRITE); - $result = $this::rglob(storage_path('app/invoice/*')); + $result = $this->rglob(storage_path('app/invoice/*')); if ($res === true) { $zip->addFromString('1. Info.txt', __('Created at').' '.now()->format('d.m.Y')); foreach ($result as $file) { @@ -38,7 +38,7 @@ class InvoiceController extends Controller { $files = glob($pattern, $flags); foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR | GLOB_NOSORT) as $dir) { - $files = array_merge($files, $this::rglob($dir.'/'.basename($pattern), $flags)); + $files = array_merge($files, $this->rglob($dir.'/'.basename($pattern), $flags)); } return $files; diff --git a/app/Http/Controllers/Admin/OverViewController.php b/app/Http/Controllers/Admin/OverViewController.php index 8f89b587..7dc3653c 100644 --- a/app/Http/Controllers/Admin/OverViewController.php +++ b/app/Http/Controllers/Admin/OverViewController.php @@ -20,10 +20,8 @@ class OverViewController extends Controller { public const TTL = 86400; - public function index(PterodactylSettings $ptero_settings) + public function index() { - //Prepare pterodactyl client - $pterodactyl_client = new PterodactylClient($ptero_settings); //Get counters $counters = collect(); //Set basic variables in the collection @@ -137,7 +135,7 @@ class OverViewController extends Controller //Get node information and prepare collection $pteroNodeIds = []; - foreach ($pterodactyl_client->getNodes() as $pteroNode) { + foreach ($this->pterodactyl->getNodes() as $pteroNode) { array_push($pteroNodeIds, $pteroNode['attributes']['id']); } $nodes = collect(); @@ -148,7 +146,7 @@ class OverViewController extends Controller } //Check if node exists on pterodactyl too, if not, skip $nodes->put($nodeId, collect()); $nodes[$nodeId]->name = $DBnode['name']; - $pteroNode = $pterodactyl_client->getNode($nodeId); + $pteroNode = $this->pterodactyl->getNode($nodeId); $nodes[$nodeId]->usagePercent = round(max($pteroNode['allocated_resources']['memory'] / ($pteroNode['memory'] * ($pteroNode['memory_overallocate'] + 100) / 100), $pteroNode['allocated_resources']['disk'] / ($pteroNode['disk'] * ($pteroNode['disk_overallocate'] + 100) / 100)) * 100, 2); $counters['totalUsagePercent'] += $nodes[$nodeId]->usagePercent; @@ -159,7 +157,7 @@ class OverViewController extends Controller } $counters['totalUsagePercent'] = ($DBnodes->count()) ? round($counters['totalUsagePercent'] / $DBnodes->count(), 2) : 0; - foreach ($pterodactyl_client->getServers() as $server) { //gets all servers from Pterodactyl and calculates total of credit usage for each node separately + total + foreach ($this->pterodactyl->getServers() as $server) { //gets all servers from Pterodactyl and calculates total of credit usage for each node separately + total $nodeId = $server['attributes']['node']; if ($CPServer = Server::query()->where('pterodactyl_id', $server['attributes']['id'])->first()) { diff --git a/app/Http/Controllers/Admin/PaymentController.php b/app/Http/Controllers/Admin/PaymentController.php index 0cf2e399..2eba098c 100644 --- a/app/Http/Controllers/Admin/PaymentController.php +++ b/app/Http/Controllers/Admin/PaymentController.php @@ -58,11 +58,6 @@ class PaymentController extends Controller } } - - - - - return view('store.checkout')->with([ 'product' => $shopProduct, 'discountpercent' => $discount, diff --git a/app/Http/Controllers/Admin/ProductController.php b/app/Http/Controllers/Admin/ProductController.php index 6982a9ee..68904e15 100644 --- a/app/Http/Controllers/Admin/ProductController.php +++ b/app/Http/Controllers/Admin/ProductController.php @@ -6,6 +6,7 @@ use App\Http\Controllers\Controller; use App\Models\Pterodactyl\Location; use App\Models\Pterodactyl\Nest; use App\Models\Product; +use App\Settings\UserSettings; use Exception; use Illuminate\Contracts\Foundation\Application; use Illuminate\Contracts\View\Factory; @@ -39,7 +40,7 @@ class ProductController extends Controller ]); } - public function clone(Request $request, Product $product) + public function clone(Product $product) { return view('admin.products.create', [ 'product' => $product, @@ -90,11 +91,11 @@ class ProductController extends Controller * @param Product $product * @return Application|Factory|View */ - public function show(Product $product) + public function show(Product $product, UserSettings $user_settings) { return view('admin.products.show', [ 'product' => $product, - 'minimum_credits' => config('SETTINGS::USER:MINIMUM_REQUIRED_CREDITS_TO_MAKE_SERVER'), + 'minimum_credits' => $user_settings->min_credits_to_make_server, ]); } @@ -157,7 +158,7 @@ class ProductController extends Controller * @param Product $product * @return RedirectResponse */ - public function disable(Request $request, Product $product) + public function disable(Product $product) { $product->update(['disabled' => ! $product->disabled]); diff --git a/app/Http/Controllers/Admin/ServerController.php b/app/Http/Controllers/Admin/ServerController.php index 5a656429..c29fcdc8 100644 --- a/app/Http/Controllers/Admin/ServerController.php +++ b/app/Http/Controllers/Admin/ServerController.php @@ -64,7 +64,7 @@ class ServerController extends Controller // try to update the owner on pterodactyl try { - $response = $this->client->updateServerOwner($server, $user->pterodactyl_id); + $response = $this->pterodactyl->updateServerOwner($server, $user->pterodactyl_id); if ($response->getStatusCode() != 200) { return redirect()->back()->with('error', 'Failed to update server owner on pterodactyl'); } @@ -127,7 +127,7 @@ class ServerController extends Controller } } - foreach ($this->client->getServers() as $server) { //go thru all ptero servers, if server exists, change value to true in array. + foreach ($this->pterodactyl->getServers() as $server) { //go thru all ptero servers, if server exists, change value to true in array. if (isset($CPIDArray[$server['attributes']['id']])) { $CPIDArray[$server['attributes']['id']] = true; @@ -147,7 +147,7 @@ class ServerController extends Controller }, ARRAY_FILTER_USE_BOTH); //Array of servers, that dont exist on ptero (value == false) $deleteCount = 0; foreach ($filteredArray as $key => $CPID) { //delete servers that dont exist on ptero anymore - if (!$this->client->getServerAttributes($key, true)) { + if (!$this->pterodactyl->getServerAttributes($key, true)) { $deleteCount++; } } diff --git a/app/Http/Controllers/Admin/ShopProductController.php b/app/Http/Controllers/Admin/ShopProductController.php index 655636f9..e0140218 100644 --- a/app/Http/Controllers/Admin/ShopProductController.php +++ b/app/Http/Controllers/Admin/ShopProductController.php @@ -117,7 +117,7 @@ class ShopProductController extends Controller * @param ShopProduct $shopProduct * @return RedirectResponse */ - public function disable(Request $request, ShopProduct $shopProduct) + public function disable(ShopProduct $shopProduct) { $shopProduct->update(['disabled' => !$shopProduct->disabled]); diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 43a08cbe..58a16482 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -31,7 +31,7 @@ class UserController extends Controller * @param Request $request * @return Application|Factory|View|Response */ - public function index(Request $request) + public function index() { return view('admin.users.index'); } @@ -118,7 +118,7 @@ class UserController extends Controller 'referral_code' => "required|string|min:2|max:32|unique:users,referral_code,{$user->id}", ]); - if (isset($this->client->getUser($request->input('pterodactyl_id'))['errors'])) { + if (isset($this->pterodactyl->getUser($request->input('pterodactyl_id'))['errors'])) { throw ValidationException::withMessages([ 'pterodactyl_id' => [__("User does not exists on pterodactyl's panel")], ]); @@ -160,7 +160,7 @@ class UserController extends Controller * @param User $user * @return RedirectResponse */ - public function verifyEmail(Request $request, User $user) + public function verifyEmail(User $user) { $user->verifyEmail(); @@ -198,7 +198,7 @@ class UserController extends Controller * @param User $user * @return Application|Factory|View|Response */ - public function notifications(User $user) + public function notifications() { return view('admin.users.notifications'); } diff --git a/app/Http/Controllers/Api/UserController.php b/app/Http/Controllers/Api/UserController.php index 68b0f948..ae36b9bd 100644 --- a/app/Http/Controllers/Api/UserController.php +++ b/app/Http/Controllers/Api/UserController.php @@ -2,7 +2,6 @@ namespace App\Http\Controllers\Api; -use App\Classes\Pterodactyl; use App\Events\UserUpdateCreditsEvent; use App\Http\Controllers\Controller; use App\Models\DiscordUser; @@ -95,7 +94,7 @@ class UserController extends Controller //Update Users Password on Pterodactyl //Username,Mail,First and Lastname are required aswell - $response = Pterodactyl::client()->patch('/application/users/' . $user->pterodactyl_id, [ + $response = $this->pterodactyl->client_admin->patch('/application/users/' . $user->pterodactyl_id, [ 'username' => $request->name, 'first_name' => $request->name, 'last_name' => $request->name, @@ -203,7 +202,7 @@ class UserController extends Controller * * @throws ValidationException */ - public function suspend(Request $request, int $id) + public function suspend(int $id) { $discordUser = DiscordUser::find($id); $user = $discordUser ? $discordUser->user : User::findOrFail($id); @@ -227,7 +226,7 @@ class UserController extends Controller * * @throws ValidationException */ - public function unsuspend(Request $request, int $id) + public function unsuspend(int $id) { $discordUser = DiscordUser::find($id); $user = $discordUser ? $discordUser->user : User::findOrFail($id); @@ -270,7 +269,7 @@ class UserController extends Controller 'referral_code' => $this->createReferralCode(), ]); - $response = Pterodactyl::client()->post('/application/users', [ + $response = $this->pterodactyl->client_admin->post('/application/users', [ 'external_id' => App::environment('local') ? Str::random(16) : (string) $user->id, 'username' => $user->name, 'email' => $user->email, diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index ec678ace..bbc1c8ad 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -2,7 +2,6 @@ namespace App\Http\Controllers\Auth; -use App\Classes\Pterodactyl; use App\Http\Controllers\Controller; use App\Models\User; use App\Notifications\ReferralNotification; @@ -106,7 +105,7 @@ class RegisterController extends Controller ]); - $response = Pterodactyl::client()->post('/application/users', [ + $response = $this->pterodactyl->client_admin->post('/application/users', [ 'external_id' => App::environment('local') ? Str::random(16) : (string) $user->id, 'username' => $user->name, 'email' => $user->email, diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index c60a803a..384dac8c 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -14,12 +14,12 @@ class Controller extends BaseController { use AuthorizesRequests, DispatchesJobs, ValidatesRequests; - public $client = null; + public $pterodactyl = null; public function __construct(PterodactylSettings $ptero_settings) { try { - $this->client = new PterodactylClient($ptero_settings); + $this->pterodactyl = new PterodactylClient($ptero_settings); } catch (Exception $exception) { diff --git a/app/Http/Controllers/ProductController.php b/app/Http/Controllers/ProductController.php index 0d51f71c..e2e01cad 100644 --- a/app/Http/Controllers/ProductController.php +++ b/app/Http/Controllers/ProductController.php @@ -2,12 +2,10 @@ namespace App\Http\Controllers; -use App\Classes\PterodactylClient; use App\Models\Pterodactyl\Egg; use App\Models\Pterodactyl\Location; use App\Models\Pterodactyl\Node; use App\Models\Product; -use app\Settings\PterodactylSettings; use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -61,7 +59,7 @@ class ProductController extends Controller { $nodes = $this->getNodesBasedOnEgg($request, $egg); foreach ($nodes as $key => $node) { - $pteroNode = $this->client->getNode($node->id); + $pteroNode = $this->pterodactyl->getNode($node->id); if ($pteroNode['allocated_resources']['memory'] >= ($pteroNode['memory'] * ($pteroNode['memory_overallocate'] + 100) / 100) || $pteroNode['allocated_resources']['disk'] >= ($pteroNode['disk'] * ($pteroNode['disk_overallocate'] + 100) / 100)) { $nodes->forget($key); } @@ -110,7 +108,7 @@ class ProductController extends Controller }) ->get(); - $pteroNode = $this->client->getNode($node->id); + $pteroNode = $this->pterodactyl->getNode($node->id); foreach ($products as $key => $product) { if ($product->memory > ($pteroNode['memory'] * ($pteroNode['memory_overallocate'] + 100) / 100) - $pteroNode['allocated_resources']['memory'] || $product->disk > ($pteroNode['disk'] * ($pteroNode['disk_overallocate'] + 100) / 100) - $pteroNode['allocated_resources']['disk']) { $product->doesNotFit = true; diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index bffbc963..1c0fd9ad 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -2,8 +2,8 @@ namespace App\Http\Controllers; -use App\Classes\Pterodactyl; use App\Models\User; +use App\Settings\UserSettings; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; @@ -13,7 +13,7 @@ use Illuminate\Validation\ValidationException; class ProfileController extends Controller { /** Display a listing of the resource. */ - public function index() + public function index(UserSettings $user_settings) { switch (Auth::user()->role) { case 'admin': @@ -32,9 +32,9 @@ class ProfileController extends Controller return view('profile.index')->with([ 'user' => Auth::user(), - 'credits_reward_after_verify_discord' => config('SETTINGS::USER:CREDITS_REWARD_AFTER_VERIFY_DISCORD'), - 'force_email_verification' => config('SETTINGS::USER:FORCE_EMAIL_VERIFICATION'), - 'force_discord_verification' => config('SETTINGS::USER:FORCE_DISCORD_VERIFICATION'), + 'credits_reward_after_verify_discord' => $user_settings->credits_reward_after_verify_discord, + 'force_email_verification' => $user_settings->force_email_verification, + 'force_discord_verification' => $user_settings->force_discord_verification, 'badgeColor' => $badgeColor, ]); } @@ -81,7 +81,7 @@ class ProfileController extends Controller //Update Users Password on Pterodactyl //Username,Mail,First and Lastname are required aswell - $response = Pterodactyl::client()->patch('/application/users/'.$user->pterodactyl_id, [ + $response = $this->pterodactyl->client_admin->patch('/application/users/'.$user->pterodactyl_id, [ 'password' => $request->input('new_password'), 'username' => $request->input('name'), 'first_name' => $request->input('name'), @@ -125,7 +125,7 @@ class ProfileController extends Controller } //update name and email on Pterodactyl - $response = Pterodactyl::client()->patch('/application/users/'.$user->pterodactyl_id, [ + $response = $this->pterodactyl->client_admin->patch('/application/users/'.$user->pterodactyl_id, [ 'username' => $request->input('name'), 'first_name' => $request->input('name'), 'last_name' => $request->input('name'), diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index b64ba755..22804544 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -30,7 +30,7 @@ class ServerController extends Controller foreach ($servers as $server) { //Get server infos from ptero - $serverAttributes = $this->client->getServerAttributes($server->pterodactyl_id, true); + $serverAttributes = $this->pterodactyl->getServerAttributes($server->pterodactyl_id, true); if (! $serverAttributes) { continue; } @@ -123,18 +123,15 @@ class ServerController extends Controller $nodeName = $node->name; // Check if node has enough memory and disk space - $checkResponse = $this->client->checkNodeResources($node, $product->memory, $product->disk); + $checkResponse = $this->pterodactyl->checkNodeResources($node, $product->memory, $product->disk); if ($checkResponse == false) { return redirect()->route('servers.index')->with('error', __("The node '".$nodeName."' doesn't have the required memory or disk left to allocate this product.")); } // Min. Credits - if ( - Auth::user()->credits < - ($product->minimum_credits == -1 - ? config('SETTINGS::USER:MINIMUM_REQUIRED_CREDITS_TO_MAKE_SERVER', 50) - : $product->minimum_credits) - ) { + if (Auth::user()->credits < ($product->minimum_credits == -1 + ? $user_settings->min_credits_to_make_server + : $product->minimum_credits)) { return redirect()->route('servers.index')->with('error', 'You do not have the required amount of '.CREDITS_DISPLAY_NAME.' to use this product!'); } } @@ -158,13 +155,15 @@ class ServerController extends Controller } /** Store a newly created resource in storage. */ - public function store(Request $request) + public function store(Request $request, UserSettings $user_settings, ServerSettings $server_settings) { /** @var Node $node */ /** @var Egg $egg */ /** @var Product $product */ - if (! is_null($this->validateConfigurationRules())) { - return $this->validateConfigurationRules(); + $validate_configuration = $this->validateConfigurationRules($user_settings, $server_settings); + + if (!is_null($validate_configuration)) { + return $validate_configuration; } $request->validate([ @@ -185,13 +184,13 @@ class ServerController extends Controller ]); //get free allocation ID - $allocationId = $this->client->getFreeAllocationId($node); + $allocationId = $this->pterodactyl->getFreeAllocationId($node); if (! $allocationId) { return $this->noAllocationsError($server); } //create server on pterodactyl - $response = $this->client->createServer($server, $egg, $allocationId); + $response = $this->pterodactyl->createServer($server, $egg, $allocationId); if ($response->failed()) { return $this->serverCreationFailed($response, $server); } @@ -203,7 +202,7 @@ class ServerController extends Controller 'identifier' => $serverAttributes['identifier'], ]); - if (config('SETTINGS::SYSTEM:SERVER_CREATE_CHARGE_FIRST_HOUR', 'true') == 'true') { + if ($server_settings->charge_first_hour) { if ($request->user()->credits >= $server->product->getHourlyPrice()) { $request->user()->decrement('credits', $server->product->getHourlyPrice()); } @@ -257,9 +256,9 @@ class ServerController extends Controller public function show(Server $server) { if ($server->user_id != Auth::user()->id) { - return back()->with('error', __('´This is not your Server!')); + return back()->with('error', __('This is not your Server!')); } - $serverAttributes = $this->client->getServerAttributes($server->pterodactyl_id); + $serverAttributes = $this->pterodactyl->getServerAttributes($server->pterodactyl_id); $serverRelationships = $serverAttributes['relationships']; $serverLocationAttributes = $serverRelationships['location']['attributes']; @@ -275,7 +274,7 @@ class ServerController extends Controller $server->name = $serverAttributes['name']; $server->egg = $serverRelationships['egg']['attributes']['name']; - $pteroNode = $this->client->getNode($serverRelationships['node']['attributes']['id']); + $pteroNode = $this->pterodactyl->getNode($serverRelationships['node']['attributes']['id']); $products = Product::orderBy('created_at') ->whereHas('nodes', function (Builder $builder) use ($serverRelationships) { //Only show products for that node @@ -308,7 +307,7 @@ class ServerController extends Controller $user = Auth::user(); $oldProduct = Product::where('id', $server->product->id)->first(); $newProduct = Product::where('id', $request->product_upgrade)->first(); - $serverAttributes = $this->client->getServerAttributes($server->pterodactyl_id); + $serverAttributes = $this->pterodactyl->getServerAttributes($server->pterodactyl_id); $serverRelationships = $serverAttributes['relationships']; // Get node resource allocation info @@ -319,7 +318,7 @@ class ServerController extends Controller // Check if node has enough memory and disk space $requireMemory = $newProduct->memory - $oldProduct->memory; $requiredisk = $newProduct->disk - $oldProduct->disk; - $checkResponse = $this->client->checkNodeResources($node, $requireMemory, $requiredisk); + $checkResponse = $this->pterodactyl->checkNodeResources($node, $requireMemory, $requiredisk); if ($checkResponse == false) { return redirect()->route('servers.index')->with('error', __("The node '".$nodeName."' doesn't have the required memory or disk left to upgrade the server.")); } @@ -333,14 +332,14 @@ class ServerController extends Controller $server->product_id = $request->product_upgrade; $server->update(); $server->allocation = $serverAttributes['allocation']; - $response = $this->client->updateServer($server, $newProduct); + $response = $this->pterodactyl->updateServer($server, $newProduct); if ($response->failed()) { return $this->serverCreationFailed($response, $server); } //update user balance $user->decrement('credits', $priceupgrade); //restart the server - $response = $this->client->powerAction($server, 'restart'); + $response = $this->pterodactyl->powerAction($server, 'restart'); if ($response->failed()) { return redirect()->route('servers.index')->with('error', $response->json()['errors'][0]['detail']); } diff --git a/app/Http/Controllers/StoreController.php b/app/Http/Controllers/StoreController.php index fb4efe3a..e29b9846 100644 --- a/app/Http/Controllers/StoreController.php +++ b/app/Http/Controllers/StoreController.php @@ -3,12 +3,13 @@ namespace App\Http\Controllers; use App\Models\ShopProduct; +use App\Settings\UserSettings; use Illuminate\Support\Facades\Auth; class StoreController extends Controller { /** Display a listing of the resource. */ - public function index() + public function index(UserSettings $user_settings) { $isPaymentSetup = false; @@ -21,12 +22,12 @@ class StoreController extends Controller } //Required Verification for creating an server - if (config('SETTINGS::USER:FORCE_EMAIL_VERIFICATION', false) === 'true' && ! Auth::user()->hasVerifiedEmail()) { + if ($user_settings->force_email_verification && ! Auth::user()->hasVerifiedEmail()) { return redirect()->route('profile.index')->with('error', __('You are required to verify your email address before you can purchase credits.')); } //Required Verification for creating an server - if (config('SETTINGS::USER:FORCE_DISCORD_VERIFICATION', false) === 'true' && ! Auth::user()->discordUser) { + if ($user_settings->force_discord_verification && ! Auth::user()->discordUser) { return redirect()->route('profile.index')->with('error', __('You are required to link your discord account before you can purchase Credits')); } diff --git a/app/Settings/ServerSettings.php b/app/Settings/ServerSettings.php index ebacc58c..c2debe7c 100644 --- a/app/Settings/ServerSettings.php +++ b/app/Settings/ServerSettings.php @@ -12,6 +12,8 @@ class ServerSettings extends Settings public bool $enable_upgrade; + public bool $charge_first_hour; + public static function group(): string { return 'server'; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index f58bfb26..41f80a53 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -14,6 +14,6 @@ class DatabaseSeeder extends Seeder */ public function run() { - Schema::dropIfExists('settings_old'); + // Schema::dropIfExists('settings_old'); } } diff --git a/database/settings/2023_02_01_164731_create_general_settings.php b/database/settings/2023_02_01_164731_create_general_settings.php index a19b4a04..cd0fd161 100644 --- a/database/settings/2023_02_01_164731_create_general_settings.php +++ b/database/settings/2023_02_01_164731_create_general_settings.php @@ -27,6 +27,17 @@ class CreateGeneralSettings extends SettingsMigration public function getOldValue(string $key) { // Always get the first value of the key. - return DB::table('settings_old')->where('key', '=', $key)->get(['value'])->first()->value; + $old_value = DB::table('settings_old')->where('key', '=', $key)->get(['value', 'type'])->first(); + + // Handle the old values to return without it being a string in all cases. + if ($old_value->type === "string" || $old_value->type === "text") { + return $old_value->value; + } + + if ($old_value->type === "boolean") { + return filter_var($old_value->value, FILTER_VALIDATE_BOOL); + } + + return filter_var($old_value->value, FILTER_VALIDATE_INT); } } \ No newline at end of file diff --git a/database/settings/2023_02_01_181334_create_pterodactyl_settings.php b/database/settings/2023_02_01_181334_create_pterodactyl_settings.php index 7f97f5c0..eb79021f 100644 --- a/database/settings/2023_02_01_181334_create_pterodactyl_settings.php +++ b/database/settings/2023_02_01_181334_create_pterodactyl_settings.php @@ -19,6 +19,17 @@ class CreatePterodactylSettings extends SettingsMigration public function getOldValue(string $key) { // Always get the first value of the key. - return DB::table('settings_old')->where('key', '=', $key)->get(['value'])->first()->value; + $old_value = DB::table('settings_old')->where('key', '=', $key)->get(['value', 'type'])->first(); + + // Handle the old values to return without it being a string in all cases. + if ($old_value->type === "string" || $old_value->type === "text") { + return $old_value->value; + } + + if ($old_value->type === "boolean") { + return filter_var($old_value->value, FILTER_VALIDATE_BOOL); + } + + return filter_var($old_value->value, FILTER_VALIDATE_INT); } } \ No newline at end of file diff --git a/database/settings/2023_02_01_181453_create_mail_settings.php b/database/settings/2023_02_01_181453_create_mail_settings.php index cbd0e998..46eb2bc4 100644 --- a/database/settings/2023_02_01_181453_create_mail_settings.php +++ b/database/settings/2023_02_01_181453_create_mail_settings.php @@ -11,7 +11,7 @@ class CreateMailSettings extends SettingsMigration // Get the user-set configuration values from the old table. $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->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')); @@ -24,6 +24,17 @@ class CreateMailSettings extends SettingsMigration public function getOldValue(string $key) { // Always get the first value of the key. - return DB::table('settings_old')->where('key', '=', $key)->get(['value'])->first()->value; + $old_value = DB::table('settings_old')->where('key', '=', $key)->get(['value', 'type'])->first(); + + // Handle the old values to return without it being a string in all cases. + if ($old_value->type === "string" || $old_value->type === "text") { + return $old_value->value; + } + + if ($old_value->type === "boolean") { + return filter_var($old_value->value, FILTER_VALIDATE_BOOL); + } + + return filter_var($old_value->value, FILTER_VALIDATE_INT); } } \ No newline at end of file diff --git a/database/settings/2023_02_01_181925_create_user_settings.php b/database/settings/2023_02_01_181925_create_user_settings.php index 5c0ab300..eb2c5634 100644 --- a/database/settings/2023_02_01_181925_create_user_settings.php +++ b/database/settings/2023_02_01_181925_create_user_settings.php @@ -27,6 +27,17 @@ class CreateUserSettings extends SettingsMigration public function getOldValue(string $key) { // Always get the first value of the key. - return DB::table('settings_old')->where('key', '=', $key)->get(['value'])->first()->value; + $old_value = DB::table('settings_old')->where('key', '=', $key)->get(['value', 'type'])->first(); + + // Handle the old values to return without it being a string in all cases. + if ($old_value->type === "string" || $old_value->type === "text") { + return $old_value->value; + } + + if ($old_value->type === "boolean") { + return filter_var($old_value->value, FILTER_VALIDATE_BOOL); + } + + return filter_var($old_value->value, FILTER_VALIDATE_INT); } } \ No newline at end of file diff --git a/database/settings/2023_02_01_181950_create_server_settings.php b/database/settings/2023_02_01_181950_create_server_settings.php index 804aad88..99e69545 100644 --- a/database/settings/2023_02_01_181950_create_server_settings.php +++ b/database/settings/2023_02_01_181950_create_server_settings.php @@ -13,11 +13,23 @@ class CreateServerSettings extends SettingsMigration $this->migrator->add('server.allocation_limit', $table_exists ? $this->getOldValue('SETTINGS::SERVER:ALLOCATION_LIMIT'): 200); $this->migrator->add('server.creation_enabled', $table_exists ? $this->getOldValue('SETTINGS::SYSTEM:CREATION_OF_NEW_SERVERS'): true); $this->migrator->add('server.enable_upgrade', $table_exists ? $this->getOldValue('SETTINGS::SYSTEM:ENABLE_UPGRADE'): false); + $this->migrator->add('server.charge_first_hour', $table_exists ? $this->getOldValue('SETTINGS::SYSTEM:SERVER_CREATE_CHARGE_FIRST_HOUR'): false); } public function getOldValue(string $key) { // Always get the first value of the key. - return DB::table('settings_old')->where('key', '=', $key)->get(['value'])->first()->value; + $old_value = DB::table('settings_old')->where('key', '=', $key)->get(['value', 'type'])->first(); + + // Handle the old values to return without it being a string in all cases. + if ($old_value->type === "string" || $old_value->type === "text") { + return $old_value->value; + } + + if ($old_value->type === "boolean") { + return filter_var($old_value->value, FILTER_VALIDATE_BOOL); + } + + return filter_var($old_value->value, FILTER_VALIDATE_INT); } } \ No newline at end of file diff --git a/database/settings/2023_02_01_182021_create_invoice_settings.php b/database/settings/2023_02_01_182021_create_invoice_settings.php index 93ab9513..0616c34f 100644 --- a/database/settings/2023_02_01_182021_create_invoice_settings.php +++ b/database/settings/2023_02_01_182021_create_invoice_settings.php @@ -10,12 +10,12 @@ class CreateInvoiceSettings extends SettingsMigration $table_exists = DB::table('settings_old')->exists(); // Get the user-set configuration values from the old table. - $this->migrator->add('invoice.company_address', $table_exists ? $this->getOldValue('SETTINGS::INVOICE:COMPANY_ADDRESS'): null); - $this->migrator->add('invoice.company_mail', $table_exists ? $this->getOldValue('SETTINGS::INVOICE:COMPANY_MAIL'): null); - $this->migrator->add('invoice.company_name', $table_exists ? $this->getOldValue('SETTINGS::INVOICE:COMPANY_NAME'): null); - $this->migrator->add('invoice.company_phone', $table_exists ? $this->getOldValue('SETTINGS::INVOICE:COMPANY_PHONE'): null); - $this->migrator->add('invoice.company_vat', $table_exists ? $this->getOldValue('SETTINGS::INVOICE:COMPANY_VAT'): null); - $this->migrator->add('invoice.company_website', $table_exists ? $this->getOldValue('SETTINGS::INVOICE:COMPANY_WEBSITE'): null); + $this->migrator->add('invoice.company_address', $table_exists ? $this->getOldValue('SETTINGS::INVOICE:COMPANY_ADDRESS'): ''); + $this->migrator->add('invoice.company_mail', $table_exists ? $this->getOldValue('SETTINGS::INVOICE:COMPANY_MAIL'): ''); + $this->migrator->add('invoice.company_name', $table_exists ? $this->getOldValue('SETTINGS::INVOICE:COMPANY_NAME'): ''); + $this->migrator->add('invoice.company_phone', $table_exists ? $this->getOldValue('SETTINGS::INVOICE:COMPANY_PHONE'): ''); + $this->migrator->add('invoice.company_vat', $table_exists ? $this->getOldValue('SETTINGS::INVOICE:COMPANY_VAT'): ''); + $this->migrator->add('invoice.company_website', $table_exists ? $this->getOldValue('SETTINGS::INVOICE:COMPANY_WEBSITE'): ''); $this->migrator->add('invoice.enabled', $table_exists ? $this->getOldValue('SETTINGS::INVOICE:ENABLED'): true); $this->migrator->add('invoice.prefix', $table_exists ? $this->getOldValue('SETTINGS::INVOICE:PREFIX'): 'INV'); } @@ -23,6 +23,17 @@ class CreateInvoiceSettings extends SettingsMigration public function getOldValue(string $key) { // Always get the first value of the key. - return DB::table('settings_old')->where('key', '=', $key)->get(['value'])->first()->value; + $old_value = DB::table('settings_old')->where('key', '=', $key)->get(['value', 'type'])->first(); + + // Handle the old values to return without it being a string in all cases. + if ($old_value->type === "string" || $old_value->type === "text") { + return $old_value->value; + } + + if ($old_value->type === "boolean") { + return filter_var($old_value->value, FILTER_VALIDATE_BOOL); + } + + return filter_var($old_value->value, FILTER_VALIDATE_INT); } } \ No newline at end of file diff --git a/database/settings/2023_02_01_182043_create_discord_settings.php b/database/settings/2023_02_01_182043_create_discord_settings.php index 74771dc4..c20682a0 100644 --- a/database/settings/2023_02_01_182043_create_discord_settings.php +++ b/database/settings/2023_02_01_182043_create_discord_settings.php @@ -10,17 +10,28 @@ class CreateDiscordSettings extends SettingsMigration $table_exists = DB::table('settings_old')->exists(); // Get the user-set configuration values from the old table. - $this->migrator->addEncrypted('discord.bot_token', $table_exists ? $this->getOldValue('SETTINGS::DISCORD:BOT_TOKEN'): null); - $this->migrator->addEncrypted('discord.client_id', $table_exists ? $this->getOldValue('SETTINGS::DISCORD:CLIENT_ID'): null); - $this->migrator->addEncrypted('discord.client_secret', $table_exists ? $this->getOldValue('SETTINGS::DISCORD:CLIENT_SECRET'): null); + $this->migrator->addEncrypted('discord.bot_token', $table_exists ? $this->getOldValue('SETTINGS::DISCORD:BOT_TOKEN'): ''); + $this->migrator->addEncrypted('discord.client_id', $table_exists ? $this->getOldValue('SETTINGS::DISCORD:CLIENT_ID'): ''); + $this->migrator->addEncrypted('discord.client_secret', $table_exists ? $this->getOldValue('SETTINGS::DISCORD:CLIENT_SECRET'): ''); $this->migrator->add('discord.guild_id', $table_exists ? $this->getOldValue('SETTINGS::DISCORD:GUILD_ID'): null); - $this->migrator->add('discord.invite_url', $table_exists ? $this->getOldValue('SETTINGS::DISCORD:INVITE_URL'): null); + $this->migrator->add('discord.invite_url', $table_exists ? $this->getOldValue('SETTINGS::DISCORD:INVITE_URL'): ''); $this->migrator->add('discord.role_id', $table_exists ? $this->getOldValue('SETTINGS::DISCORD:ROLE_ID'): null); } public function getOldValue(string $key) { // Always get the first value of the key. - return DB::table('settings_old')->where('key', '=', $key)->get(['value'])->first()->value; + $old_value = DB::table('settings_old')->where('key', '=', $key)->get(['value', 'type'])->first(); + + // Handle the old values to return without it being a string in all cases. + if ($old_value->type === "string" || $old_value->type === "text") { + return $old_value->value; + } + + if ($old_value->type === "boolean") { + return filter_var($old_value->value, FILTER_VALIDATE_BOOL); + } + + return filter_var($old_value->value, FILTER_VALIDATE_INT); } } \ No newline at end of file diff --git a/database/settings/2023_02_01_182108_create_locale_settings.php b/database/settings/2023_02_01_182108_create_locale_settings.php index 7b9facbd..9e6df4a3 100644 --- a/database/settings/2023_02_01_182108_create_locale_settings.php +++ b/database/settings/2023_02_01_182108_create_locale_settings.php @@ -20,6 +20,17 @@ class CreateLocaleSettings extends SettingsMigration public function getOldValue(string $key) { // Always get the first value of the key. - return DB::table('settings_old')->where('key', '=', $key)->get(['value'])->first()->value; + $old_value = DB::table('settings_old')->where('key', '=', $key)->get(['value', 'type'])->first(); + + // Handle the old values to return without it being a string in all cases. + if ($old_value->type === "string" || $old_value->type === "text") { + return $old_value->value; + } + + if ($old_value->type === "boolean") { + return filter_var($old_value->value, FILTER_VALIDATE_BOOL); + } + + return filter_var($old_value->value, FILTER_VALIDATE_INT); } } \ No newline at end of file diff --git a/database/settings/2023_02_01_182135_create_referral_settings.php b/database/settings/2023_02_01_182135_create_referral_settings.php index e07eef40..f5924b5f 100644 --- a/database/settings/2023_02_01_182135_create_referral_settings.php +++ b/database/settings/2023_02_01_182135_create_referral_settings.php @@ -21,6 +21,17 @@ class CreateReferralSettings extends SettingsMigration public function getOldValue(string $key) { // Always get the first value of the key. - return DB::table('settings_old')->where('key', '=', $key)->get(['value'])->first()->value; + $old_value = DB::table('settings_old')->where('key', '=', $key)->get(['value', 'type'])->first(); + + // Handle the old values to return without it being a string in all cases. + if ($old_value->type === "string" || $old_value->type === "text") { + return $old_value->value; + } + + if ($old_value->type === "boolean") { + return filter_var($old_value->value, FILTER_VALIDATE_BOOL); + } + + return filter_var($old_value->value, FILTER_VALIDATE_INT); } } \ No newline at end of file diff --git a/database/settings/2023_02_01_182158_create_website_settings.php b/database/settings/2023_02_01_182158_create_website_settings.php index 6c7a00a3..a1eacb3e 100644 --- a/database/settings/2023_02_01_182158_create_website_settings.php +++ b/database/settings/2023_02_01_182158_create_website_settings.php @@ -29,6 +29,17 @@ class CreateWebsiteSettings extends SettingsMigration public function getOldValue(string $key) { // Always get the first value of the key. - return DB::table('settings_old')->where('key', '=', $key)->get(['value'])->first()->value; + $old_value = DB::table('settings_old')->where('key', '=', $key)->get(['value', 'type'])->first(); + + // Handle the old values to return without it being a string in all cases. + if ($old_value->type === "string" || $old_value->type === "text") { + return $old_value->value; + } + + if ($old_value->type === "boolean") { + return filter_var($old_value->value, FILTER_VALIDATE_BOOL); + } + + return filter_var($old_value->value, FILTER_VALIDATE_INT); } } \ No newline at end of file