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:
@@ -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 () {
|
||||
|
||||
Reference in New Issue
Block a user