/** * List Specific Node * * Lists specific fields about a server or all fields pertaining to that node. * * @Get("/nodes/{id}/{?fields}") * @Versions({"v1"}) * @Parameters({ * @Parameter("id", type="integer", required=true, description="The ID of the node to get information on."), * @Parameter("fields", type="string", required=false, description="A comma delimidated list of fields to include.") * }) * @Response(200) */ public function view(Request $request, $id, $fields = null) { $query = Models\Node::where('id', $id); if (!is_null($request->input('fields'))) { foreach (explode(',', $request->input('fields')) as $field) { if (!empty($field)) { $query->addSelect($field); } } } try { if (!$query->first()) { throw new NotFoundHttpException('No node by that ID was found.'); } return ['node' => $query->first(), 'allocations' => ['assigned' => Models\Allocation::where('node', $id)->whereNotNull('assigned_to')->get(), 'unassigned' => Models\Allocation::where('node', $id)->whereNull('assigned_to')->get()]]; } catch (NotFoundHttpException $ex) { throw $ex; } catch (\Exception $ex) { throw new BadRequestHttpException('There was an issue with the fields passed in the request.'); } }
/** * Renders server index page for specified server. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Contracts\View\View */ public function getIndex(Request $request) { $server = Models\Server::getByUUID($request->route()->server); return view('server.index', ['server' => $server, 'allocations' => Models\Allocation::where('assigned_to', $server->id)->orderBy('ip', 'asc')->orderBy('port', 'asc')->get(), 'node' => Models\Node::find($server->node)]); }
/** * Returns a JSON tree of all avaliable IPs and Ports on a given node. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Contracts\View\View */ public function postNewServerGetIps(Request $request) { if (!$request->input('node')) { return response()->json(['error' => 'Missing node in request.'], 500); } $ips = Models\Allocation::where('node', $request->input('node'))->whereNull('assigned_to')->get(); $listing = []; foreach ($ips as &$ip) { if (array_key_exists($ip->ip, $listing)) { $listing[$ip->ip] = array_merge($listing[$ip->ip], [$ip->port]); } else { $listing[$ip->ip] = [$ip->port]; } } return response()->json($listing); }
public function deleteServer($id, $force) { $server = Models\Server::findOrFail($id); $node = Models\Node::findOrFail($server->node); DB::beginTransaction(); try { // Delete Allocations Models\Allocation::where('assigned_to', $server->id)->update(['assigned_to' => null]); // Remove Variables Models\ServerVariables::where('server_id', $server->id)->delete(); // Remove SubUsers Models\Subuser::where('server_id', $server->id)->delete(); // Remove Permissions Models\Permission::where('server_id', $server->id)->delete(); // Remove Downloads Models\Download::where('server', $server->uuid)->delete(); $client = Models\Node::guzzleRequest($server->node); $client->request('DELETE', '/servers', ['headers' => ['X-Access-Token' => $node->daemonSecret, 'X-Access-Server' => $server->uuid]]); $server->delete(); DB::commit(); return true; } catch (\GuzzleHttp\Exception\TransferException $ex) { if ($force === 'force') { $server->delete(); DB::commit(); return true; } else { DB::rollBack(); throw new DisplayException('An error occured while attempting to delete the server on the daemon.', $ex); } } catch (\Exception $ex) { DB::rollBack(); throw $ex; } }
public function deleteAllocation(Request $request, $id, $ip, $port = null) { $query = Models\Allocation::where('node', $id)->whereNull('assigned_to')->where('ip', $ip); if (is_null($port) || $port === 'undefined') { $allocation = $query; } else { $allocation = $query->where('port', $port)->first(); } if (!$allocation) { return response()->json(['error' => 'Unable to find an allocation matching those details to delete.'], 400); } $allocation->delete(); return response('', 204); }