diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index c1c0a33a..58ed691f 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -101,9 +101,31 @@ class ServerController extends Controller return redirect()->route('servers.index')->with('error', __('Server limit reached!')); } - // minimum credits + // minimum credits && Check for Allocation if (FacadesRequest::has("product")) { $product = Product::findOrFail(FacadesRequest::input("product")); + // Can we allocate the node? If not then error lol(I don't like overallocation) + $node = Pterodactyl::getNode(FacadesRequest::input('node')); + $nodeMem = $node['memory']; + $nodeDisk = $node['disk']; + $nodeName = $node['name']; + $currServers = Auth::user()->servers(); + $currMem = 0; + $currDisk = 0; + foreach($currServers as $currServer) { + $pteroServer = $currServer->getPterodactylServer(); + $psvAttr = $pteroServer['attributes']; + if($psvAttr['node'] != $node['id']) + continue; + $currMem += $psvAttr['limits']['memory']; + $currDisk += $psvAttr['limits']['disk']; + } + $currMem += $product->memory; + $currDisk += $product->disk; + if($currMem > $nodeMem || $currDisk > $nodeDisk) + 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