Merge remote-tracking branch 'origin/master' into issue-68

Conflicts:
	index.php
This commit is contained in:
Richard Underwood 2017-11-07 12:03:09 +00:00
commit 41d6d16a86
8 changed files with 60 additions and 30 deletions

View file

@ -5,8 +5,6 @@ MAINTAINER Yury Evtikhov <yury@evtikhov.info>
# It will be a really BAD idea to use it for production or public services. # It will be a really BAD idea to use it for production or public services.
# #
ENV DEBIAN_FRONTEND noninteractive ENV DEBIAN_FRONTEND noninteractive
# #
@ -19,12 +17,13 @@ ENV PDNSAPIPORT 8081
# Update and Upgrade system # Update and Upgrade system
RUN apt-get -y update && \ RUN apt-get -y update && \
apt-get -y install curl git-core php5-cli php5-curl php5-json php5-sqlite && \ apt-get -y install curl git-core php5-cli php5-curl php5-json php5-sqlite && \
mkdir /app && \ rm -rf /var/lib/apt/lists/*
git clone --recursive https://github.com/tuxis-ie/nsedit.git /app/nsedit && \ RUN mkdir /app
cp /app/nsedit/includes/config.inc.php-dist /app/nsedit/includes/config.inc.php && \ RUN git clone --recursive https://github.com/tuxis-ie/nsedit.git /app/nsedit
sed "s/\$apipass = ''/\$apipass = '$PDNSAPIPWD'/" -i /app/nsedit/includes/config.inc.php && \ RUN cp /app/nsedit/includes/config.inc.php-dist /app/nsedit/includes/config.inc.php
RUN sed "s/\$apipass = ''/\$apipass = '$PDNSAPIPWD'/" -i /app/nsedit/includes/config.inc.php && \
sed "s/\$apiip = ''/\$apiip = '$PDNSAPIIP'/" -i /app/nsedit/includes/config.inc.php && \ sed "s/\$apiip = ''/\$apiip = '$PDNSAPIIP'/" -i /app/nsedit/includes/config.inc.php && \
sed "s/\$apiport = ''/\$apiport = '$PDNSAPIPORT'/" -i /app/nsedit/includes/config.inc.php && \ sed "s/\$apiport = '8081'/\$apiport = '$PDNSAPIPORT'/" -i /app/nsedit/includes/config.inc.php && \
sed "s/\$authdb = \"\.\.\/etc\/pdns\.users\.sqlite3\"/\$authdb = \"\/app\/pdns\.users\.sqlite3\"/" -i /app/nsedit/includes/config.inc.php sed "s/\$authdb = \"\.\.\/etc\/pdns\.users\.sqlite3\"/\$authdb = \"\/app\/pdns\.users\.sqlite3\"/" -i /app/nsedit/includes/config.inc.php
# Define working directory. # Define working directory.

View file

@ -56,6 +56,12 @@ Installing
Have fun ;) Have fun ;)
Other methods of installation (Unsupported)
===========================================
* Baji Zsolt created a Suse image: https://susestudio.com/a/vvnMqa/powerdns-with-nsedit
* Yury Evtikhov created the Docker file: https://github.com/tuxis-ie/nsedit/blob/master/Dockerfile
Configuring PowerDNS Configuring PowerDNS
==================== ====================
Minimal cofiguration of PowerDNS for supporting nsedit has to include 3 directives: Minimal cofiguration of PowerDNS for supporting nsedit has to include 3 directives:

View file

@ -93,12 +93,6 @@ class ApiHandler {
curl_setopt($this->curlh, CURLOPT_URL, $this->baseurl().$this->url); curl_setopt($this->curlh, CURLOPT_URL, $this->baseurl().$this->url);
//print "Here we go:\n";
//print "Request: ".$this->method.' '.$this->baseurl().$this->url."\n";
//if ($this->content != '') {
// print "Content: ".$this->content."\n";
//}
$return = curl_exec($this->curlh); $return = curl_exec($this->curlh);
$code = curl_getinfo($this->curlh, CURLINFO_HTTP_CODE); $code = curl_getinfo($this->curlh, CURLINFO_HTTP_CODE);
$json = json_decode($return, 1); $json = json_decode($return, 1);
@ -116,12 +110,11 @@ class ApiHandler {
} }
public function call() { public function call() {
if (substr($this->url, 0, 1) == '/') { if (substr($this->url, 0, 1) != '/') {
$this->apiurl(); $this->url = '/'.$this->url;
} else {
$this->apiurl = '/';
} }
$this->apiurl();
$this->url = str_replace($this->apiurl, '', $this->url);
$this->go(); $this->go();
} }
} }

View file

@ -41,10 +41,18 @@ $templates[] = array(
'name' => 'Tuxis', 'name' => 'Tuxis',
'owner' => 'username', # Set to 'public' to make it available to all users 'owner' => 'username', # Set to 'public' to make it available to all users
'records' => array( 'records' => array(
array( array(
'name' => '', 'name' => '',
'type' => 'MX', 'type' => 'MX',
'content' => '200 mx2.tuxis.nl') 'content' => '200 mx2.tuxis.nl'),
array(
'name' => '',
'type' => 'A',
'content' => '1.2.3.4'),
array(
'name' => 'www',
'type' => 'CNAME',
'content' => '[zonename]')
) )
); );
*/ */

View file

@ -36,7 +36,7 @@ if (isset($defaults['primaryns'])) {
} }
if (!isset($logo) or empty($logo)) { if (!isset($logo) or empty($logo)) {
$logo = 'http://www.tuxis.nl/uploads/images/nsedit.png'; $logo = 'https://www.tuxis.nl/uploads/images/nsedit.png';
} }

View file

@ -9,11 +9,13 @@ global $current_user;
$current_user = false; $current_user = false;
// session startup // session startup
function _set_current_user($username, $is_admin = false, $has_csrf_token = false, $is_api = false) { function _set_current_user($username, $userid, $localauth = true, $is_admin = false, $has_csrf_token = false, $is_api = false) {
global $current_user; global $current_user;
$current_user = array( $current_user = array(
'username' => $username, 'username' => $username,
'id' => $userid,
'localauth' => $localauth,
'is_admin' => $is_admin, 'is_admin' => $is_admin,
'has_csrf_token' => $has_csrf_token, 'has_csrf_token' => $has_csrf_token,
'is_api' => $is_api, 'is_api' => $is_api,
@ -177,7 +179,7 @@ function _try_login($username, $password) {
writelog("Failed to find user!", $username); writelog("Failed to find user!", $username);
return false; return false;
} else { } else {
_set_current_user($username, (bool) $user['isadmin']); _set_current_user($username, $user['id'], (bool) $do_local_auth, (bool) $user['isadmin']);
if (session_id()) { if (session_id()) {
session_unset(); session_unset();
@ -187,6 +189,8 @@ function _try_login($username, $password) {
session_regenerate_id(true) or die('session failure: regenerated id failed'); session_regenerate_id(true) or die('session failure: regenerated id failed');
session_unset(); session_unset();
$_SESSION['username'] = $username; $_SESSION['username'] = $username;
$_SESSION['localauth'] = $do_local_auth;
$_SESSION['userid'] = $user['id'];
# requires session: # requires session:
_check_csrf_token($user); _check_csrf_token($user);
@ -206,7 +210,7 @@ function _check_session() {
and $_POST['adminapikey'] === $adminapikey) and $_POST['adminapikey'] === $adminapikey)
{ {
# Allow this request, fake that we're logged in as user. # Allow this request, fake that we're logged in as user.
return _set_current_user('admin', true, true, true); return _set_current_user('admin', 1, false, true, true, true);
} }
else else
{ {
@ -222,7 +226,7 @@ function _check_session() {
session_destroy(); session_destroy();
session_unset(); session_unset();
} else { } else {
_set_current_user($_SESSION['username'], (bool) $user['isadmin']); _set_current_user($_SESSION['username'], $_SESSION['userid'], (bool) $_SESSION['localauth'], (bool) $user['isadmin']);
_check_csrf_token($user); _check_csrf_token($user);
return; return;
} }
@ -281,6 +285,16 @@ function get_sess_user() {
return $current_user ? $current_user['username'] : null; return $current_user ? $current_user['username'] : null;
} }
function get_sess_userid() {
global $current_user;
return $current_user ? $current_user['id'] : null;
}
function has_local_auth() {
global $current_user;
return $current_user ? $current_user['localauth'] : null;
}
function logout() { function logout() {
@session_destroy(); @session_destroy();
@session_unset(); @session_unset();

View file

@ -20,7 +20,7 @@ if (!is_logged_in() and isset($_POST['formname']) and $_POST['formname'] === "lo
if (is_logged_in() and isset($_POST['formname']) and $_POST['formname'] === "changepwform") { if (is_logged_in() and isset($_POST['formname']) and $_POST['formname'] === "changepwform") {
if (get_sess_user() == $_POST['username']) { if (get_sess_user() == $_POST['username']) {
if (!update_user(get_sess_user(), is_adminuser(), $_POST['password'])) { if (!update_user(get_sess_userid(), is_adminuser(), $_POST['password'])) {
$errormsg = "Unable to update password!\n"; $errormsg = "Unable to update password!\n";
} }
} else { } else {
@ -138,6 +138,7 @@ if ($blocklogin === TRUE) {
<option value="AAAA">AAAA</option> <option value="AAAA">AAAA</option>
<option value="CERT">CERT</option> <option value="CERT">CERT</option>
<option value="CNAME">CNAME</option> <option value="CNAME">CNAME</option>
<option value="ALIAS">ALIAS</option>
<option value="LOC">LOC</option> <option value="LOC">LOC</option>
<option value="MX">MX</option> <option value="MX">MX</option>
<option value="NAPTR">NAPTR</option> <option value="NAPTR">NAPTR</option>
@ -148,6 +149,7 @@ if ($blocklogin === TRUE) {
<option value="SRV">SRV</option> <option value="SRV">SRV</option>
<option value="SSHFP">SSHFP</option> <option value="SSHFP">SSHFP</option>
<option value="TLSA">TLSA</option> <option value="TLSA">TLSA</option>
<option value="CAA">CAA</option>
<option value="TXT">TXT</option> <option value="TXT">TXT</option>
</select><br></td></tr> </select><br></td></tr>
<tr><td>Content:</td><td><input type="text" id ="searchzone-content"></td></tr> <tr><td>Content:</td><td><input type="text" id ="searchzone-content"></td></tr>
@ -210,6 +212,7 @@ if ($blocklogin === TRUE) {
</div> </div>
<?php } ?> <?php } ?>
<?php if (has_local_auth()) { ?>
<div id="AboutMe"> <div id="AboutMe">
<div class="tables"> <div class="tables">
<p>Hi <?php echo get_sess_user(); ?>. You can change your password here.</p> <p>Hi <?php echo get_sess_user(); ?>. You can change your password here.</p>
@ -234,9 +237,11 @@ if ($blocklogin === TRUE) {
</tr> </tr>
</table> </table>
<input type="hidden" name="formname" value="changepwform"> <input type="hidden" name="formname" value="changepwform">
<input type="hidden" name="id" value="<?php echo get_sess_userid(); ?>">
</form> </form>
</div> </div>
</div> </div>
<?php } ?>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
window.csrf_token = '<?php echo CSRF_TOKEN ?>'; window.csrf_token = '<?php echo CSRF_TOKEN ?>';
@ -781,12 +786,14 @@ $(document).ready(function () {
'AAAA': 'AAAA', 'AAAA': 'AAAA',
'CERT': 'CERT', 'CERT': 'CERT',
'CNAME': 'CNAME', 'CNAME': 'CNAME',
'ALIAS': 'ALIAS',
'LOC': 'LOC', 'LOC': 'LOC',
'NAPTR': 'NAPTR', 'NAPTR': 'NAPTR',
'SPF': 'SPF', 'SPF': 'SPF',
'SRV': 'SRV', 'SRV': 'SRV',
'SSHFP': 'SSHFP', 'SSHFP': 'SSHFP',
'TLSA': 'TLSA', 'TLSA': 'TLSA',
'CAA': 'CAA',
'DNAME': 'DNAME', 'DNAME': 'DNAME',
'DS': 'DS' 'DS': 'DS'
}; };
@ -797,6 +804,7 @@ $(document).ready(function () {
'CERT': 'CERT', 'CERT': 'CERT',
'CNAME': 'CNAME', 'CNAME': 'CNAME',
'DNAME': 'DNAME', 'DNAME': 'DNAME',
'ALIAS': 'ALIAS',
'DS': 'DS', 'DS': 'DS',
'LOC': 'LOC', 'LOC': 'LOC',
'MX': 'MX', 'MX': 'MX',
@ -808,6 +816,7 @@ $(document).ready(function () {
'SRV': 'SRV', 'SRV': 'SRV',
'SSHFP': 'SSHFP', 'SSHFP': 'SSHFP',
'TLSA': 'TLSA', 'TLSA': 'TLSA',
'CAA': 'CAA',
'TXT': 'TXT', 'TXT': 'TXT',
}; };
}, },

View file

@ -340,6 +340,7 @@ case "create":
foreach ($template['records'] as $record) { foreach ($template['records'] as $record) {
$name = $record['name'] != '' ? join(Array($record['name'],'.',$zonename)) : $zonename; $name = $record['name'] != '' ? join(Array($record['name'],'.',$zonename)) : $zonename;
$record['content'] = str_replace("[zonename]", $zonename, $record['content']);
$zone->addRecord($name, $record['type'], $record['content']); $zone->addRecord($name, $record['type'], $record['content']);
} }