mirror of
https://github.com/vitodeploy/vito.git
synced 2025-04-20 02:11:36 +00:00
99 lines
2.4 KiB
PHP
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
|
|
);
|
|
}
|
|
}
|