ipnetwork v2 update
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
<?php
|
||||
// IpNetworkController.php
|
||||
|
||||
class IpNetworkController extends mfBaseController {
|
||||
private User $me;
|
||||
|
||||
|
||||
protected function init(): void {
|
||||
$me = new User();
|
||||
$me->loadMe();
|
||||
@@ -16,15 +16,14 @@ class IpNetworkController extends mfBaseController {
|
||||
}
|
||||
|
||||
protected function indexAction(): void {
|
||||
$JSGlobals = ["BASE_URL" => self::getUrl("IpNetwork"),
|
||||
"DASHBOARD_URL" => self::getUrl("Dashboard"),
|
||||
"MFAPPNAME" => MFAPPNAME_SLUG,
|
||||
$JSGlobals = [
|
||||
"BASE_URL" => self::getUrl("IpNetwork"),
|
||||
"API_BASE_URL" => self::getUrl("IpNetwork"),
|
||||
"PAGE_TITLE" => "IPAM",
|
||||
"PATH" => [
|
||||
["text" => MFAPPNAME_SLUG, "href" => self::getUrl("Dashboard")],
|
||||
["text" => "IPAM", "href" => self::getUrl("IpNetwork")]
|
||||
],
|
||||
"IPNETWORK_API_URL" => self::getUrl("IpNetwork/api"),
|
||||
];
|
||||
|
||||
$this->layout()->set("vueViewName", "IpNetwork");
|
||||
@@ -32,187 +31,124 @@ class IpNetworkController extends mfBaseController {
|
||||
$this->layout()->setTemplate("VueViews/Vue");
|
||||
}
|
||||
|
||||
protected function apiAction() {
|
||||
$do = $this->request->do;
|
||||
|
||||
if (!$this->me->isAdmin()) {
|
||||
$this->redirect("dashboard");
|
||||
}
|
||||
|
||||
switch ($do) {
|
||||
case "get":
|
||||
$return = $this->get();
|
||||
break;
|
||||
case "getById":
|
||||
$return = $this->getById();
|
||||
break;
|
||||
case "create":
|
||||
$return = $this->create();
|
||||
break;
|
||||
case "update":
|
||||
$return = $this->update();
|
||||
break;
|
||||
case "delete":
|
||||
$return = $this->delete();
|
||||
break;
|
||||
default:
|
||||
$return = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!$return) {
|
||||
$return = [
|
||||
"status" => "error",
|
||||
"message" => "Invalid request."
|
||||
];
|
||||
}
|
||||
|
||||
header('Content-Type: application/json');
|
||||
die(json_encode($return));
|
||||
}
|
||||
|
||||
private function aggregateChildren($network, &$childrenCount) {
|
||||
$children = IpNetworkModel::getChildren($network->id);
|
||||
|
||||
foreach ($children as $child) {
|
||||
$childrenCount++;
|
||||
if ($child->cidr !== 32) {
|
||||
$this->aggregateChildren($child, $childrenCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function get(): array {
|
||||
protected function getAction() {
|
||||
$json = json_decode(file_get_contents('php://input'), true);
|
||||
|
||||
$filters = $json['filters'] ?? [];
|
||||
$order = $json['order'] ?? [];
|
||||
$order = $json['order'] ?? ['key' => 'network_address', 'order' => 'asc'];
|
||||
$page = $json['pagination']['page'] ?? 1;
|
||||
$perPage = $json['pagination']['per_page'] ?? 10;
|
||||
$perPage = $json['pagination']['per_page'] ?? 50;
|
||||
$offset = ($page - 1) * $perPage;
|
||||
|
||||
$orderChildren = false;
|
||||
$networks = IpNetworkModel::getIpNetworks($filters, $perPage, $offset, $order);
|
||||
$total_rows = IpNetworkModel::countIpNetworks($filters);
|
||||
|
||||
if ($order['key'] === 'network_address_str') {
|
||||
$order['key'] = 'network_address';
|
||||
} else if ($order['key'] === 'children') {
|
||||
$orderChildren = $order['order'];
|
||||
$order = null;
|
||||
}
|
||||
|
||||
$networks = IpNetworkModel::getIpNetworks($filters, null, $perPage * $page - $perPage, $order);
|
||||
$total_rows = IpNetworkModel::countIpNetworks([
|
||||
"parent_network_id" => $filters['parent_network_id'] ?? ''
|
||||
]);
|
||||
|
||||
$processedNetworks = [];
|
||||
|
||||
foreach ($networks as $network) {
|
||||
$childrenCount = 0;
|
||||
$this->aggregateChildren($network, $childrenCount);
|
||||
|
||||
$from = $filters['children']['from'] ?? null;
|
||||
$to = $filters['children']['to'] ?? null;
|
||||
|
||||
if (($from !== null && $childrenCount < $from) || ($to !== null && $childrenCount > $to)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$network->children = $childrenCount;
|
||||
$processedNetworks[] = $network;
|
||||
}
|
||||
|
||||
if ($orderChildren) {
|
||||
usort($processedNetworks, function ($a, $b) use ($orderChildren) {
|
||||
if ($orderChildren === 'asc') {
|
||||
return $a->children <=> $b->children;
|
||||
} else {
|
||||
return $b->children <=> $a->children;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return [
|
||||
"rows" => array_slice($processedNetworks, $perPage * $page - $perPage, $perPage),
|
||||
self::returnJson([
|
||||
"rows" => $networks,
|
||||
"pagination" => [
|
||||
"page" => $page,
|
||||
"total_pages" => ceil(count($processedNetworks) / $perPage),
|
||||
"filtered_available" => count($processedNetworks),
|
||||
"total_pages" => ceil($total_rows / $perPage),
|
||||
"filtered_available" => intval($total_rows),
|
||||
"per_page" => $perPage,
|
||||
"total_rows" => intval($total_rows)
|
||||
]
|
||||
];
|
||||
|
||||
]);
|
||||
}
|
||||
|
||||
private function getById(): array {
|
||||
$json = json_decode(file_get_contents('php://input'), true);
|
||||
|
||||
$network = IpNetworkModel::getById($json['id']);
|
||||
|
||||
if ($network === null) {
|
||||
return [
|
||||
"status" => "error",
|
||||
"message" => "Network not found."
|
||||
];
|
||||
protected function getByIdAction() {
|
||||
$id = $this->request->id;
|
||||
if (!$id) {
|
||||
self::sendError("Network ID is missing.");
|
||||
}
|
||||
|
||||
return [
|
||||
"status" => "success",
|
||||
"network" => $network
|
||||
];
|
||||
$network = IpNetworkModel::getById($id);
|
||||
|
||||
if ($network === null) {
|
||||
self::sendError("Network not found.");
|
||||
}
|
||||
|
||||
self::returnJson(["success" => true, "network" => $network]);
|
||||
}
|
||||
|
||||
protected function globalSearchAction() {
|
||||
$query = $this->request->q ?? '';
|
||||
if (strlen($query) < 2) {
|
||||
self::returnJson([]);
|
||||
return;
|
||||
}
|
||||
$suggestions = IpNetworkModel::findSuggestions($query);
|
||||
self::returnJson($suggestions);
|
||||
}
|
||||
|
||||
private function create(): array {
|
||||
protected function findNetworkByStringAction() {
|
||||
$networkString = $this->request->network_string;
|
||||
if (!$networkString) {
|
||||
self::sendError("Network string is missing.");
|
||||
}
|
||||
|
||||
$network = IpNetworkModel::findByNetworkString($networkString);
|
||||
|
||||
if ($network === null) {
|
||||
self::sendError("Network not found.");
|
||||
}
|
||||
|
||||
$navigateToId = null;
|
||||
if ($network->cidr < 31) {
|
||||
$navigateToId = $network->id;
|
||||
} else {
|
||||
$navigateToId = $network->parent_network_id;
|
||||
}
|
||||
|
||||
self::returnJson(["success" => true, "navigateToId" => $navigateToId]);
|
||||
}
|
||||
|
||||
protected function createAction() {
|
||||
$json = json_decode(file_get_contents('php://input'), true);
|
||||
|
||||
try {
|
||||
IpNetworkModel::createIpNetwork($json);
|
||||
return [
|
||||
"status" => "success",
|
||||
"message" => "IP Network created."
|
||||
];
|
||||
self::returnJson([
|
||||
"success" => true,
|
||||
"message" => "IP-Netzwerk wurde erstellt."
|
||||
]);
|
||||
} catch (Exception $e) {
|
||||
return [
|
||||
"status" => "error",
|
||||
"message" => $e->getMessage()
|
||||
];
|
||||
self::sendError($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private function update(): array {
|
||||
protected function updateAction() {
|
||||
$json = json_decode(file_get_contents('php://input'), true);
|
||||
|
||||
if (empty($json['id'])) {
|
||||
self::sendError("Netzwerk-ID fehlt.");
|
||||
}
|
||||
|
||||
try {
|
||||
IpNetworkModel::updateIpNetwork($json);
|
||||
return [
|
||||
"status" => "success",
|
||||
"message" => "IP Network updated."
|
||||
];
|
||||
self::returnJson([
|
||||
"success" => true,
|
||||
"message" => "IP-Netzwerk wurde aktualisiert."
|
||||
]);
|
||||
} catch (Exception $e) {
|
||||
return [
|
||||
"status" => "error",
|
||||
"message" => $e->getMessage()
|
||||
];
|
||||
self::sendError($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private function delete(): array {
|
||||
protected function deleteAction() {
|
||||
$json = json_decode(file_get_contents('php://input'), true);
|
||||
|
||||
if (empty($json['id'])) {
|
||||
self::sendError("Netzwerk-ID fehlt.");
|
||||
}
|
||||
|
||||
try {
|
||||
IpNetworkModel::deleteIpNetwork($json['id']);
|
||||
return [
|
||||
"status" => "success",
|
||||
"message" => "IP Network deleted."
|
||||
];
|
||||
self::returnJson([
|
||||
"success" => true,
|
||||
"message" => "IP-Netzwerk wurde gelöscht."
|
||||
]);
|
||||
} catch (Exception $e) {
|
||||
return [
|
||||
"status" => "error",
|
||||
"message" => $e->getMessage()
|
||||
];
|
||||
self::sendError($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user