Merge branch 'develop' into feature/react-admin
This commit is contained in:
commit
2e046ae258
6 changed files with 25 additions and 14 deletions
|
@ -3,6 +3,12 @@ This file is a running track of new features and fixes to each version of the pa
|
||||||
|
|
||||||
This project follows [Semantic Versioning](http://semver.org) guidelines.
|
This project follows [Semantic Versioning](http://semver.org) guidelines.
|
||||||
|
|
||||||
|
## v1.3.1
|
||||||
|
### Fixed
|
||||||
|
* Fixes the Rust egg not properly seeding during the upgrade & installation process.
|
||||||
|
* Fixes backups not being downloadable via the frontend.
|
||||||
|
* Fixes backup listing showing the wrong number of existing backups based on the current page you're on.
|
||||||
|
|
||||||
## v1.3.0
|
## v1.3.0
|
||||||
### Fixed
|
### Fixed
|
||||||
* Fixes administrator "Other Servers" toggle being persisted wrongly when signing out and signing into a non-administrator account on the server dashboard.
|
* Fixes administrator "Other Servers" toggle being persisted wrongly when signing out and signing into a non-administrator account on the server dashboard.
|
||||||
|
|
|
@ -79,7 +79,7 @@ class UpgradeCommand extends Command
|
||||||
if (!$skipDownload) {
|
if (!$skipDownload) {
|
||||||
$this->withProgress($bar, function () {
|
$this->withProgress($bar, function () {
|
||||||
$this->line("\$upgrader> curl -L \"{$this->getUrl()}\" | tar -xzv");
|
$this->line("\$upgrader> curl -L \"{$this->getUrl()}\" | tar -xzv");
|
||||||
$process = Process::fromShellCommandline("curl -L \"{$this->getUrl()}\" | tar -xzvf");
|
$process = Process::fromShellCommandline("curl -L \"{$this->getUrl()}\" | tar -xzv");
|
||||||
$process->run(function ($type, $buffer) {
|
$process->run(function ($type, $buffer) {
|
||||||
$this->{$type === Process::ERR ? 'error' : 'line'}($buffer);
|
$this->{$type === Process::ERR ? 'error' : 'line'}($buffer);
|
||||||
});
|
});
|
||||||
|
|
|
@ -131,6 +131,7 @@ class BackupController extends ClientApiController
|
||||||
* will be streamed back through the Panel. For AWS S3 files, a signed URL will be generated
|
* will be streamed back through the Panel. For AWS S3 files, a signed URL will be generated
|
||||||
* which the user is redirected to.
|
* which the user is redirected to.
|
||||||
*
|
*
|
||||||
|
* @throws \Throwable
|
||||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||||
*/
|
*/
|
||||||
public function download(Request $request, Server $server, Backup $backup): JsonResponse
|
public function download(Request $request, Server $server, Backup $backup): JsonResponse
|
||||||
|
@ -139,16 +140,19 @@ class BackupController extends ClientApiController
|
||||||
throw new AuthorizationException();
|
throw new AuthorizationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($backup->disk) {
|
if ($backup->disk !== Backup::ADAPTER_AWS_S3 && $backup->disk !== Backup::ADAPTER_WINGS) {
|
||||||
case Backup::ADAPTER_WINGS:
|
throw new BadRequestHttpException('The backup requested references an unknown disk driver type and cannot be downloaded.');
|
||||||
case Backup::ADAPTER_AWS_S3:
|
|
||||||
return new JsonResponse([
|
|
||||||
'object' => 'signed_url',
|
|
||||||
'attributes' => ['url' => ''],
|
|
||||||
]);
|
|
||||||
default:
|
|
||||||
throw new BadRequestHttpException();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$url = $this->downloadLinkService->handle($backup, $request->user());
|
||||||
|
$server->audit(AuditLog::SERVER__BACKUP_DOWNLOADED, function (AuditLog $audit) use ($backup) {
|
||||||
|
$audit->metadata = ['backup_uuid' => $backup->uuid];
|
||||||
|
});
|
||||||
|
|
||||||
|
return new JsonResponse([
|
||||||
|
'object' => 'signed_url',
|
||||||
|
'attributes' => ['url' => $url],
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -35,6 +35,7 @@ class AuditLog extends Model
|
||||||
public const SERVER__BACKUP_FAILED = 'server:backup.failed';
|
public const SERVER__BACKUP_FAILED = 'server:backup.failed';
|
||||||
public const SERVER__BACKUP_COMPELTED = 'server:backup.completed';
|
public const SERVER__BACKUP_COMPELTED = 'server:backup.completed';
|
||||||
public const SERVER__BACKUP_DELETED = 'server:backup.deleted';
|
public const SERVER__BACKUP_DELETED = 'server:backup.deleted';
|
||||||
|
public const SERVER__BACKUP_DOWNLOADED = 'server:backup.downloaded';
|
||||||
public const SERVER__BACKUP_RESTORE_STARTED = 'server:backup.restore.started';
|
public const SERVER__BACKUP_RESTORE_STARTED = 'server:backup.restore.started';
|
||||||
public const SERVER__BACKUP_RESTORE_COMPLETED = 'server:backup.restore.completed';
|
public const SERVER__BACKUP_RESTORE_COMPLETED = 'server:backup.restore.completed';
|
||||||
public const SERVER__BACKUP_RESTORE_FAILED = 'server:backup.restore.failed';
|
public const SERVER__BACKUP_RESTORE_FAILED = 'server:backup.restore.failed';
|
||||||
|
|
|
@ -47,7 +47,7 @@ class DownloadLinkService
|
||||||
])
|
])
|
||||||
->handle($backup->server->node, $user->id . $backup->server->uuid);
|
->handle($backup->server->node, $user->id . $backup->server->uuid);
|
||||||
|
|
||||||
return sprintf('%s/download/backup?token=%s', $backup->server->node->getConnectionAddress(), $token->__toString());
|
return sprintf('%s/download/backup?token=%s', $backup->server->node->getConnectionAddress(), $token->toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -65,12 +65,12 @@ const BackupContainer = () => {
|
||||||
}
|
}
|
||||||
<Can action={'backup.create'}>
|
<Can action={'backup.create'}>
|
||||||
<div css={tw`mt-6 sm:flex items-center justify-end`}>
|
<div css={tw`mt-6 sm:flex items-center justify-end`}>
|
||||||
{(backupLimit > 0 && backups.items.length > 0) &&
|
{(backupLimit > 0 && backups.pagination.total > 0) &&
|
||||||
<p css={tw`text-sm text-neutral-300 mb-4 sm:mr-6 sm:mb-0`}>
|
<p css={tw`text-sm text-neutral-300 mb-4 sm:mr-6 sm:mb-0`}>
|
||||||
{backups.items.length} of {backupLimit} backups have been created for this server.
|
{backups.pagination.total} of {backupLimit} backups have been created for this server.
|
||||||
</p>
|
</p>
|
||||||
}
|
}
|
||||||
{backupLimit > 0 && backupLimit !== backups.items.length &&
|
{backupLimit > 0 && backupLimit !== backups.pagination.total &&
|
||||||
<CreateBackupButton css={tw`w-full sm:w-auto`}/>
|
<CreateBackupButton css={tw`w-full sm:w-auto`}/>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in a new issue