diff --git a/includes/config.inc.php-dist b/includes/config.inc.php-dist index bd0c2cb..39fb343 100644 --- a/includes/config.inc.php-dist +++ b/includes/config.inc.php-dist @@ -7,6 +7,12 @@ $apiport = '8081'; # The port of the PowerDNS API $apisid = 'localhost'; # PowerDNS's :server_id $allowzoneadd = FALSE; # Allow normal users to add zones +# The first versions of the PowerDNS API used the standard webserver password +# for authentication, newer versions use an X-API-Key mechanism. NSEdit tries +# to autodetect the method you should use, but that does affect performance. +# For optimal performance, configure the right method. +# (Should be 'auto', 'xapikey' or 'userpass') +$authmethod = 'auto'; # If you configure this, nsedit will try to authenticate via WeFact too. # Debtors will be added to the sqlitedatabase with their crypted password. @@ -46,7 +52,12 @@ $defaults['secondaryns'] = 'unconfigured.secondaryns'; # The value of the secon $defaults['ttl'] = 3600; # Default TTL for records $defaults['priority'] = 0; # Default for priority in records +$blocklogin = FALSE; +if (!preg_match('/^(xapikey|userpass|auto)$/', $authmethod)) { + $errormsg = "The value for $authmethod is incorrect in your config"; + $blocklogin = TRUE; +} /* No need to change stuf below */ diff --git a/index.php b/index.php index b9d9c75..25012d6 100644 --- a/index.php +++ b/index.php @@ -4,6 +4,8 @@ include_once('includes/config.inc.php'); include_once('includes/session.inc.php'); include_once('includes/misc.inc.php'); +global $errormsg, $blocklogin; + if (isset($_GET['logout']) or isset($_POST['logout'])) { logout(); header("Location: index.php"); @@ -71,7 +73,7 @@ if (!is_logged_in()) { ?> <tr> <td></td> - <td><input type="submit" name="submit" value="Log me in!"></td> + <td><input type="submit" name="submit" value="Log me in!" <?php if ($blocklogin === TRUE)) { echo "disabled"; }; ?>></td> </tr> </table> <input type="hidden" name="formname" value="loginform"> diff --git a/zones.php b/zones.php index cb9b154..f7fe0b2 100644 --- a/zones.php +++ b/zones.php @@ -11,12 +11,29 @@ if (!is_csrf_safe()) { } function api_request($path, $opts = null, $type = null) { - global $apisid, $apiuser, $apipass, $apiip, $apiport; + global $apisid, $apiuser, $apipass, $apiip, $apiport, $authmethod; $url = "http://$apiip:$apiport${path}"; + if ($authmethod == "auto") { + $ad = curl_init(); + curl_setopt($ad, CURLOPT_HTTPHEADER, array('X-API-Key: '.$apipass)); + curl_setopt($ad, CURLOPT_URL, "http://$apiip:$apiport/servers/localhost/statistics"); + curl_setopt($ad, CURLOPT_RETURNTRANSFER, 1); + curl_exec($ad); + if (curl_getinfo($ad, CURLINFO_HTTP_CODE) == 401) { + $authmethod = 'userpass'; + } else { + $authmethod = 'xapikey'; + } + } + $ch = curl_init(); - curl_setopt($ch, CURLOPT_USERPWD, "$apiuser:$apipass"); + if ($authmethod == "xapikey") { + curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-API-Key: '.$apipass)); + } else { + curl_setopt($ch, CURLOPT_USERPWD, "$apiuser:$apipass"); + } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if ($opts) {