From 458b076f734f6b668fa0d63c53bbcb14f21828c3 Mon Sep 17 00:00:00 2001 From: ro Date: Tue, 9 Jul 2024 16:26:01 -0600 Subject: [PATCH] FEATURE: full asset restore from backup archive the current restore process only restored images and not the additional file types that are allowed, so that has been added also tweaked the reset request to include the correct token so the request does not fail API authorization --- app/Services/Upkeep/InitService.php | 38 +++++++++++++------ app/Services/Upkeep/ResetService.php | 1 + .../app/controllers/MaintenanceManager.js | 8 +++- routes/api.php | 6 ++- 4 files changed, 38 insertions(+), 15 deletions(-) diff --git a/app/Services/Upkeep/InitService.php b/app/Services/Upkeep/InitService.php index 30a2e89..41cde58 100644 --- a/app/Services/Upkeep/InitService.php +++ b/app/Services/Upkeep/InitService.php @@ -12,10 +12,14 @@ use function _\find; class InitService { protected $docs; + protected $filePaths = []; public function __construct(DocService $docService) { - $this->docs = $docService; + $this->docs = $docService; + $this->filePaths = ['../public/assets/images/blog', + '../public/assets/images/user', '../public/assets/video/blog', + '../public/assets/docs/blog', '../public/assets/sound/blog']; } private static function validSecret($length) @@ -125,6 +129,7 @@ class InitService public function restore($request) { //content required, so check it + $result = []; $contentArchive = $request->file('backup-content-upload'); $fileArchive = $request->file('backup-files-upload'); @@ -135,6 +140,10 @@ class InitService ]; } $result = $this->restoreContent($contentArchive, $request); + + if ($result['type'] == 'requestLame') { + return $result; + } //file upload is optional, so if it's present, restore it if ($fileArchive != null || $fileArchive != '') { $result = $this->restoreFiles($fileArchive); @@ -200,10 +209,11 @@ class InitService } else { $result = [ 'type' => 'requestLame', - 'message' => 'Could not open backup. RATS!', + 'message' => 'Uh Oh. Check that handle', ]; } }; + return $result; } private function restoreFiles($filesUpload) @@ -212,19 +222,23 @@ class InitService $filesZip = new \ZipArchive(); $tempDir = env('FIPAMO_DIR') . '/_file_temp'; $result = []; - //images path for blog and user - $blogImagePath = '../public/assets/images/blog'; - $userImagePath = '../public/assets/images/user'; if ($filesZip->open(env('FIPAMO_DIR') . '/' . $filesUpload->getClientOriginalName()) === true) { $filesZip->extractTo($tempDir); //clear and move dir if present - delete_directory($blogImagePath, false); - if (is_dir($tempDir . '/public/assets/images/blog')) { - rename($tempDir . '/public/assets/images/blog', $blogImagePath); - } - delete_directory($userImagePath, false); - if (is_dir($tempDir . '/public/assets/images/user')) { - rename($tempDir . '/public/assets/images/user', $userImagePath); + foreach ($this->filePaths as $path) { + delete_directory($path, false); + //non image directories don't exist, so they need to be created + $pathing = explode("/", $path); + if ($pathing[3] != 'images') { + if (!is_dir('../public/assets/' . $pathing[3])) { + mkdir('../public/assets/' . $pathing[3]); + } + } + + $tempPath = $tempDir . '/' . substr($path, 3); + if (is_dir($tempPath)) { + rename($tempPath, $path); + } } $result = [ 'type' => 'requestGood', diff --git a/app/Services/Upkeep/ResetService.php b/app/Services/Upkeep/ResetService.php index 4926bcb..2c4d37b 100644 --- a/app/Services/Upkeep/ResetService.php +++ b/app/Services/Upkeep/ResetService.php @@ -44,6 +44,7 @@ class ResetService { delete_directory('../public/assets/docs', false); delete_directory('../public/assets/video', false); + delete_directory('../public/assets/sound', false); delete_directory('../public/assets/css/theme', false); delete_directory('../public/assets/scripts/theme', false); delete_directory('../public/assets/images/blog', false); diff --git a/public/assets/scripts/dash/app/controllers/MaintenanceManager.js b/public/assets/scripts/dash/app/controllers/MaintenanceManager.js index 8f92c53..0e2c9a9 100644 --- a/public/assets/scripts/dash/app/controllers/MaintenanceManager.js +++ b/public/assets/scripts/dash/app/controllers/MaintenanceManager.js @@ -281,8 +281,14 @@ class MaintenanceManager { } }; if (requestType == REQUEST_TYPE_PUT || requestType == REQUEST_TYPE_POST) { - if (eventType === TASK_UPLOAD_FILES || eventType === TASK_BACKUP_CREATE) + if ( + eventType === TASK_UPLOAD_FILES || + eventType === TASK_BACKUP_CREATE || + eventType === TASK_SITE_INIT + ) { request.setRequestHeader('fipamo-access-token', self.token); + } + switch (contentType) { case CONTENT_TYPE_JSON: request.setRequestHeader( diff --git a/routes/api.php b/routes/api.php index 7760eaa..bb6fb86 100644 --- a/routes/api.php +++ b/routes/api.php @@ -22,6 +22,10 @@ use App\Http\Controllers\API\MailAPIController; //check if session is active Route::get("/v1/status", [AuthAPIController::class, 'status']); +//site setup +Route::post("/v1/init", [InitAPIController::class, 'setupFresh']); +Route::post("/v1/restore", [InitAPIController::class, 'setupRestore']); + //handle page editing actions Route::group(['prefix' => '/v1/page', 'middleware' => 'validate.token'], function () { Route::put("/write", [PageAPIController::class, 'write']); @@ -45,8 +49,6 @@ Route::group(['prefix' => '/v1/backup', 'middleware' => 'validate.token'], funct //other Route::group(['prefix' => '/v1', 'middleware' => 'validate.token'], function () { Route::post("/files", [FileUploadAPIController::class, 'upload']); - Route::post("/init", [InitAPIController::class, 'setupFresh']); - Route::post("/restore", [InitAPIController::class, 'setupRestore']); Route::post("/reset", [InitAPIController::class, 'setupReset']); Route::post("/mailer", [MailAPIController::class, 'sendNotify']); });