diff options
Diffstat (limited to 'html')
-rw-r--r-- | html/maintenance.php | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/html/maintenance.php b/html/maintenance.php index 0501b72..7f020c1 100644 --- a/html/maintenance.php +++ b/html/maintenance.php @@ -88,3 +88,47 @@ if (array_key_exists('machine',$_GET)) { } die(); } + +if (array_key_exists('ddns', $_GET)) { + $result = $db -> query( + 'SELECT keys.key, COUNT(1) as cnt FROM keys' . + ' JOIN permissions ON permissions.key_id = keys.id' . + ' JOIN "values" ON permissions.value_id = "values".id' . + ' JOIN states ON "values".state_id = states.id' . + ' WHERE states.name = ' . "'" . 'running' . "'" . + ' GROUP BY keys.key' . + ' ORDER BY cnt DESC' + ); + while ($row = $result -> fetchArray()) { + if ($row['cnt'] != 1) { + echo $row['key'] . "\n"; + die(); + } + } + + $stm = $db -> prepare('INSERT INTO keys (key) VALUES (:key)'); + $stm -> bindValue('key', bin2hex(random_bytes(64))); + $stm -> execute(); + $key_id = $db -> lastInsertRowID(); + $stm -> close(); + + $stm = $db -> prepare('INSERT INTO permissions(key_id, value_id) VALUES (:key_id, :value_id)'); + $stm -> bindValue('key_id', $key_id); + $result = $db -> query( + 'SELECT "values".id as value_id FROM "values"' . + ' JOIN states ON states.id = "values".state_id' . + ' WHERE states.name = ' . "'" . 'running' . "'" + ); + while ($row = $result -> fetchArray()) { + $stm -> bindValue('value_id', $row['value_id']); + $stm -> execute(); + } + $stm -> close(); + + $stm = $db -> prepare('SELECT keys.key from keys WHERE keys.id = :key_id'); + $stm -> bindValue('key_id', $key_id); + $result = $stm -> execute(); + $result = $result -> fetchArray(); + echo $result['key'] . "\n"; + $stm -> close(); +} |