session = $session; $this->config = $config; $this->auth = $auth; $this->user = $this->auth->user() ?: $this->auth->getGuest(); $this->storage = $storage; $this->storage->setPathPrefix($this->user->getHomeDir()); } /** * @param Request $request * @param Response $response * @return void */ public function stateExists(Request $request, Response $response) { $id = $request->input('id'); $exists = ImageStateData::stateFileExists($id); return $response->json([ 'exists' => $exists ]); } /** * @param Request $request * @param Response $response * @return void */ public function getState(Request $request, Response $response) { $id = $request->input('id'); $state = null; try { $file = ImageStateData::getState($id); $state = $file['contents']; } catch (\Exception $e) {} $response->json([ 'state' => json_decode($state) ]); } /** * @param Request $request * @param Response $response * @param StreamedResponse $streamedResponse * @return void */ public function download(Request $request, Response $response, StreamedResponse $streamedResponse) { $id = $request->input('id'); $originalPath = $request->input('path'); $ext = $request->input('ext'); $stateImageName = $id.'.'.$ext; // if not, get state image file try { $file = ImageStateData::getImage($stateImageName); } catch (\Exception $e) {} // if not found, get original file if(empty($file)) { try { // if not, get original image $file = $this->storage->readStream((string) base64_decode($originalPath)); } catch (\Exception $e) {} } if(empty($file)) { return $response->redirect('/'); } return App::instance()->call([DownloadController::class, 'downloadFile'], [$file, $request, $streamedResponse]); } /** * @param Request $request * @param Response $response * @return void */ public function revert(Request $request, Response $response) { $item = $request->input('item'); $stateImageName = $item->id.'.'.$item->ext; try { $file = ImageStateData::getImage($stateImageName); $this->storage->storeStream($item->dir, $item->name, $file['stream'], true); ImageStateData::deleteState($item->id); } catch (\Exception $e) { return $response->json([ 'success' => false ]); } $response->json([ 'success' => true ]); } }