/** * Returns a listing of files in a given directory for a server. * * @param \Illuminate\Http\Request $request * @param string $uuid` * @return \Illuminate\Contracts\View\View */ public function postDirectoryList(Request $request, $uuid) { $server = Models\Server::getByUUID($uuid); $this->directory = '/' . trim(urldecode($request->input('directory', '/')), '/'); $this->authorize('list-files', $server); $prevDir = ['header' => $this->directory !== '/' ? $this->directory : '']; if ($this->directory !== '/') { $prevDir['first'] = true; } // Determine if we should show back links in the file browser. // This code is strange, and could probably be rewritten much better. $goBack = explode('/', rtrim($this->directory, '/')); if (isset($goBack[2]) && !empty($goBack[2])) { $prevDir['show'] = true; $prevDir['link'] = '/' . trim(str_replace(end($goBack), '', $this->directory), '/'); $prevDir['link_show'] = trim($prevDir['link'], '/'); } $controller = new Repositories\Daemon\FileRepository($uuid); try { $directoryContents = $controller->returnDirectoryListing($this->directory); } catch (DisplayException $ex) { return response($ex->getMessage(), 500); } catch (\Exception $ex) { Log::error($ex); return response('An error occured while attempting to load the requested directory, please try again.', 500); } return view('server.files.list', ['server' => $server, 'files' => $directoryContents->files, 'folders' => $directoryContents->folders, 'extensions' => Repositories\HelperRepository::editableFiles(), 'directory' => $prevDir]); }
/** * 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('POST', '/server/file/' . rawurlencode($file->dirname . $file->basename), ['headers' => $this->headers, 'json' => ['content' => $content]]); if ($res->getStatusCode() !== 204) { throw new DisplayException('An error occured while attempting to save this file. ' . $res->getBody()); } return true; }