morphTo('resource'); } public function saveStorageOnServer(ServiceApplication|ServiceDatabase $service) { $workdir = $service->service->workdir(); $server = $service->service->server; $commands = collect([ "mkdir -p $workdir > /dev/null 2>&1 || true", "cd $workdir" ]); $fileVolume = $this; $path = Str::of(data_get($fileVolume, 'fs_path')); $content = data_get($fileVolume, 'content'); if ($path->startsWith('.')) { $path = $path->after('.'); $path = $workdir . $path; } $isFile = instant_remote_process(["test -f $path && echo OK || echo NOK"], $server); $isDir = instant_remote_process(["test -d $path && echo OK || echo NOK"], $server); ray($path); if ($isFile == 'OK' && $fileVolume->is_directory) { throw new \Exception("File $path is a file on the server, but you are trying to mark it as a directory. Please delete the file on the server or mark it as directory."); } else if ($isDir == 'OK' && !$fileVolume->is_directory) { throw new \Exception("File $path is a directory on the server, but you are trying to mark it as a file. Please delete the directory on the server or mark it as directory."); } if (($isFile == 'NOK' && !$fileVolume->is_directory) || $isFile == 'OK') { $rootDir = Str::of($path)->dirname(); $commands->push("mkdir -p $rootDir > /dev/null 2>&1 || true"); $commands->push("touch $path > /dev/null 2>&1 || true"); if ($content) { $content = base64_encode($content); $commands->push("echo '$content' | base64 -d > $path"); } } else if ($isDir == 'NOK' && $fileVolume->is_directory) { $commands->push("mkdir -p $path > /dev/null 2>&1 || true"); } return instant_remote_process($commands, $server); } }