diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 62a8d5dc4..25db83ae8 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -50,7 +50,7 @@ class Handler extends ExceptionHandler $e = new NotFoundHttpException($e->getMessage(), $e); } - if ($request->isXmlHttpRequest() || $request->ajax() || $request->is('/api/*')) { + if ($request->isXmlHttpRequest() || $request->ajax() || $request->is('api/*') || $request->is('remote/*')) { $exception = 'An exception occured while attempting to perform this action, please try again.'; diff --git a/app/Http/Controllers/Remote/RemoteController.php b/app/Http/Controllers/Remote/RemoteController.php new file mode 100644 index 000000000..422123486 --- /dev/null +++ b/app/Http/Controllers/Remote/RemoteController.php @@ -0,0 +1,37 @@ +input('token', '00'))->first(); + if (!$download) { + return response()->json([ + 'error' => 'An invalid request token was recieved with this request.' + ], 403); + } + + $download->delete(); + return response()->json([ + 'path' => $download->path, + 'server' => $download->server + ]); + } + +} diff --git a/app/Http/Controllers/Scales/FileController.php b/app/Http/Controllers/Scales/FileController.php deleted file mode 100644 index 380b8e742..000000000 --- a/app/Http/Controllers/Scales/FileController.php +++ /dev/null @@ -1,193 +0,0 @@ -server = Server::getByUUID($uuid); - $this->node = Node::getByID($this->server->node); - $this->client = Node::guzzleRequest($this->server->node); - $this->headers = Server::getGuzzleHeaders($uuid); - - } - - /** - * Get the contents of a requested file for the server. - * - * @param string $file - * @return string - */ - public function returnFileContents($file) - { - - if (empty($file)) { - throw new Exception('Not all parameters were properly passed to the function.'); - } - - $file = (object) pathinfo($file); - if (!in_array($file->extension, HelperRepository::editableFiles())) { - throw new DisplayException('You do not have permission to edit this type of file.'); - } - - $file->dirname = (in_array($file->dirname, ['.', './', '/'])) ? null : trim($file->dirname, '/') . '/'; - - $res = $this->client->request('GET', '/server/file/' . rawurlencode($file->dirname.$file->basename), [ - 'headers' => $this->headers - ]); - - $json = json_decode($res->getBody()); - if($res->getStatusCode() !== 200 || !isset($json->contents)) { - throw new DisplayException('Scales provided a non-200 error code: HTTP\\' . $res->getStatusCode()); - } - - return $json; - - } - - /** - * Save the contents of a requested file on the Scales instance. - * - * @param string $file - * @param string $content - * @return boolean - */ - public function saveFileContents($file, $content) - { - - if (empty($file)) { - throw new Exception('A valid file and path must be specified to save a file.'); - } - - $file = (object) pathinfo($file); - - if(!in_array($file->extension, HelperRepository::editableFiles())) { - throw new DisplayException('You do not have permission to edit this type of file.'); - } - - $file->dirname = (in_array($file->dirname, ['.', './', '/'])) ? null : trim($file->dirname, '/') . '/'; - - $res = $this->client->request('PUT', '/server/file/' . rawurlencode($file->dirname.$file->basename), [ - 'headers' => $this->headers, - 'form_params' => [ - 'contents' => $content - ] - ]); - - if ($res->getStatusCode() !== 204) { - throw new DisplayException('An error occured while attempting to save this file. Scales said: ' . $res->getBody()); - } - - return true; - - } - - /** - * Returns a listing of all files and folders within a specified Scales directory. - * - * @param string $directory - * @return object - */ - public function returnDirectoryListing($directory) - { - - if (empty($directory)) { - throw new Exception('A valid directory must be specified in order to list its contents.'); - } - - $res = $this->client->request('GET', '/server/directory/' . $directory, [ - 'headers' => $this->headers - ]); - - $json = json_decode($res->getBody()); - if($res->getStatusCode() !== 200) { - throw new DisplayException('An error occured while attempting to save this file. Scales said: ' . $res->getBody()); - } - - // Iterate through results - $files = []; - $folders = []; - foreach($json as &$value) { - - if ($value->file !== true) { - - // @TODO Handle Symlinks - $folders = array_merge($folders, [[ - 'entry' => $value->name, - 'directory' => trim($directory, '/'), - 'size' => null, - 'date' => strtotime($value->modified) - ]]); - - } else { - - $files = array_merge($files, [[ - 'entry' => $value->name, - 'directory' => trim($directory, '/'), - 'extension' => pathinfo($value->name, PATHINFO_EXTENSION), - 'size' => HelperRepository::bytesToHuman($value->size), - 'date' => strtotime($value->modified) - ]]); - - } - - } - - return (object) [ - 'files' => $files, - 'folders' => $folders, - ]; - - } - -} diff --git a/app/Http/Controllers/Server/ServerController.php b/app/Http/Controllers/Server/ServerController.php index 9785c0316..abc229fc2 100644 --- a/app/Http/Controllers/Server/ServerController.php +++ b/app/Http/Controllers/Server/ServerController.php @@ -150,7 +150,7 @@ class ServerController extends Controller $download = new Download; $download->token = Uuid::generate(4); - $download->server = $server->id; + $download->server = $server->uuid; $download->path = str_replace('../', '', $file); $download->save(); diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php index fc7307065..97aa64965 100644 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -12,6 +12,6 @@ class VerifyCsrfToken extends BaseVerifier * @var array */ protected $except = [ - // + 'remote/*', ]; } diff --git a/app/Http/Routes/RemoteRoutes.php b/app/Http/Routes/RemoteRoutes.php new file mode 100644 index 000000000..de5866f57 --- /dev/null +++ b/app/Http/Routes/RemoteRoutes.php @@ -0,0 +1,16 @@ +group(['prefix' => 'remote'], function () use ($router) { + $router->post('download', [ 'as' => 'remote.download', 'uses' => 'Remote\RemoteController@postDownload' ]); + }); + } + +} diff --git a/database/migrations/2016_01_02_000500_downloads_server_int_to_string.php b/database/migrations/2016_01_02_000500_downloads_server_int_to_string.php new file mode 100644 index 000000000..0dd00a602 --- /dev/null +++ b/database/migrations/2016_01_02_000500_downloads_server_int_to_string.php @@ -0,0 +1,27 @@ +