refs #1204 Fix missing comprobations in update subnet
testing/og-dhcp-API/pipeline/head There was a failure building this commit Details

ogdhcp-log
Luis Gerardo Romero Garcia 2025-01-13 11:32:31 +01:00
parent 24ddbead96
commit 394a71134c
1 changed files with 48 additions and 15 deletions

View File

@ -904,14 +904,15 @@ public function addDhcpSubnet(Request $request): JsonResponse
* )
* )
*/
public function modifyDhcpSubnet(Request $request): JsonResponse
{
$subnetId = (int) $request->get('subnetId');
$operation = 'modifyDhcpSubnet';
$component = 'ogdhcp';
$subnetId = (int) $request->get('subnetId');
try {
$input = json_decode($request->getContent(), false);
$input = json_decode($request->getContent());
$mask = htmlspecialchars($input->mask);
$address = htmlspecialchars($input->address);
@ -935,7 +936,6 @@ public function modifyDhcpSubnet(Request $request): JsonResponse
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
return new JsonResponse(['error' => "Falta un parámetro requerido: $paramFaltante"], Response::HTTP_BAD_REQUEST);
}
$this->logger->error(json_encode([
'severity' => 'ERROR',
'operation' => $operation,
@ -983,7 +983,7 @@ public function modifyDhcpSubnet(Request $request): JsonResponse
$newSubnet = [
"id" => $subnetId,
"subnet" => $subnetName,
"reservations" => $existingSubnet['reservations'],
"reservations" => $existingSubnet['reservations'], // Mantener las reservas existentes
"option-data" => [
[
"name" => "routers",
@ -993,15 +993,38 @@ public function modifyDhcpSubnet(Request $request): JsonResponse
]
];
// Añadir next-server si está presente, o eliminarlo de las reservas si no está
if ($nextServer) {
$newSubnet["next-server"] = $nextServer;
} else {
foreach ($newSubnet['reservations'] as &$reservation) {
unset($reservation['next-server']);
}
}
// Añadir boot-file-name si está presente, o eliminarlo de las reservas si no está
if ($bootFileName) {
$newSubnet["boot-file-name"] = $bootFileName;
} else {
foreach ($newSubnet['reservations'] as &$reservation) {
unset($reservation['boot-file-name']);
}
}
// Actualizar las reservas con los nuevos valores de next-server y boot-file-name
foreach ($newSubnet['reservations'] as &$reservation) {
if ($nextServer) {
$reservation['next-server'] = $nextServer;
}
if ($bootFileName) {
$reservation['boot-file-name'] = $bootFileName;
}
}
// Reemplazar la subred en la configuración
$response[0]['arguments']['Dhcp4']['subnet4'][$subnetIndex] = $newSubnet;
// Eliminar el campo 'hash' si existe
if (isset($response[0]['arguments']['hash'])) {
unset($response[0]['arguments']['hash']);
}
@ -1025,16 +1048,27 @@ public function modifyDhcpSubnet(Request $request): JsonResponse
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
return new JsonResponse(['error' => $errorText], Response::HTTP_BAD_REQUEST);
} else {
$responseSuccess = "Subred modificada correctamente";
$this->logger->info(json_encode([
'severity' => 'INFO',
'operation' => $operation,
'component' => $component,
'http_code' => Response::HTTP_OK,
'desc' => $responseSuccess,
'params' => ['subnet_id' => $subnetId]
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
return new JsonResponse(['success' => $responseSuccess], Response::HTTP_OK);
$responseWrite = $this->curlKeaService->executeCurlCommand('config-write', $configuration);
if ($responseWrite == false || $responseWrite[0]["result"] != 0) {
return new JsonResponse(['error' => "Error al escribir en la configuración en Kea DHCP: " . $responseWrite[0]["text"]], 400);
} else {
// Volvemos a consultar la configuración para devolver la subred modificada
$updatedResponse = $this->curlKeaService->executeCurlCommand('config-get');
$updatedSubnet = array_filter($updatedResponse[0]['arguments']['Dhcp4']['subnet4'], function ($subnet) use ($subnetId) {
return $subnet['id'] == $subnetId;
});
$responseSuccess = "Subred modificada correctamente";
$this->logger->info(json_encode([
'severity' => 'INFO',
'operation' => $operation,
'component' => $component,
'http_code' => Response::HTTP_OK,
'desc' => $responseSuccess,
'params' => ['subnet_id' => $subnetId]
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
return new JsonResponse(['success' => $responseSuccess], Response::HTTP_OK);
}
}
} else {
$errorText = "Error configuración de Kea inválida: " . $responseTest[0]["text"];
@ -1062,7 +1096,6 @@ public function modifyDhcpSubnet(Request $request): JsonResponse
/**
* @OA\Get(