Skip to content

Commit 35d0bbf

Browse files
jgaffney-godaddygforsythe-godaddy
authored andcommitted
add fetch app backups methods and command
1 parent a6ffb57 commit 35d0bbf

File tree

2 files changed

+122
-3
lines changed

2 files changed

+122
-3
lines changed

src/API/Apps/AppsClient.php

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -193,10 +193,11 @@ public function remove($accessToken, $appId)
193193
//
194194
// Git integration methods
195195
//
196-
public function createGitIntegration(string $accessToken,int $appId, string $remoteProvider, string $branch): \Psr\Http\Message\ResponseInterface
196+
public function createGitIntegration(string $accessToken, int $appId, string $remoteProvider, string $branch): \Psr\Http\Message\ResponseInterface
197197
{
198198
return $this->guzzle($this->getBearerTokenMiddleware($accessToken))
199-
->post("/apps/{$appId}/git-integration",
199+
->post(
200+
"/apps/{$appId}/git-integration",
200201
[
201202
'json' =>[
202203
'remote' => $remoteProvider,
@@ -212,9 +213,28 @@ public function deleteGitIntegration(string $accessToken, int $appId): \Psr\Http
212213
->delete("/apps/{$appId}/git-integration");
213214
}
214215

215-
public function getGitIntegration(string $accessToken,int $appId): \Psr\Http\Message\ResponseInterface
216+
public function getGitIntegration(string $accessToken, int $appId): \Psr\Http\Message\ResponseInterface
216217
{
217218
return $this->guzzle($this->getBearerTokenMiddleware($accessToken))
218219
->get("/apps/{$appId}/git-integration");
219220
}
221+
222+
public function getAppBackups($accessToken, $appId)
223+
{
224+
return $this->guzzle($this->getBearerTokenMiddleware($accessToken))
225+
->get("apps/{$appId}/backups");
226+
}
227+
228+
public function getAppBackup($accessToken, $appId, $backupId)
229+
{
230+
return $this->guzzle($this->getBearerTokenMiddleware($accessToken))
231+
->get("apps/{$appId}/backups/{$backupId}");
232+
}
233+
234+
public function getLatestAppBackup($accessToken, $appId)
235+
{
236+
$body = json_decode($this->getAppBackups($accessToken, $appId)->getBody()->getContents(), true);
237+
$latest = end($body['data']);
238+
return $this->getAppBackup($accessToken, $appId, $latest['id']);
239+
}
220240
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
<?php
2+
3+
namespace Pagely\AtomicClient\Command\Apps;
4+
5+
use Pagely\AtomicClient\API\AuthApi;
6+
use Pagely\AtomicClient\Command\Command;
7+
use Pagely\AtomicClient\Command\OauthCommandTrait;
8+
use Pagely\AtomicClient\API\Apps\AppsClient;
9+
use Symfony\Component\Console\Input\InputArgument;
10+
use Symfony\Component\Console\Input\InputInterface;
11+
use Symfony\Component\Console\Input\InputOption;
12+
use Symfony\Component\Console\Output\OutputInterface;
13+
use Symfony\Component\Console\Helper\Table;
14+
15+
class GetAppBackupCommand extends Command
16+
{
17+
use OauthCommandTrait;
18+
19+
/**
20+
* @var AppsClient
21+
*/
22+
protected $api;
23+
24+
public function __construct(AuthApi $authApi, AppsClient $apps, $name = 'apps:backups:get')
25+
{
26+
$this->authClient = $authApi;
27+
$this->api = $apps;
28+
parent::__construct($name);
29+
}
30+
31+
public function configure()
32+
{
33+
parent::configure();
34+
$this
35+
->setDescription('Get Backup details and download links')
36+
->addArgument('appId', InputArgument::REQUIRED, 'App ID')
37+
->addOption('backupId', null, InputOption::VALUE_REQUIRED, 'Backup ID. If omitted, the latest backup is returned.')
38+
->addOption('curl', null, InputOption::VALUE_REQUIRED, 'Return curl download command eg. file|sql')
39+
->addOption('json', null, InputOption::VALUE_NONE, 'Return data is JSON format');
40+
$this->addOauthOptions();
41+
}
42+
43+
public function execute(InputInterface $input, OutputInterface $output)
44+
{
45+
$appId = $input->getArgument('appId');
46+
$backupId = $input->getOption('backupId');
47+
$json = $input->getOption('json');
48+
$curlOption = $input->getOption('curl');
49+
50+
$token = $this->token->token;
51+
52+
if ($backupId) {
53+
$r = $this->api->getAppBackup($token, $appId, $backupId);
54+
} else {
55+
$r = $this->api->getLatestAppBackup($token, $appId);
56+
}
57+
58+
$body = json_decode($r->getBody()->getContents(), true);
59+
60+
if ($json) {
61+
echo json_encode($body, JSON_PRETTY_PRINT);
62+
return 1;
63+
}
64+
65+
if (empty($curlOption)) {
66+
$rows = [];
67+
foreach ($body as $k => $v) {
68+
if ($k === 'sqlLink' || $k === 'fileLink') {
69+
continue;
70+
}
71+
$rows[] = [$k, $v];
72+
}
73+
74+
$table = new Table($output);
75+
$table
76+
->setHeaders(['Field', 'Value'])
77+
->setRows($rows);
78+
$table->render();
79+
80+
$output->writeln("Files Link");
81+
$output->writeln($body['fileLink']);
82+
$output->writeln("Sql Link");
83+
$output->writeln($body['sqlLink']);
84+
return 0;
85+
}
86+
switch ($curlOption) {
87+
case 'file':
88+
$output->writeln("curl {$body['fileLink']} --output pagely-file-backup.tar.gz");
89+
break;
90+
case 'sql':
91+
$output->writeln("curl {$body['sqlLink']} --output pagely-sql-backup.tar.gz");
92+
break;
93+
default:
94+
$output->writeln("Unknown backup type for --curl");
95+
return 1;
96+
}
97+
return 0;
98+
}
99+
}

0 commit comments

Comments
 (0)