__invoke(new FindAllDocumentsQuery($request->ip())); $res = []; foreach ($files as $file) { $f = app(FindDocumentQueryHandler::class) ->__invoke(new FindDocumentQuery($file['filename'], $request->ip())); array_push($res, [ 'version' => $file['version'], 'id' => $f['key'], 'contentLength' => $f['size'].' KB', 'pureContentLength' => $f['size'], 'title' => $file['filename'], 'updated' => $file['lastModified'], ]); } return response()->json($res); } public function upload(Request $request) { $request->validate([ 'file' => 'required|file', 'user' => 'nullable|string', ]); $uploadedFile = $request->file('file'); $fileType = $uploadedFile->getClientOriginalExtension(); $user = $request->input('user') ?? ''; try { $file = app(CreateDocumentCommand::class)->__invoke( new CreateDocumentRequest( $uploadedFile->getClientOriginalName(), $request->ip(), $fileType, $uploadedFile->getSize(), $uploadedFile->getContent(), $user, ) ); } catch (Exception $e) { Log::error($e->getMessage()); return response() ->json([ 'error' => $e->getMessage(), ], 500); } return response()->json([ 'filename' => $file['filename'], 'documentType' => $fileType, ]); } public function saveAs(Request $request) { $request->validate([ 'url' => 'required|string', 'title' => 'required|string', 'user' => 'nullable|string', ]); $user = $request->input('user', ''); $url = Str::replace(URL::origin($request->url), $this->serverConfig->get('url.private'), $request->url); $downloadedFile = app(DownloadFileCommand::class) ->__invoke(new DownloadFileRequest(url: $url)); $file = app(CreateDocumentCommand::class)->__invoke( new CreateDocumentRequest( $request->title, $request->ip(), PathInfo::extension($request->url), $downloadedFile['size'], $downloadedFile['content'], $user, ) ); return response() ->json(['filename' => $file['filename']]); } public function convert(Request $request) { $request->validate([ 'filename' => 'required|string', 'fileUri' => 'nullable|string', 'password' => 'nullable|string', 'fileExt' => 'nullable|string', 'keepOriginal' => 'nullable|bool', ]); try { $result = app(ConvertCommand::class) ->__invoke(new ConvertRequest( filename: $request->filename, fileType: PathInfo::extension($request->filename), outputType: $request->input('fileExt', 'ooxml'), url: $request->fileUri, password: $request->password, user: $request->user, userAddress: $request->ip(), lang: cache('lang', default: 'en'), )); if (array_key_exists('step', $result)) { return response() ->json([ 'step' => $result['step'], 'filename' => $result['filename'], 'fileUri' => $result['url'], ], 500); } elseif (array_key_exists('error', $result)) { return response() ->json([ 'error' => $result['error'], 'code' => $result['code'], ], 500); } if (empty($this->formatRepository->find($result['fileType'])->actions)) { return response() ->json([ 'step' => 100, 'filename' => str_replace( $this->serverConfig->get('url.private'), $this->serverConfig->get('url.public'), $result['fileUrl'] ), 'error' => 'FileTypeIsNotSupported', ]); } $convertedFileContent = app(DownloadFileCommand::class) ->__invoke(new DownloadFileRequest($result['fileUrl'])); $file = app(CreateDocumentCommand::class)->__invoke( new CreateDocumentRequest( filename: $result['filename'], userDirectory: $request->ip(), fileType: $result['fileType'], fileSize: $convertedFileContent['size'], fileContent: $convertedFileContent['content'], user: $request->user, ) ); if (! $request->input('keepOriginal', false)) { app(DeleteDocumentCommand::class)->__invoke( new DeleteDocumentRequest( filename: $request->filename, userDirectory: $request->ip(), ) ); } } catch (Exception $e) { abort(500, $e->getMessage()); } return response()->json([ 'filename' => $file['filename'], 'step' => 100, ]); } public function download(Request $request) { $request->validate([ 'fileName' => 'required|string', 'userAddress' => 'nullable|string', ]); $filename = urldecode($request->fileName); $ip = $request->input('userAddress', $request->ip()); $file = app(FindDocumentQueryHandler::class) ->__invoke(new FindDocumentQuery($filename, $ip)); return response()->streamDownload(function () use ($file) { echo $file['content']; }, $filename, [ 'Content-Length' => $file['size'], 'Content-Type' => $file['mimeType'], 'Content-Disposition' => 'attachment; filename*=UTF-8\'\''.str_replace('+', '%20', urlencode($filename)), 'Access-Control-Allow-Origin' => '*', ]); } public function history(Request $request) { $filename = $request->filename; $filename = Path::join($request->ip(), $filename); $address = $request->ip(); $history = app(FindDocumentHistoryQueryHandler::class) ->__invoke(new FindDocumentHistoryQuery($filename, $address)); return response()->json($history); } public function rename(Request $request) { $request->validate([ 'newfilename' => 'required|string', 'dockey' => 'required|string', 'ext' => 'required|string', ]); $title = PathInfo::filename($request->newfilename).'.'.$request->ext; app(UpdateMetaCommand::class) ->__invoke(new UpdateMetaRequest( key: $request->dockey, title: $title, )); return response()->json(['result' => $request->dockey]); } public function destroy(Request $request) { $request->validate([ 'filename' => 'nullable|string', ]); try { if ($request->filename) { app(DeleteDocumentCommand::class)->__invoke( new DeleteDocumentRequest( filename: $request->filename, userDirectory: $request->ip(), ) ); } else { app(DeleteAllDocumentsCommand::class)->__invoke( new DeleteAllDocumentsRequest(userDirectory: $request->ip()) ); } } catch (Exception $e) { Log::error($e->getMessage()); return response() ->json([ 'error' => $e->getMessage(), ], 500); } return response(status: 201); } public function config(Request $request, JWT $jwt) { try { $request->validate([ 'fileName' => 'string', 'directUrl' => 'nullable|string', 'permissions' => 'nullable|string', ]); $fileName = $request->fileName; $directUrl = $request->directUrl == 'true'; $fileExists = app(FileExistsQueryHandler::class) ->__invoke(new FileExistsQuery($fileName, $request->ip())); if (! $fileExists) { throw new Exception('File not found: '.$fileName); } $file = app(FindDocumentQueryHandler::class) ->__invoke(new FindDocumentQuery($fileName, $request->ip())); $url = FileURL::download($fileName, $request->ip()); $config = [ 'document' => [ 'title' => $fileName, 'key' => $file['key'], 'url' => $url, 'directUrl' => $directUrl ? $url : null, 'permissions' => json_decode($request->permissions), 'referenceData' => [ 'fileKey' => json_encode([ 'fileName' => $fileName, 'userAddress' => $request->ip(), ]), 'instanceId' => $request->serverAddress, ], ], 'editorConfig' => [ 'mode' => 'edit', 'callbackUrl' => FileURL::callback($fileName, $request->ip()), ], ]; if ($this->serverConfig->get('jwt.enabled')) { $config['token'] = $jwt->encode($config); } return response() ->json($config); } catch (Exception $e) { return response() ->json([ 'error' => $e->getMessage(), ], 500); } } }