From 2bf954897109fc761a6aa39bfc4479e087671200 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 11 Oct 2017 16:01:18 +0200 Subject: [dnbd3] Implement adding and deleting servers --- modules-available/dnbd3/page.inc.php | 83 +++++++++++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 2 deletions(-) (limited to 'modules-available/dnbd3/page.inc.php') diff --git a/modules-available/dnbd3/page.inc.php b/modules-available/dnbd3/page.inc.php index 213afa03..3489cc5b 100644 --- a/modules-available/dnbd3/page.inc.php +++ b/modules-available/dnbd3/page.inc.php @@ -16,6 +16,8 @@ class Page_Dnbd3 extends Page Dnbd3Util::updateServerStatus(); } elseif ($action === 'delserver') { $this->deleteServer(); + } elseif ($action === 'addserver') { + $this->addServer(); } elseif ($action === 'savelocations') { $this->saveServerLocations(); } @@ -41,6 +43,45 @@ class Page_Dnbd3 extends Page } } + private function addServer() + { + $ip = Request::post('newip', false, 'string'); + if ($ip === false) { + Message::addError('main.parameter-missing', 'ip'); + return; + } + $ip = ip2long(trim($ip)); + if ($ip !== false) { + $ip = long2ip($ip); + } + if ($ip === false) { + Message::addError('invalid-ipv4', $ip); + return; + } + $res = Database::queryFirst('SELECT serverid FROM dnbd3_server s + LEFT JOIN machine m USING (machineuuid) + WHERE s.fixedip = :ip OR m.clientip = :ip', compact('ip')); + if ($res !== false) { + Message::addError('server-already-exists', $ip); + return; + } + Database::exec('INSERT INTO dnbd3_server (fixedip) VALUES (:ip)', compact('ip')); + Message::addSuccess('server-added', $ip); + } + + private function deleteServer() + { + $server = $this->getServerById(); + if ($server['fixedip'] === '') + return; + if (!is_null($server['machineuuid'])) { + RunMode::setRunMode($server['machineuuid'], 'dnbd3', null, null, null); + } + Database::exec('DELETE FROM dnbd3_server WHERE serverid = :serverid', + array('serverid' => $server['serverid'])); + Message::addSuccess('server-deleted', $server['ip']); + } + /* * RENDER */ @@ -185,14 +226,16 @@ class Page_Dnbd3 extends Page $serverId = Request::any('server', false, 'int'); } if ($serverId === false) { - // TODO: Missing param + Message::addError('parameter-missing', 'server'); + Util::redirect('?do=dnbd3'); } $server = Database::queryFirst('SELECT s.serverid, s.machineuuid, s.fixedip, m.clientip, m.hostname FROM dnbd3_server s LEFT JOIN machine m USING (machineuuid) WHERE s.serverid = :serverId', compact('serverId')); if ($server === false) { - // TODO: Not found + Message::addError('server-non-existent', 'server'); + Util::redirect('?do=dnbd3'); } if (!is_null($server['clientip'])) { $server['ip'] = $server['clientip']; @@ -204,4 +247,40 @@ class Page_Dnbd3 extends Page return $server; } + /* + * AJAX + */ + + protected function doAjax() + { + $action = Request::post('action', false, 'string'); + if ($action === 'servertest') { + Header('Content-Type: application/json; charset=utf-8'); + $ip = Request::post('ip', false, 'string'); + if ($ip === false) + die('{"error": "Missing parameter", "fatal": true}'); + $ip = ip2long(trim($ip)); + if ($ip !== false) { + $ip = long2ip($ip); + } + if ($ip === false) + die('{"error": "Supports IPv4 only", "fatal": true}'); + // Dup? + $res = Database::queryFirst('SELECT serverid FROM dnbd3_server s + LEFT JOIN machine m USING (machineuuid) + WHERE s.fixedip = :ip OR m.clientip = :ip', compact('ip')); + if ($res !== false) + die('{"error": "Server with this IP already exists", "fatal": true}'); + // Query + $reply = Dnbd3Rpc::query(true, false, false, $ip); + if ($reply === false) + die('{"error": "Could not reach server"}'); + if (!is_array($reply)) + die('{"error": "No JSON received from server"}'); + if (!isset($reply['uptime']) || !isset($reply['clientCount'])) + die('{"error": "Reply does not suggest this is a dnbd3 server"}'); + echo json_encode($reply); + } + } + } -- cgit v1.2.3-55-g7522