Fix inability to download files from the panel; closes #3151

Co-Authored-By: xcgc <74693042+xcgc@users.noreply.github.com>
This commit is contained in:
Dane Everitt 2021-03-07 09:45:27 -08:00
parent 7e0efbdecd
commit 1476104b30
No known key found for this signature in database
GPG key ID: EEA66103B3D71F53
3 changed files with 15 additions and 10 deletions

View file

@ -149,6 +149,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
@ -157,16 +158,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: }
$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([ return new JsonResponse([
'object' => 'signed_url', 'object' => 'signed_url',
'attributes' => ['url' => ''], 'attributes' => ['url' => $url],
]); ]);
default:
throw new BadRequestHttpException();
}
} }
/** /**

View file

@ -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';

View file

@ -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());
} }
/** /**