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/inc/dnbd3util.inc.php | 7 +- modules-available/dnbd3/page.inc.php | 83 ++++++++++++++++++++- .../dnbd3/templates/page-serverlist.html | 86 ++++++++++++++++++++-- 3 files changed, 168 insertions(+), 8 deletions(-) (limited to 'modules-available/dnbd3') diff --git a/modules-available/dnbd3/inc/dnbd3util.inc.php b/modules-available/dnbd3/inc/dnbd3util.inc.php index 722cc5e3..45ae6135 100644 --- a/modules-available/dnbd3/inc/dnbd3util.inc.php +++ b/modules-available/dnbd3/inc/dnbd3util.inc.php @@ -18,8 +18,13 @@ class Dnbd3Util { } else { continue; // Huh? } - if (!is_null($row['machineuuid']) || $row['clientip'] === $satServerIp) { + if (!is_null($row['machineuuid'])) { unset($dynClients[$row['machineuuid']]); + if ($row['clientip'] === $satServerIp) { + // Lolwut, sat server is openslx client configured for proxy mode!? baleeted. + RunMode::setRunMode($row['machineuuid'], 'dnbd3', null, null, null); + continue; + } } $server = array( 'serverid' => $row['serverid'], 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); + } + } + } diff --git a/modules-available/dnbd3/templates/page-serverlist.html b/modules-available/dnbd3/templates/page-serverlist.html index e50c6bcb..d9d02430 100644 --- a/modules-available/dnbd3/templates/page-serverlist.html +++ b/modules-available/dnbd3/templates/page-serverlist.html @@ -72,7 +72,9 @@ {{^self}} - + {{/self}} @@ -101,12 +103,22 @@ -
\ No newline at end of file +
+ + \ No newline at end of file -- cgit v1.2.3-55-g7522