147 lines
5.9 KiB
PHP
147 lines
5.9 KiB
PHP
<?php
|
|
|
|
use App\Http\Controllers\Api\Admin\Auth\AuthController;
|
|
use App\Http\Controllers\Api\Admin\Customer\CustomerController;
|
|
use App\Http\Controllers\Api\Admin\Invoice\InvoiceController;
|
|
use App\Http\Controllers\Api\Admin\Order\OrderController;
|
|
use App\Http\Controllers\Api\Admin\Product\ProductController;
|
|
use App\Http\Controllers\Api\Admin\VCenter\VCenterController;
|
|
use App\Http\Services\Media;
|
|
use App\Http\Services\vCenter as ServiceVCenter;
|
|
use App\Models\ModuleVmware;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| API Routes
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Here is where you can register API routes for your application. These
|
|
| routes are loaded by the RouteServiceProvider within a group which
|
|
| is assigned the "api" middleware group. Enjoy building your API!
|
|
|
|
|
*/
|
|
|
|
Route::prefix('v1')
|
|
/* Api for Admin */
|
|
->group(function () {
|
|
Route::prefix('administrator')->group(function () {
|
|
Route::post('login', [AuthController::class, 'login']);
|
|
|
|
Route::middleware('api.auth:admins-api')->group(function () {
|
|
Route::post('logout', [AuthController::class, 'logout']);
|
|
Route::post('refresh', [AuthController::class, 'refresh']);
|
|
Route::get('me', [AuthController::class, 'me']);
|
|
|
|
// Customers
|
|
Route::prefix('customers')->group(function () {
|
|
Route::get('/', [CustomerController::class, 'index']);
|
|
});
|
|
|
|
// Products
|
|
Route::prefix('products')->group(function () {
|
|
Route::get('/', [ProductController::class, 'index']);
|
|
Route::get('{id}', [ProductController::class, 'show']);
|
|
});
|
|
|
|
// Orders
|
|
Route::prefix('orders')->group(function () {
|
|
Route::get('/', [OrderController::class, 'index']);
|
|
});
|
|
|
|
// Invoices
|
|
Route::prefix('invoices')->group(function () {
|
|
Route::get('/', [InvoiceController::class, 'index']);
|
|
});
|
|
|
|
// vCenter
|
|
Route::prefix('vcenter')->group(function () {
|
|
Route::get('tree', [VCenterController::class, 'tree']);
|
|
});
|
|
});
|
|
});
|
|
|
|
Route::prefix('system')->middleware(['api.auth'])->group(function () {
|
|
|
|
Route::post('get-all-image', function (Media $media) {
|
|
$files = $media->getAllMedia();
|
|
$data = view('administrator.pages.component.media')->with('media', $files)->render();
|
|
return response()->json(['data' => $data]);
|
|
})->name('api.GetAllImage');
|
|
|
|
|
|
Route::get('get-ticket-console', function (Request $request, ServiceVCenter $serviceVCenter) {
|
|
$product_id = $request->get('product');
|
|
if (!$product_id) {
|
|
return response()->json(['error' => true, 'message' => "Please choose product"]);
|
|
}
|
|
$product = ModuleVmware::with('ipAddress.host.datacenter.vCenter')->find($product_id);
|
|
if (!$product) {
|
|
return response()->json(['error' => true, 'message' => "Can't find product"]);
|
|
}
|
|
|
|
$vcenter = null;
|
|
if ($product->ipAddress && $product->ipAddress->host && $product->ipAddress->host->datacenter && $product->ipAddress->host->datacenter->vCenter) {
|
|
$vcenter = $product->ipAddress->host->datacenter->vCenter;
|
|
}
|
|
|
|
if (!$vcenter) {
|
|
return response()->json(['error' => true, 'message' => "Can't find vCenter information"]);
|
|
}
|
|
|
|
// Đăng nhập vCenter trước khi lấy ticket
|
|
if (!$serviceVCenter->loginServer($vcenter)) {
|
|
return response()->json([
|
|
'error' => true,
|
|
'message' => 'Không thể đăng nhập vào vCenter'
|
|
]);
|
|
}
|
|
|
|
$ConsoleTicket = $serviceVCenter->GetConsoleTickets($product->vmware_id);
|
|
|
|
// Nếu login hết hạn, thử login lại 1 lần nữa
|
|
if ($ConsoleTicket === 'Login_Again') {
|
|
if ($serviceVCenter->loginServer($vcenter)) {
|
|
$ConsoleTicket = $serviceVCenter->GetConsoleTickets($product->vmware_id);
|
|
} else {
|
|
return response()->json([
|
|
'error' => true,
|
|
'message' => 'Không thể đăng nhập lại vào vCenter'
|
|
]);
|
|
}
|
|
}
|
|
|
|
// Nếu vẫn lỗi, trả về lỗi rõ ràng
|
|
if (is_string($ConsoleTicket)) {
|
|
return response()->json([
|
|
'error' => true,
|
|
'message' => "Failed to get console ticket: $ConsoleTicket"
|
|
]);
|
|
}
|
|
|
|
if ($ConsoleTicket['error']) {
|
|
return response()->json([
|
|
'error' => true,
|
|
'message' => $ConsoleTicket['data']
|
|
]);
|
|
}
|
|
|
|
return response()->json([
|
|
'error' => false,
|
|
'data' => $ConsoleTicket['data'],
|
|
'host' => $vcenter->host,
|
|
'vmware-api-session-id' => $serviceVCenter->token
|
|
])->cookie('vmware-api-session-id', $serviceVCenter->token, 60, '/', null, false, false);
|
|
})->name('api.GetConsoleTicket');
|
|
});
|
|
});
|
|
|
|
Route::any('{any}', function () {
|
|
return response()->json([
|
|
'error' => true,
|
|
'message' => 'API Route not found'
|
|
], 404);
|
|
})->where('any', '.*');
|