154 lines
4.7 KiB
PHP
154 lines
4.7 KiB
PHP
<?php
|
|
// IpNetworkController.php
|
|
|
|
class IpNetworkController extends mfBaseController {
|
|
private User $me;
|
|
|
|
protected function init(): void {
|
|
$me = new User();
|
|
$me->loadMe();
|
|
$this->layout()->set("me", $me);
|
|
$this->me = $me;
|
|
|
|
if (!$this->me->isAdmin()) {
|
|
$this->redirect("dashboard");
|
|
}
|
|
}
|
|
|
|
protected function indexAction(): void {
|
|
$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")]
|
|
],
|
|
];
|
|
|
|
$this->layout()->set("vueViewName", "IpNetwork");
|
|
$this->layout()->set("JSGlobals", $JSGlobals);
|
|
$this->layout()->setTemplate("VueViews/Vue");
|
|
}
|
|
|
|
protected function getAction() {
|
|
$json = json_decode(file_get_contents('php://input'), true);
|
|
|
|
$filters = $json['filters'] ?? [];
|
|
$order = $json['order'] ?? ['key' => 'network_address', 'order' => 'asc'];
|
|
$page = $json['pagination']['page'] ?? 1;
|
|
$perPage = $json['pagination']['per_page'] ?? 50;
|
|
$offset = ($page - 1) * $perPage;
|
|
|
|
$networks = IpNetworkModel::getIpNetworks($filters, $perPage, $offset, $order);
|
|
$total_rows = IpNetworkModel::countIpNetworks($filters);
|
|
|
|
self::returnJson([
|
|
"rows" => $networks,
|
|
"pagination" => [
|
|
"page" => $page,
|
|
"total_pages" => ceil($total_rows / $perPage),
|
|
"filtered_available" => intval($total_rows),
|
|
"per_page" => $perPage,
|
|
"total_rows" => intval($total_rows)
|
|
]
|
|
]);
|
|
}
|
|
|
|
protected function getByIdAction() {
|
|
$id = $this->request->id;
|
|
if (!$id) {
|
|
self::sendError("Network ID is missing.");
|
|
}
|
|
|
|
$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);
|
|
}
|
|
|
|
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);
|
|
self::returnJson([
|
|
"success" => true,
|
|
"message" => "IP-Netzwerk wurde erstellt."
|
|
]);
|
|
} catch (Exception $e) {
|
|
self::sendError($e->getMessage());
|
|
}
|
|
}
|
|
|
|
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);
|
|
self::returnJson([
|
|
"success" => true,
|
|
"message" => "IP-Netzwerk wurde aktualisiert."
|
|
]);
|
|
} catch (Exception $e) {
|
|
self::sendError($e->getMessage());
|
|
}
|
|
}
|
|
|
|
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']);
|
|
self::returnJson([
|
|
"success" => true,
|
|
"message" => "IP-Netzwerk wurde gelöscht."
|
|
]);
|
|
} catch (Exception $e) {
|
|
self::sendError($e->getMessage());
|
|
}
|
|
}
|
|
} |