2024-09-29 17:54:11 +02:00

99 lines
2.4 KiB
PHP

<?php
namespace App\StorageProviders;
use App\Models\Server;
use App\SSH\Storage\Storage;
use FTP\Connection;
class FTP extends AbstractStorageProvider
{
public function validationRules(): array
{
return [
'host' => 'required',
'port' => [
'required',
'integer',
'min:1',
'max:65535',
],
'path' => 'required',
'username' => 'required',
'password' => 'required',
'ssl' => 'required',
'passive' => 'required',
];
}
public function credentialData(array $input): array
{
return [
'host' => $input['host'],
'port' => $input['port'],
'path' => $input['path'],
'username' => $input['username'],
'password' => $input['password'],
'ssl' => (bool) $input['ssl'],
'passive' => (bool) $input['passive'],
];
}
public function connect(): bool
{
$connection = $this->connection();
$isConnected = $connection && $this->login($connection);
if ($isConnected) {
\App\Facades\FTP::close($connection);
}
return $isConnected;
}
public function ssh(Server $server): Storage
{
return new \App\SSH\Storage\FTP($server, $this->storageProvider);
}
public function delete(array $paths): void
{
$connection = $this->connection();
if ($connection && $this->login($connection)) {
if ($this->storageProvider->credentials['passive']) {
\App\Facades\FTP::passive($connection, true);
}
foreach ($paths as $path) {
\App\Facades\FTP::delete($connection, $this->storageProvider->credentials['path'].'/'.$path);
}
}
\App\Facades\FTP::close($connection);
}
private function connection(): bool|Connection
{
$credentials = $this->storageProvider->credentials;
return \App\Facades\FTP::connect(
$credentials['host'],
$credentials['port'],
$credentials['ssl']
);
}
private function login(bool|Connection $connection): bool
{
$credentials = $this->storageProvider->credentials;
return \App\Facades\FTP::login(
$credentials['username'],
$credentials['password'],
$connection
);
}
}