From a36802bd8299a12906cf3b984f04c8c2d56550ec Mon Sep 17 00:00:00 2001 From: pbao9 Date: Tue, 10 Feb 2026 17:27:10 +0700 Subject: [PATCH] udpate --- app/Http/Kernel.php | 4 +- app/Http/Middleware/ApiAuthCheck.php | 33 +++ app/Http/Middleware/ForceJsonResponse.php | 23 ++ app/Providers/RouteServiceProvider.php | 12 +- .../components/module/datacenter.blade.php | 220 +++++++++--------- .../components/module/v-center.blade.php | 12 +- routes/api.php | 9 +- routes/client.php | 21 ++ 8 files changed, 208 insertions(+), 126 deletions(-) create mode 100644 app/Http/Middleware/ApiAuthCheck.php create mode 100644 app/Http/Middleware/ForceJsonResponse.php create mode 100644 routes/client.php diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index c8e1d46..2fc5c3d 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -68,6 +68,8 @@ class Kernel extends HttpKernel 'ability' => \Laravel\Sanctum\Http\Middleware\CheckForAnyAbility::class, 'CustomerLoginCheck' => \App\Http\Middleware\CustomerLoginCheck::class, 'IsLoginCheck' => \App\Http\Middleware\IsLoginCheck::class, - 'Staff' => \App\Http\Middleware\StaffCheck::class + 'Staff' => \App\Http\Middleware\StaffCheck::class, + 'json.response' => \App\Http\Middleware\ForceJsonResponse::class, + 'api.auth' => \App\Http\Middleware\ApiAuthCheck::class, ]; } diff --git a/app/Http/Middleware/ApiAuthCheck.php b/app/Http/Middleware/ApiAuthCheck.php new file mode 100644 index 0000000..db2ca19 --- /dev/null +++ b/app/Http/Middleware/ApiAuthCheck.php @@ -0,0 +1,33 @@ +check()) { + return response()->json([ + 'error' => true, + 'message' => 'Unauthorized. Access Denied.', + 'data' => [], + 'code' => 401 + ], 401); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/ForceJsonResponse.php b/app/Http/Middleware/ForceJsonResponse.php new file mode 100644 index 0000000..c33c139 --- /dev/null +++ b/app/Http/Middleware/ForceJsonResponse.php @@ -0,0 +1,23 @@ +headers->set('Accept', 'application/json'); + + return $next($request); + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 0010e15..b8fa873 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -38,11 +38,19 @@ class RouteServiceProvider extends ServiceProvider $this->configureRateLimiting(); $this->routes(function () { - Route::domain('api-agency.tgs.com.vn') - ->middleware('api') + // 1. Agency API (Domain riêng, dùng routes/client.php) + Route::domain('api-agency.tgs.com.vn.test') + ->middleware(['api', 'json.response']) + ->namespace($this->namespace) + ->group(base_path('routes/client.php')); + + // 2. System API (Dùng cho portal.test/api/..., dùng routes/api.php) + Route::prefix('api') + ->middleware(['api', 'json.response']) ->namespace($this->namespace) ->group(base_path('routes/api.php')); + // 3. Web & Admin routes Route::middleware('web') ->namespace($this->namespace) ->group(base_path('routes/web.php')); diff --git a/resources/views/components/module/datacenter.blade.php b/resources/views/components/module/datacenter.blade.php index e829762..17360da 100644 --- a/resources/views/components/module/datacenter.blade.php +++ b/resources/views/components/module/datacenter.blade.php @@ -1,130 +1,130 @@ @php - $selectedDatacenterId = old('module_datacenter_id'); +$selectedDatacenterId = old('module_datacenter_id'); - if (!$selectedDatacenterId && $model) { - if ($model instanceof \App\Models\ModuleDatacenter) { - $selectedDatacenterId = $model->id; - } elseif ($model instanceof \App\Models\ModuleHost || $model instanceof \App\Models\ModuleFolder) { - $selectedDatacenterId = $model->module_datacenter_id; - } elseif ($model instanceof \App\Models\ModuleDatastore || $model instanceof \App\Models\ModuleNetwork) { - $selectedDatacenterId = $model->host?->module_datacenter_id; - } elseif ($model instanceof \App\Models\ModuleIpAddress) { - $selectedDatacenterId = $model->host?->module_datacenter_id; - } elseif (isset($model->module_datacenter_id)) { - $selectedDatacenterId = $model->module_datacenter_id; - } elseif (method_exists($model, 'host') && $model->host) { - $selectedDatacenterId = $model->host->module_datacenter_id; - } +if (!$selectedDatacenterId && $model) { + if ($model instanceof \App\Models\ModuleDatacenter) { + $selectedDatacenterId = $model->id; + } elseif ($model instanceof \App\Models\ModuleHost || $model instanceof \App\Models\ModuleFolder) { + $selectedDatacenterId = $model->module_datacenter_id; + } elseif ($model instanceof \App\Models\ModuleDatastore || $model instanceof \App\Models\ModuleNetwork) { + $selectedDatacenterId = $model->host?->module_datacenter_id; + } elseif ($model instanceof \App\Models\ModuleIpAddress) { + $selectedDatacenterId = $model->host?->module_datacenter_id; + } elseif (isset($model->module_datacenter_id)) { + $selectedDatacenterId = $model->module_datacenter_id; + } elseif (method_exists($model, 'host') && $model->host) { + $selectedDatacenterId = $model->host->module_datacenter_id; } +} @endphp -
- -
- -
+
+ +
+
- - @push('custom-scripts') - - @endpush \ No newline at end of file + + // Initial load logic + const selectedDatacenterId = $datacenter.data('selected'); + if ($vcenter.val() && selectedDatacenterId) { + debounceLoadDatacenters($vcenter.val(), selectedDatacenterId); + } else if ($vcenter.val()) { + // If only vcenter is selected, load datacenters without preselection + debounceLoadDatacenters($vcenter.val()); + } + }); + +@endpush \ No newline at end of file diff --git a/resources/views/components/module/v-center.blade.php b/resources/views/components/module/v-center.blade.php index 8502ba5..cdbda1c 100644 --- a/resources/views/components/module/v-center.blade.php +++ b/resources/views/components/module/v-center.blade.php @@ -1,9 +1,9 @@ @php - $selectedVcenterId = old('vcenter_id') ?? - ($model?->host?->datacenter?->vcenter_id ?? ( - $model?->ipaddress?->host?->datacenter?->vcenter?->id ?? - $model?->vcenter_id ?? null - )); +$selectedVcenterId = old('vcenter_id') ?? + ($model?->host?->datacenter?->vcenter_id ?? ( + $model?->ipaddress?->host?->datacenter?->vcenter?->id ?? + $model?->vcenter_id ?? null + )); @endphp
@@ -64,5 +64,5 @@ if ($datacenter.is('select')) $datacenter.prop('disabled', false); } }); - + @endpush \ No newline at end of file diff --git a/routes/api.php b/routes/api.php index 0a45ee8..e280c27 100644 --- a/routes/api.php +++ b/routes/api.php @@ -44,12 +44,11 @@ use Illuminate\Support\Str; | is assigned the "api" middleware group. Enjoy building your API! | */ -Route::get('/', fn() => response()->json(['api' => 'ok'])); Route::prefix('v1') /* Api for Admin */ ->group(function () { - Route::prefix('system')->middleware(['auth:sanctum'])->group(function () { + Route::prefix('system')->middleware(['api.auth'])->group(function () { Route::controller(ModuleController::class)->group(function () { Route::get('get-list-vcenter', 'getVCenter')->name('api.getVCenter'); Route::get('get-list-datacenter', 'getDatacenter')->name('api.getDatacenter'); @@ -60,10 +59,6 @@ Route::prefix('v1') Route::get('get-list-version-os', 'getOsServerVersion')->name('api.getVersion'); Route::get('get-list-os-group', 'getOsGroup')->name('api.getOsGroup'); }); - Route::get('test-ssh-connection', function (ServiceVCenter $serviceVCenter) { - Log::info('🧪 API Test SSH Connection - Starting test via route'); - return response()->json($serviceVCenter->testSSHConnection()); - })->name('api.testSSHConnection'); Route::post('rebuild-vps', [\App\Http\Controllers\Api\VpsActionController::class, 'rebuildVps']) ->name('api.system.rebuildVps'); @@ -463,7 +458,7 @@ Route::prefix('v1') }) /* Api for customer */ ->group(function () { - Route::middleware(['auth:sanctum']) + Route::middleware(['api.auth']) ->group(function () { Route::post('get-status-virtual-machine', function (Request $request, ServiceVCenter $serviceVCenter) { $vmware_id = $request->vmware_id; diff --git a/routes/client.php b/routes/client.php new file mode 100644 index 0000000..0df97cb --- /dev/null +++ b/routes/client.php @@ -0,0 +1,21 @@ +group(function () { + Route::get('get-list-product', function () { + return response()->json([ + 'error' => false, + 'data' => Product::all() + ]); + })->name('api.user.GetListProduct'); +}); + +Route::any('{any}', function () { + return response()->json([ + 'error' => true, + 'message' => 'API Route not found' + ], 404); +})->where('any', '.*'); \ No newline at end of file