mirror of
https://github.com/InvoiceShelf/InvoiceShelf.git
synced 2026-04-19 11:14:06 +00:00
Consolidate Admin/Backup: merge ApiController and DownloadBackupController into BackupsController
Inline the respondSuccess() helper, add download() method. Remove the unnecessary ApiController base class and DownloadBackupController.
This commit is contained in:
@@ -1,21 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
// Implementation taken from nova-backup-tool - https://github.com/spatie/nova-backup-tool/
|
|
||||||
|
|
||||||
namespace App\Http\Controllers\Admin\Backup;
|
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
|
||||||
use Illuminate\Http\JsonResponse;
|
|
||||||
|
|
||||||
class ApiController extends Controller
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Resoibd wutg syccess
|
|
||||||
*/
|
|
||||||
public function respondSuccess(): JsonResponse
|
|
||||||
{
|
|
||||||
return response()->json([
|
|
||||||
'success' => true,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,28 +1,22 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
// Implementation taken from nova-backup-tool - https://github.com/spatie/nova-backup-tool/
|
|
||||||
|
|
||||||
namespace App\Http\Controllers\Admin\Backup;
|
namespace App\Http\Controllers\Admin\Backup;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
use App\Jobs\CreateBackupJob;
|
use App\Jobs\CreateBackupJob;
|
||||||
use App\Models\FileDisk;
|
use App\Models\FileDisk;
|
||||||
use App\Rules\Backup\PathToZip;
|
use App\Rules\Backup\PathToZip;
|
||||||
use Illuminate\Auth\Access\AuthorizationException;
|
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\Response;
|
||||||
use Illuminate\Support\Facades\Cache;
|
use Illuminate\Support\Facades\Cache;
|
||||||
use Spatie\Backup\BackupDestination\Backup;
|
use Spatie\Backup\BackupDestination\Backup;
|
||||||
use Spatie\Backup\BackupDestination\BackupDestination;
|
use Spatie\Backup\BackupDestination\BackupDestination;
|
||||||
use Spatie\Backup\Helpers\Format;
|
use Spatie\Backup\Helpers\Format;
|
||||||
|
use Symfony\Component\HttpFoundation\StreamedResponse;
|
||||||
|
|
||||||
class BackupsController extends ApiController
|
class BackupsController extends Controller
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Display a listing of the resource.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @throws AuthorizationException
|
|
||||||
*/
|
|
||||||
public function index(Request $request): JsonResponse
|
public function index(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
$this->authorize('manage backups');
|
$this->authorize('manage backups');
|
||||||
@@ -69,12 +63,6 @@ class BackupsController extends ApiController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Store a newly created resource in storage.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @throws AuthorizationException
|
|
||||||
*/
|
|
||||||
public function store(Request $request): JsonResponse
|
public function store(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
$this->authorize('manage backups');
|
$this->authorize('manage backups');
|
||||||
@@ -84,15 +72,9 @@ class BackupsController extends ApiController
|
|||||||
|
|
||||||
dispatch(new CreateBackupJob($data))->onQueue(config('backup.queue.name'));
|
dispatch(new CreateBackupJob($data))->onQueue(config('backup.queue.name'));
|
||||||
|
|
||||||
return $this->respondSuccess();
|
return response()->json(['success' => true]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove the specified resource from storage.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @throws AuthorizationException
|
|
||||||
*/
|
|
||||||
public function destroy($disk, Request $request): JsonResponse
|
public function destroy($disk, Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
$this->authorize('manage backups');
|
$this->authorize('manage backups');
|
||||||
@@ -110,6 +92,41 @@ class BackupsController extends ApiController
|
|||||||
})
|
})
|
||||||
->delete();
|
->delete();
|
||||||
|
|
||||||
return $this->respondSuccess();
|
return response()->json(['success' => true]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function download(Request $request): Response|StreamedResponse
|
||||||
|
{
|
||||||
|
$this->authorize('manage backups');
|
||||||
|
|
||||||
|
$validated = $request->validate([
|
||||||
|
'path' => ['required', new PathToZip],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$backupDestination = BackupDestination::create(config('filesystems.default'), config('backup.backup.name'));
|
||||||
|
|
||||||
|
$backup = $backupDestination->backups()->first(function (Backup $backup) use ($validated) {
|
||||||
|
return $backup->path() === $validated['path'];
|
||||||
|
});
|
||||||
|
|
||||||
|
if (! $backup) {
|
||||||
|
return response('Backup not found', 422);
|
||||||
|
}
|
||||||
|
|
||||||
|
$fileName = pathinfo($backup->path(), PATHINFO_BASENAME);
|
||||||
|
|
||||||
|
return response()->stream(function () use ($backup) {
|
||||||
|
$stream = $backup->stream();
|
||||||
|
fpassthru($stream);
|
||||||
|
if (is_resource($stream)) {
|
||||||
|
fclose($stream);
|
||||||
|
}
|
||||||
|
}, 200, [
|
||||||
|
'Cache-Control' => 'must-revalidate, post-check=0, pre-check=0',
|
||||||
|
'Content-Type' => 'application/zip',
|
||||||
|
'Content-Length' => $backup->sizeInBytes(),
|
||||||
|
'Content-Disposition' => 'attachment; filename="'.$fileName.'"',
|
||||||
|
'Pragma' => 'public',
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,70 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
// Implementation taken from nova-backup-tool - https://github.com/spatie/nova-backup-tool/
|
|
||||||
|
|
||||||
namespace App\Http\Controllers\Admin\Backup;
|
|
||||||
|
|
||||||
use App\Rules\Backup\PathToZip;
|
|
||||||
use Illuminate\Auth\Access\AuthorizationException;
|
|
||||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Spatie\Backup\BackupDestination\Backup;
|
|
||||||
use Spatie\Backup\BackupDestination\BackupDestination;
|
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
|
||||||
use Symfony\Component\HttpFoundation\StreamedResponse;
|
|
||||||
|
|
||||||
class DownloadBackupController extends ApiController
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Handle backups
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @throws AuthorizationException
|
|
||||||
*/
|
|
||||||
public function __invoke(Request $request): \Illuminate\Http\Response|StreamedResponse|ResponseFactory
|
|
||||||
{
|
|
||||||
$this->authorize('manage backups');
|
|
||||||
|
|
||||||
$validated = $request->validate([
|
|
||||||
'path' => ['required', new PathToZip],
|
|
||||||
]);
|
|
||||||
|
|
||||||
$backupDestination = BackupDestination::create(config('filesystems.default'), config('backup.backup.name'));
|
|
||||||
|
|
||||||
$backup = $backupDestination->backups()->first(function (Backup $backup) use ($validated) {
|
|
||||||
return $backup->path() === $validated['path'];
|
|
||||||
});
|
|
||||||
|
|
||||||
if (! $backup) {
|
|
||||||
return response('Backup not found', Response::HTTP_UNPROCESSABLE_ENTITY);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->respondWithBackupStream($backup);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Respond with backup stream
|
|
||||||
*/
|
|
||||||
public function respondWithBackupStream(Backup $backup): StreamedResponse
|
|
||||||
{
|
|
||||||
$fileName = pathinfo($backup->path(), PATHINFO_BASENAME);
|
|
||||||
|
|
||||||
$downloadHeaders = [
|
|
||||||
'Cache-Control' => 'must-revalidate, post-check=0, pre-check=0',
|
|
||||||
'Content-Type' => 'application/zip',
|
|
||||||
'Content-Length' => $backup->sizeInBytes(),
|
|
||||||
'Content-Disposition' => 'attachment; filename="'.$fileName.'"',
|
|
||||||
'Pragma' => 'public',
|
|
||||||
];
|
|
||||||
|
|
||||||
return response()->stream(function () use ($backup) {
|
|
||||||
$stream = $backup->stream();
|
|
||||||
|
|
||||||
fpassthru($stream);
|
|
||||||
|
|
||||||
if (is_resource($stream)) {
|
|
||||||
fclose($stream);
|
|
||||||
}
|
|
||||||
}, 200, $downloadHeaders);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Http\Controllers\Admin\Backup\BackupsController;
|
use App\Http\Controllers\Admin\Backup\BackupsController;
|
||||||
use App\Http\Controllers\Admin\Backup\DownloadBackupController;
|
|
||||||
use App\Http\Controllers\Admin\CountriesController;
|
use App\Http\Controllers\Admin\CountriesController;
|
||||||
use App\Http\Controllers\Admin\CurrenciesController;
|
use App\Http\Controllers\Admin\CurrenciesController;
|
||||||
use App\Http\Controllers\Admin\Modules\ModuleInstallationController;
|
use App\Http\Controllers\Admin\Modules\ModuleInstallationController;
|
||||||
@@ -327,7 +326,7 @@ Route::prefix('/v1')->group(function () {
|
|||||||
|
|
||||||
Route::apiResource('/disks', DiskController::class);
|
Route::apiResource('/disks', DiskController::class);
|
||||||
|
|
||||||
Route::get('download-backup', DownloadBackupController::class);
|
Route::get('download-backup', [BackupsController::class, 'download']);
|
||||||
|
|
||||||
Route::get('/disk/drivers', [DiskController::class, 'getDiskDrivers']);
|
Route::get('/disk/drivers', [DiskController::class, 'getDiskDrivers']);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user