diff --git a/app/Events/S3DownloadFinished.php b/app/Events/S3DownloadFinished.php new file mode 100644 index 000000000..4ca11fdd0 --- /dev/null +++ b/app/Events/S3DownloadFinished.php @@ -0,0 +1,27 @@ +/dev/null || true"; + $commands[] = "docker rm {$containerName} 2>/dev/null || true"; + instant_remote_process($commands, Server::find($serverId), throwError: false); + } + } +} diff --git a/app/Events/S3RestoreJobFinished.php b/app/Events/S3RestoreJobFinished.php new file mode 100644 index 000000000..924bc94b1 --- /dev/null +++ b/app/Events/S3RestoreJobFinished.php @@ -0,0 +1,49 @@ +startsWith('/tmp/') + && str($scriptPath)->startsWith('/tmp/') + && ! str($tmpPath)->contains('..') + && ! str($scriptPath)->contains('..') + && strlen($tmpPath) > 5 // longer than just "/tmp/" + && strlen($scriptPath) > 5 + ) { + $commands[] = "docker exec {$container} sh -c 'rm {$scriptPath}'"; + $commands[] = "docker exec {$container} sh -c 'rm {$tmpPath}'"; + instant_remote_process($commands, Server::find($serverId), throwError: true); + } + } + + // Clean up S3 downloaded file from server + if (filled($s3DownloadedFile) && filled($serverId)) { + if (str($s3DownloadedFile)->startsWith('/tmp/s3-restore-') + && ! str($s3DownloadedFile)->contains('..') + && strlen($s3DownloadedFile) > 16 // longer than just "/tmp/s3-restore-" + ) { + $commands = []; + $commands[] = "rm -f {$s3DownloadedFile}"; + instant_remote_process($commands, Server::find($serverId), throwError: false); + } + } + } +} diff --git a/app/Livewire/Project/Database/Import.php b/app/Livewire/Project/Database/Import.php index c2490bee6..95597e8ea 100644 --- a/app/Livewire/Project/Database/Import.php +++ b/app/Livewire/Project/Database/Import.php @@ -74,17 +74,9 @@ public function getListeners() return [ "echo-private:user.{$userId},DatabaseStatusChanged" => '$refresh', - 'S3DownloadFinished' => 'handleS3DownloadFinished', ]; } - public function handleS3DownloadFinished(): void - { - ray('S3DownloadFinished event received!'); - $this->s3DownloadInProgress = false; - ray('s3DownloadInProgress set to false', $this->s3DownloadInProgress); - } - public function mount() { if (isDev()) { @@ -402,7 +394,7 @@ public function downloadFromS3() $commands[] = "docker exec {$containerName} mc cp temporary/{$bucket}/{$cleanPath} {$downloadPath}"; // Execute download commands - $activity = remote_process($commands, $this->server, ignore_errors: false, callEventOnFinish: 'S3DownloadFinished', callEventData: [ + $activity = remote_process($commands, $this->server, ignore_errors: false, callEventOnFinish: 'App\\Events\\S3DownloadFinished', callEventData: [ 'downloadPath' => $downloadPath, 'containerName' => $containerName, 'serverId' => $this->server->id, @@ -486,7 +478,7 @@ public function restoreFromS3() $this->importCommands[] = "docker exec {$this->container} sh -c 'echo \"Import finished with exit code $?\"'"; if (! empty($this->importCommands)) { - $activity = remote_process($this->importCommands, $this->server, ignore_errors: true, callEventOnFinish: 'S3RestoreJobFinished', callEventData: [ + $activity = remote_process($this->importCommands, $this->server, ignore_errors: true, callEventOnFinish: 'App\\Events\\S3RestoreJobFinished', callEventData: [ 'scriptPath' => $scriptPath, 'tmpPath' => $tmpPath, 'container' => $this->container,