From 3f5accc0f0e1d6f9080027367eacf579707c2b05 Mon Sep 17 00:00:00 2001 From: Darko Gjorgjijoski Date: Fri, 3 Apr 2026 21:42:45 +0200 Subject: [PATCH] Consolidate Admin/Update: 8 controllers into 1 UpdateController Merge 7 single-action pipeline controllers (checkVersion, download, unzip, copy, delete, migrate, finish) into UpdateController with named methods. Remove dead UpdateController that duplicated the same logic but wasn't referenced in routes. Extract shared owner check into private ensureOwner() helper. Route URLs unchanged. --- .../Admin/Update/CheckVersionController.php | 35 -------- .../Admin/Update/CopyFilesController.php | 37 -------- .../Admin/Update/DeleteFilesController.php | 34 ------- .../Admin/Update/DownloadUpdateController.php | 37 -------- .../Admin/Update/FinishUpdateController.php | 35 -------- .../Admin/Update/MigrateUpdateController.php | 32 ------- .../Admin/Update/UnzipUpdateController.php | 44 ---------- .../Admin/Update/UpdateController.php | 88 ++++++++++--------- routes/api.php | 28 ++---- 9 files changed, 54 insertions(+), 316 deletions(-) delete mode 100644 app/Http/Controllers/Admin/Update/CheckVersionController.php delete mode 100644 app/Http/Controllers/Admin/Update/CopyFilesController.php delete mode 100644 app/Http/Controllers/Admin/Update/DeleteFilesController.php delete mode 100644 app/Http/Controllers/Admin/Update/DownloadUpdateController.php delete mode 100644 app/Http/Controllers/Admin/Update/FinishUpdateController.php delete mode 100644 app/Http/Controllers/Admin/Update/MigrateUpdateController.php delete mode 100644 app/Http/Controllers/Admin/Update/UnzipUpdateController.php diff --git a/app/Http/Controllers/Admin/Update/CheckVersionController.php b/app/Http/Controllers/Admin/Update/CheckVersionController.php deleted file mode 100644 index 06ed80cb..00000000 --- a/app/Http/Controllers/Admin/Update/CheckVersionController.php +++ /dev/null @@ -1,35 +0,0 @@ -user()) || (! $request->user()->isOwner())) { - return response()->json([ - 'success' => false, - 'message' => 'You are not allowed to update this app.', - ], 401); - } - - set_time_limit(600); // 10 minutes - - $channel = $request->get('channel', 'stable'); - $version = preg_replace('~[\r\n]+~', '', File::get(base_path('version.md'))); - $response = Updater::checkForUpdate($version, $channel); - - return response()->json($response); - } -} diff --git a/app/Http/Controllers/Admin/Update/CopyFilesController.php b/app/Http/Controllers/Admin/Update/CopyFilesController.php deleted file mode 100644 index bde6b54b..00000000 --- a/app/Http/Controllers/Admin/Update/CopyFilesController.php +++ /dev/null @@ -1,37 +0,0 @@ -user()) || (! $request->user()->isOwner())) { - return response()->json([ - 'success' => false, - 'message' => 'You are not allowed to update this app.', - ], 401); - } - - $request->validate([ - 'path' => 'required', - ]); - - $path = Updater::copyFiles($request->path); - - return response()->json([ - 'success' => true, - 'path' => $path, - ]); - } -} diff --git a/app/Http/Controllers/Admin/Update/DeleteFilesController.php b/app/Http/Controllers/Admin/Update/DeleteFilesController.php deleted file mode 100644 index ca37a9e3..00000000 --- a/app/Http/Controllers/Admin/Update/DeleteFilesController.php +++ /dev/null @@ -1,34 +0,0 @@ -user()) || (! $request->user()->isOwner())) { - return response()->json([ - 'success' => false, - 'message' => 'You are not allowed to update this app.', - ], 401); - } - - if (isset($request->deleted_files) && ! empty($request->deleted_files)) { - Updater::deleteFiles($request->deleted_files); - } - - return response()->json([ - 'success' => true, - ]); - } -} diff --git a/app/Http/Controllers/Admin/Update/DownloadUpdateController.php b/app/Http/Controllers/Admin/Update/DownloadUpdateController.php deleted file mode 100644 index 7ce1185f..00000000 --- a/app/Http/Controllers/Admin/Update/DownloadUpdateController.php +++ /dev/null @@ -1,37 +0,0 @@ -user()) || (! $request->user()->isOwner())) { - return response()->json([ - 'success' => false, - 'message' => 'You are not allowed to update this app.', - ], 401); - } - - $request->validate([ - 'version' => 'required', - ]); - - $path = Updater::download($request->version); - - return response()->json([ - 'success' => true, - 'path' => $path, - ]); - } -} diff --git a/app/Http/Controllers/Admin/Update/FinishUpdateController.php b/app/Http/Controllers/Admin/Update/FinishUpdateController.php deleted file mode 100644 index 3d3935b4..00000000 --- a/app/Http/Controllers/Admin/Update/FinishUpdateController.php +++ /dev/null @@ -1,35 +0,0 @@ -user()) || (! $request->user()->isOwner())) { - return response()->json([ - 'success' => false, - 'message' => 'You are not allowed to update this app.', - ], 401); - } - - $request->validate([ - 'installed' => 'required', - 'version' => 'required', - ]); - - $json = Updater::finishUpdate($request->installed, $request->version); - - return response()->json($json); - } -} diff --git a/app/Http/Controllers/Admin/Update/MigrateUpdateController.php b/app/Http/Controllers/Admin/Update/MigrateUpdateController.php deleted file mode 100644 index 380a0152..00000000 --- a/app/Http/Controllers/Admin/Update/MigrateUpdateController.php +++ /dev/null @@ -1,32 +0,0 @@ -user()) || (! $request->user()->isOwner())) { - return response()->json([ - 'success' => false, - 'message' => 'You are not allowed to update this app.', - ], 401); - } - - Updater::migrateUpdate(); - - return response()->json([ - 'success' => true, - ]); - } -} diff --git a/app/Http/Controllers/Admin/Update/UnzipUpdateController.php b/app/Http/Controllers/Admin/Update/UnzipUpdateController.php deleted file mode 100644 index 649158de..00000000 --- a/app/Http/Controllers/Admin/Update/UnzipUpdateController.php +++ /dev/null @@ -1,44 +0,0 @@ -user()) || (! $request->user()->isOwner())) { - return response()->json([ - 'success' => false, - 'message' => 'You are not allowed to update this app.', - ], 401); - } - - $request->validate([ - 'path' => 'required', - ]); - - try { - $path = Updater::unzip($request->path); - - return response()->json([ - 'success' => true, - 'path' => $path, - ]); - } catch (\Exception $e) { - return response()->json([ - 'success' => false, - 'error' => $e->getMessage(), - ], 500); - } - } -} diff --git a/app/Http/Controllers/Admin/Update/UpdateController.php b/app/Http/Controllers/Admin/Update/UpdateController.php index c71cf202..b8db2ff1 100644 --- a/app/Http/Controllers/Admin/Update/UpdateController.php +++ b/app/Http/Controllers/Admin/Update/UpdateController.php @@ -3,42 +3,47 @@ namespace App\Http\Controllers\Admin\Update; use App\Http\Controllers\Controller; -use App\Models\Setting; use App\Services\Update\Updater; +use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; +use Illuminate\Support\Facades\File; class UpdateController extends Controller { - public function download(Request $request) + public function checkVersion(Request $request): JsonResponse { - $this->authorize('manage update app'); + $this->ensureOwner($request); - $request->validate([ - 'version' => 'required', - ]); + set_time_limit(600); - $path = Updater::download($request->version); + $channel = $request->get('channel', 'stable'); + $version = preg_replace('~[\r\n]+~', '', File::get(base_path('version.md'))); + + return response()->json(Updater::checkForUpdate($version, $channel)); + } + + public function download(Request $request): JsonResponse + { + $this->ensureOwner($request); + + $request->validate(['version' => 'required']); return response()->json([ 'success' => true, - 'path' => $path, + 'path' => Updater::download($request->version), ]); } - public function unzip(Request $request) + public function unzip(Request $request): JsonResponse { - $this->authorize('manage update app'); + $this->ensureOwner($request); - $request->validate([ - 'path' => 'required', - ]); + $request->validate(['path' => 'required']); try { - $path = Updater::unzip($request->path); - return response()->json([ 'success' => true, - 'path' => $path, + 'path' => Updater::unzip($request->path), ]); } catch (\Exception $e) { return response()->json([ @@ -48,55 +53,54 @@ class UpdateController extends Controller } } - public function copyFiles(Request $request) + public function copy(Request $request): JsonResponse { - $this->authorize('manage update app'); + $this->ensureOwner($request); - $request->validate([ - 'path' => 'required', - ]); - - $path = Updater::copyFiles($request->path); + $request->validate(['path' => 'required']); return response()->json([ 'success' => true, - 'path' => $path, + 'path' => Updater::copyFiles($request->path), ]); } - public function migrate(Request $request) + public function delete(Request $request): JsonResponse { - $this->authorize('manage update app'); + $this->ensureOwner($request); + + if (isset($request->deleted_files) && ! empty($request->deleted_files)) { + Updater::deleteFiles($request->deleted_files); + } + + return response()->json(['success' => true]); + } + + public function migrate(Request $request): JsonResponse + { + $this->ensureOwner($request); Updater::migrateUpdate(); - return response()->json([ - 'success' => true, - ]); + return response()->json(['success' => true]); } - public function finishUpdate(Request $request) + public function finish(Request $request): JsonResponse { - $this->authorize('manage update app'); + $this->ensureOwner($request); $request->validate([ 'installed' => 'required', 'version' => 'required', ]); - $json = Updater::finishUpdate($request->installed, $request->version); - - return response()->json($json); + return response()->json(Updater::finishUpdate($request->installed, $request->version)); } - public function checkLatestVersion(Request $request) + private function ensureOwner(Request $request): void { - $this->authorize('manage update app'); - - set_time_limit(600); // 10 minutes - - $json = Updater::checkForUpdate(Setting::getSetting('version')); - - return response()->json($json); + if (! $request->user() || ! $request->user()->isOwner()) { + abort(401, 'You are not allowed to update this app.'); + } } } diff --git a/routes/api.php b/routes/api.php index 6bebd1c8..33e76b0c 100644 --- a/routes/api.php +++ b/routes/api.php @@ -9,13 +9,7 @@ use App\Http\Controllers\Admin\Settings\DiskController; use App\Http\Controllers\Admin\Settings\MailConfigurationController; use App\Http\Controllers\Admin\Settings\PDFConfigurationController; use App\Http\Controllers\Admin\Settings\SettingsController; -use App\Http\Controllers\Admin\Update\CheckVersionController; -use App\Http\Controllers\Admin\Update\CopyFilesController; -use App\Http\Controllers\Admin\Update\DeleteFilesController; -use App\Http\Controllers\Admin\Update\DownloadUpdateController; -use App\Http\Controllers\Admin\Update\FinishUpdateController; -use App\Http\Controllers\Admin\Update\MigrateUpdateController; -use App\Http\Controllers\Admin\Update\UnzipUpdateController; +use App\Http\Controllers\Admin\Update\UpdateController; use App\Http\Controllers\AppVersionController; use App\Http\Controllers\Company\Auth\AuthController; use App\Http\Controllers\Company\Auth\ForgotPasswordController; @@ -413,19 +407,13 @@ Route::prefix('/v1')->group(function () { // Self Update // ---------------------------------- - Route::get('/check/update', CheckVersionController::class); - - Route::post('/update/download', DownloadUpdateController::class); - - Route::post('/update/unzip', UnzipUpdateController::class); - - Route::post('/update/copy', CopyFilesController::class); - - Route::post('/update/delete', DeleteFilesController::class); - - Route::post('/update/migrate', MigrateUpdateController::class); - - Route::post('/update/finish', FinishUpdateController::class); + Route::get('/check/update', [UpdateController::class, 'checkVersion']); + Route::post('/update/download', [UpdateController::class, 'download']); + Route::post('/update/unzip', [UpdateController::class, 'unzip']); + Route::post('/update/copy', [UpdateController::class, 'copy']); + Route::post('/update/delete', [UpdateController::class, 'delete']); + Route::post('/update/migrate', [UpdateController::class, 'migrate']); + Route::post('/update/finish', [UpdateController::class, 'finish']); // Companies // -------------------------------------------------