Started Work Again

This commit is contained in:
lamclennan 2017-01-07 18:37:13 +10:00
parent 3bf4e2874a
commit 1aaa24280f
7 changed files with 152 additions and 61 deletions

View file

@ -45,23 +45,25 @@ if(isset($input->action) && $input->action == "addDomain") {
$soaContent = implode(" ", $soaData); $soaContent = implode(" ", $soaData);
$db->autocommit(false); $db->beginTransaction();
$stmt = $db->prepare("INSERT INTO domains(name,type) VALUES (?,?)"); $stmt = $db->prepare("INSERT INTO domains(name,type) VALUES (:name,:type)");
$stmt->bind_param("ss", $input->name, $input->type); $stmt->bindValue(':name', $input->name, PDO::PARAM_STR);
$stmt->bindValue(':type', $input->type, PDO::PARAM_STR);
$stmt->execute(); $stmt->execute();
$stmt->close();
$stmt = $db->prepare("SELECT LAST_INSERT_ID()"); $stmt = $db->prepare("SELECT id FROM domains WHERE name=:name AND type=:type LIMIT 1");
$stmt->bindValue(':name', $input->name, PDO::PARAM_STR);
$stmt->bindValue(':type', $input->type, PDO::PARAM_STR);
$stmt->execute(); $stmt->execute();
$stmt->bind_result($newDomainId); $newDomainId = $stmt->fetchColumn();
$stmt->fetch();
$stmt->close();
$stmt = $db->prepare("INSERT INTO records(domain_id,name,type,content,ttl) VALUES (?,?,'SOA',?,?)"); $stmt = $db->prepare("INSERT INTO records(domain_id,name,type,content,ttl) VALUES (:domain_id,:name,'SOA',:content,:ttl)");
$stmt->bind_param("issi", $newDomainId, $input->name, $soaContent, $input->ttl); $stmt->bindValue(':domain_id', $newDomainId, PDO::PARAM_INT);
$stmt->bindValue(':name', $input->name, PDO::PARAM_STR);
$stmt->bindValue(':content', $soaContent, PDO::PARAM_STR);
$stmt->bindValue(':ttl', $input->ttl, PDO::PARAM_INT);
$stmt->execute(); $stmt->execute();
$stmt->close();
$db->commit(); $db->commit();

View file

@ -98,15 +98,58 @@ CREATE TABLE IF NOT EXISTS options (
PRIMARY KEY (name) PRIMARY KEY (name)
) ENGINE=InnoDB DEFAULT CHARSET=latin1; ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO options(name,value) VALUES ('schema_version', 3); INSERT INTO options(name,value) VALUES ('schema_version', 4);
CREATE TABLE domainmetadata ( CREATE TABLE IF NOT EXISTS supermasters (
id INT AUTO_INCREMENT, ip VARCHAR(64) NOT NULL,
domain_id INT NOT NULL, nameserver VARCHAR(255) NOT NULL,
kind VARCHAR(32), account VARCHAR(40) NOT NULL,
content TEXT, PRIMARY KEY (ip, nameserver)
PRIMARY KEY (id) ) Engine=InnoDB DEFAULT CHARSET=latin1;
) Engine=InnoDB;
CREATE TABLE IF NOT EXISTS comments (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) NOT NULL,
comment VARCHAR(64000) NOT NULL,
PRIMARY KEY (id),
KEY comments_domain_id_idx (domain_id),
KEY comments_name_type_idx (name,type),
KEY comments_order_idx (domain_id, modified_at)
) Engine=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS domainmetadata (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
kind VARCHAR(32),
content TEXT,
PRIMARY KEY (id),
KEY domainmetadata_idx (domain_id, kind)
) Engine=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS cryptokeys (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
content TEXT,
PRIMARY KEY(id),
KEY domainidindex (domain_id)
) Engine=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS tsigkeys (
id INT AUTO_INCREMENT,
name VARCHAR(255),
algorithm VARCHAR(50),
secret VARCHAR(255),
PRIMARY KEY (id),
UNIQUE KEY namealgoindex (name, algorithm)
) Engine=InnoDB DEFAULT CHARSET=latin1;
"; ";
$sql["pgsql"]=" $sql["pgsql"]="
@ -146,8 +189,6 @@ CREATE INDEX IF NOT EXISTS nametype_index ON records(name,type);
CREATE INDEX IF NOT EXISTS domain_id ON records(domain_id); CREATE INDEX IF NOT EXISTS domain_id ON records(domain_id);
CREATE INDEX IF NOT EXISTS recordorder ON records (domain_id, ordername text_pattern_ops); CREATE INDEX IF NOT EXISTS recordorder ON records (domain_id, ordername text_pattern_ops);
CREATE TABLE IF NOT EXISTS user ( CREATE TABLE IF NOT EXISTS user (
id SERIAL PRIMARY KEY, id SERIAL PRIMARY KEY,
name varchar(50) NOT NULL, name varchar(50) NOT NULL,
@ -250,7 +291,7 @@ CREATE TABLE IF NOT EXISTS tsigkeys (
CREATE UNIQUE INDEX IF NOT EXISTS namealgoindex ON tsigkeys(name, algorithm); CREATE UNIQUE INDEX IF NOT EXISTS namealgoindex ON tsigkeys(name, algorithm);
"; ";
try { try {
$db = new PDO("$input->type:dbname=$input->database;host=$input->host;port=$input->port", $input->user, $input->password); ; $db = new PDO("$input->type:dbname=$input->database;host=$input->host;port=$input->port", $input->user, $input->password);
} }
catch (PDOException $e) { catch (PDOException $e) {
$retval['status'] = "error"; $retval['status'] = "error";

View file

@ -31,7 +31,7 @@ if(isset($input->action) && $input->action == "requestUpgrade") {
$currentVersion = getVersion($db); $currentVersion = getVersion($db);
if($currentVersion < 1) { if($currentVersion < 1) {
$sql = " $sql["mysql"] = "
CREATE TABLE IF NOT EXISTS remote ( CREATE TABLE IF NOT EXISTS remote (
id int(11) NOT NULL AUTO_INCREMENT, id int(11) NOT NULL AUTO_INCREMENT,
record int(11) NOT NULL, record int(11) NOT NULL,
@ -54,12 +54,12 @@ if(isset($input->action) && $input->action == "requestUpgrade") {
INSERT INTO options(name,value) VALUES ('schema_version', 1); INSERT INTO options(name,value) VALUES ('schema_version', 1);
"; ";
$sql["pgsql"] = "";
$db->multi_query($sql); $stmt = $db->query($sql[$config['db_type']]);
while ($db->next_result()) {;} while ($stmt->nextRowset()) {;}
} }
if($currentVersion < 2) { if($currentVersion < 2) {
$sql = " $sql["mysql"] = "
ALTER TABLE permissions ALTER TABLE permissions
DROP FOREIGN KEY permissions_ibfk_1; DROP FOREIGN KEY permissions_ibfk_1;
ALTER TABLE permissions ALTER TABLE permissions
@ -79,12 +79,12 @@ if(isset($input->action) && $input->action == "requestUpgrade") {
UPDATE options SET value=2 WHERE name='schema_version'; UPDATE options SET value=2 WHERE name='schema_version';
"; ";
$sql["pgsql"] = "";
$db->multi_query($sql); $stmt = $db->query($sql[$config['db_type']]);
while ($db->next_result()) {;} while ($stmt->nextRowset()) {;}
} }
if($currentVersion < 3) { if($currentVersion < 3) {
$sql = " $sql["mysql"] = "
CREATE TABLE domainmetadata ( CREATE TABLE domainmetadata (
id INT AUTO_INCREMENT, id INT AUTO_INCREMENT,
domain_id INT NOT NULL, domain_id INT NOT NULL,
@ -98,11 +98,59 @@ if(isset($input->action) && $input->action == "requestUpgrade") {
UPDATE options SET value=3 WHERE name='schema_version'; UPDATE options SET value=3 WHERE name='schema_version';
"; ";
$sql["pgsql"] = "";
$db->multi_query($sql); $stmt = $db->query($sql[$config['db_type']]);
while ($db->next_result()) {;} while ($stmt->nextRowset()) {;}
}
if($currentVersion < 4) {
$sql["mysql"] = "
CREATE TABLE IF NOT EXISTS supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) NOT NULL,
PRIMARY KEY (ip, nameserver)
) Engine=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS comments (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) NOT NULL,
comment VARCHAR(64000) NOT NULL,
PRIMARY KEY (id),
KEY comments_domain_id_idx (domain_id),
KEY comments_name_type_idx (name,type),
KEY comments_order_idx (domain_id, modified_at)
) Engine=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS cryptokeys (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
content TEXT,
PRIMARY KEY(id),
KEY domainidindex (domain_id)
) Engine=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS tsigkeys (
id INT AUTO_INCREMENT,
name VARCHAR(255),
algorithm VARCHAR(50),
secret VARCHAR(255),
PRIMARY KEY (id),
UNIQUE KEY namealgoindex (name, algorithm)
) Engine=InnoDB DEFAULT CHARSET=latin1;
UPDATE options SET value=4 WHERE name='schema_version';
";
$sql["pgsql"] = "";
$stmt = $db->query($sql[$config['db_type']]);
while ($stmt->nextRowset()) {;}
} }
$retval['status'] = "success"; $retval['status'] = "success";
} }

View file

@ -24,6 +24,12 @@ $config['db_password'] = "";
$config['db_port'] = 3306; $config['db_port'] = 3306;
$config['db_name'] = "pdnsmanager"; $config['db_name'] = "pdnsmanager";
//HTTP API Settings
$config['api_functionality'] = true;
$config['api_host'] = "localhost"
$config['api_port'] = 8080;
$config['api_key'] = "";
//Remote update //Remote update
$config['nonce_lifetime'] = 15; $config['nonce_lifetime'] = 15;

View file

@ -17,7 +17,7 @@
*/ */
function getExpectedVersion() { function getExpectedVersion() {
return 3; return 4;
} }
function checkVersion($db) { function checkVersion($db) {
@ -29,19 +29,14 @@ function checkVersion($db) {
} }
function getVersion($db) { function getVersion($db) {
$stmt = $db->prepare("SHOW TABLES LIKE 'options'");
$stmt->execute(); try {
$stmt->store_result(); $stmt = $db->prepare("SELECT value FROM options WHERE name='schema_version' LIMIT 1");
if($stmt->num_rows() < 1) { $stmt->execute();
$version = $stmt->fetchColumn();
} catch (Exception $e) {
return 0; return 0;
} }
$stmt->close();
$stmt = $db->prepare("SELECT value FROM options WHERE name='schema_version'");
$stmt->execute();
$stmt->bind_result($version);
$stmt->fetch();
$stmt->close();
return $version; return $version;
} }

View file

@ -16,8 +16,9 @@
* limitations under the License. * limitations under the License.
*/ */
$db = new mysqli($config['db_host'], $config['db_user'], $config['db_password'], $config['db_name'], $config['db_port']); try {
$db = new PDO("$config['db_type']:dbname=$config['db_name'];host=$config['db_host'];port=$config['db_port']", $config['db_user'], $config['db_password']);
if ($db->connect_error) {
die("Connection to database failed");
} }
catch (PDOException $e) {
die("Connection to database failed");
}

View file

@ -18,16 +18,13 @@
function update_serial($db, $domainId) { function update_serial($db, $domainId) {
$db->autocommit(false); $db->beginTransaction();
$db->begin_transaction();
$stmt = $db->prepare("SELECT content FROM records WHERE type='SOA' AND domain_id=?"); $stmt = $db->prepare("SELECT content FROM records WHERE type='SOA' AND domain_id=:domain_id LIMIT 1");
$stmt->bind_param("i", $domainId); $stmt->bindValue(':domain_id', $domainId, PDO::PARAM_INT);
$stmt->execute(); $stmt->execute();
$stmt->bind_result($content); $content = $stmt->fetchColumn();
$stmt->fetch();
$stmt->close();
$content = explode(" ", $content); $content = explode(" ", $content);
$serial = $content[2]; $serial = $content[2];
@ -50,8 +47,9 @@ function update_serial($db, $domainId) {
$newsoa = implode(" ", $content); $newsoa = implode(" ", $content);
$stmt = $db->prepare("UPDATE records SET content=? WHERE type='SOA' AND domain_id=?"); $stmt = $db->prepare("UPDATE records SET content=:content WHERE type='SOA' AND domain_id=:domain_id");
$stmt->bind_param("si", $newsoa, $domainId); $stmt->bindValue(':content', $newsoa, PDO::PARAM_STR);
$stmt->bindValue(':domain_id', $domainId, PDO::PARAM_INT);
$stmt->execute(); $stmt->execute();
$db->commit(); $db->commit();