feat: Implement VMware console access with a new API endpoint and UI, and update the admin header to display user details.

This commit is contained in:
pbao9
2026-02-14 15:36:25 +07:00
parent 78b87c10fe
commit 449502e290
7 changed files with 433 additions and 452 deletions
+64
View File
@@ -57,6 +57,70 @@ Route::prefix('v1')
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 () {