mirror of
https://github.com/vitodeploy/vito.git
synced 2025-04-20 18:31:36 +00:00
73 lines
1.8 KiB
PHP
73 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\StorageProviders;
|
|
|
|
use App\Models\Server;
|
|
use App\SSHCommands\Storage\DownloadFromDropboxCommand;
|
|
use App\SSHCommands\Storage\UploadToDropboxCommand;
|
|
use Illuminate\Support\Facades\Http;
|
|
use Laravel\Socialite\Facades\Socialite;
|
|
use Symfony\Component\HttpFoundation\RedirectResponse;
|
|
use Throwable;
|
|
|
|
class Dropbox extends AbstractStorageProvider
|
|
{
|
|
public function connect(): RedirectResponse
|
|
{
|
|
session()->put('storage_provider_id', $this->storageProvider->id);
|
|
|
|
return Socialite::driver('dropbox')->redirect();
|
|
}
|
|
|
|
/**
|
|
* @throws Throwable
|
|
*/
|
|
public function upload(Server $server, string $src, string $dest): array
|
|
{
|
|
$upload = $server->ssh()->exec(
|
|
new UploadToDropboxCommand(
|
|
$src,
|
|
$dest,
|
|
$this->storageProvider->token
|
|
),
|
|
'upload-to-dropbox'
|
|
);
|
|
|
|
$data = json_decode($upload);
|
|
|
|
return [
|
|
'size' => $data?->size,
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @throws Throwable
|
|
*/
|
|
public function download(Server $server, string $src, string $dest): void
|
|
{
|
|
$server->ssh()->exec(
|
|
new DownloadFromDropboxCommand(
|
|
$src,
|
|
$dest,
|
|
$this->storageProvider->token
|
|
),
|
|
'download-from-dropbox'
|
|
);
|
|
}
|
|
|
|
public function delete(array $paths): void
|
|
{
|
|
$data = [];
|
|
foreach ($paths as $path) {
|
|
$data[] = ['path' => $path];
|
|
}
|
|
Http::withToken($this->storageProvider->token)
|
|
->withHeaders([
|
|
'Content-Type:application/json',
|
|
])
|
|
->post('https://api.dropboxapi.com/2/files/delete_batch', [
|
|
'entries' => $data,
|
|
]);
|
|
}
|
|
}
|