Example #1
0
 /**
  * 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.');
     }
 }
Example #2
0
 /**
  * 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)]);
 }
Example #3
0
 /**
  * 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);
 }
Example #4
0
 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;
     }
 }
Example #5
0
 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);
 }