diff options
author | Simon Rettberg | 2017-10-11 16:01:18 +0200 |
---|---|---|
committer | Simon Rettberg | 2017-10-11 16:01:18 +0200 |
commit | 2bf954897109fc761a6aa39bfc4479e087671200 (patch) | |
tree | 5879636d5ec5a363074edf0243d2b088a7abe8ca /modules-available/dnbd3/page.inc.php | |
parent | [dnbd3] Fix CIDR generation for proxies, add baseconfig hook for clients (diff) | |
download | slx-admin-2bf954897109fc761a6aa39bfc4479e087671200.tar.gz slx-admin-2bf954897109fc761a6aa39bfc4479e087671200.tar.xz slx-admin-2bf954897109fc761a6aa39bfc4479e087671200.zip |
[dnbd3] Implement adding and deleting servers
Diffstat (limited to 'modules-available/dnbd3/page.inc.php')
-rw-r--r-- | modules-available/dnbd3/page.inc.php | 83 |
1 files changed, 81 insertions, 2 deletions
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'] === '<self>') + 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); + } + } + } |