diff --git a/app/Models/LocalFileVolume.php b/app/Models/LocalFileVolume.php index 2c223be77..d96f7125e 100644 --- a/app/Models/LocalFileVolume.php +++ b/app/Models/LocalFileVolume.php @@ -3,6 +3,7 @@ namespace App\Models; use App\Events\FileStorageChanged; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Factories\HasFactory; class LocalFileVolume extends BaseModel @@ -11,6 +12,8 @@ class LocalFileVolume extends BaseModel protected $guarded = []; + public $appends = ['is_binary']; + protected static function booted() { static::created(function (LocalFileVolume $fileVolume) { @@ -19,6 +22,15 @@ class LocalFileVolume extends BaseModel }); } + protected function isBinary(): Attribute + { + return Attribute::make( + get: function () { + return $this->content === '[binary file]'; + } + ); + } + public function service() { return $this->morphTo('resource'); @@ -44,6 +56,10 @@ class LocalFileVolume extends BaseModel $isFile = instant_remote_process(["test -f $path && echo OK || echo NOK"], $server); if ($isFile === 'OK') { $content = instant_remote_process(["cat $path"], $server, false); + // Check if content contains binary data by looking for null bytes or non-printable characters + if (str_contains($content, "\0") || preg_match('/[\x00-\x08\x0B\x0C\x0E-\x1F]/', $content)) { + $content = '[binary file]'; + } $this->content = $content; $this->is_directory = false; $this->save(); diff --git a/resources/views/livewire/project/service/file-storage.blade.php b/resources/views/livewire/project/service/file-storage.blade.php index 550b43c20..e17835429 100644 --- a/resources/views/livewire/project/service/file-storage.blade.php +++ b/resources/views/livewire/project/service/file-storage.blade.php @@ -28,12 +28,15 @@ confirmationLabel="Please confirm the execution of the actions by entering the Filepath below" shortConfirmationLabel="Filepath" step3ButtonText="Permanently Delete" /> @else - + @if (!$fileStorage->is_binary) + + @endif - @if (!$fileStorage->is_based_on_git) + readonly="{{ $fileStorage->is_based_on_git || $fileStorage->is_binary }}"> + @if (!$fileStorage->is_based_on_git && !$fileStorage->is_binary) Save @endif @endif