mirror of
https://github.com/cwinfo/powerdns-admin.git
synced 2025-04-28 14:18:53 +00:00
Merge pull request #27 from ProviderNL/dnssec
Dnssec function thanks @JeroenBo
This commit is contained in:
commit
77c3af2e81
2
.gitignore
vendored
2
.gitignore
vendored
@ -31,3 +31,5 @@ db_repository/*
|
|||||||
upload/avatar/*
|
upload/avatar/*
|
||||||
tmp/*
|
tmp/*
|
||||||
.ropeproject
|
.ropeproject
|
||||||
|
.sonarlint/*
|
||||||
|
pdns.db
|
||||||
|
@ -823,6 +823,49 @@ class Domain(db.Model):
|
|||||||
else:
|
else:
|
||||||
return {'status': 'error', 'msg': 'This domain doesnot exist'}
|
return {'status': 'error', 'msg': 'This domain doesnot exist'}
|
||||||
|
|
||||||
|
def enable_domain_dnssec(self, domain_name):
|
||||||
|
"""
|
||||||
|
Enable domain DNSSEC
|
||||||
|
"""
|
||||||
|
domain = Domain.query.filter(Domain.name == domain_name).first()
|
||||||
|
if domain:
|
||||||
|
headers = {}
|
||||||
|
headers['X-API-Key'] = PDNS_API_KEY
|
||||||
|
post_data = {
|
||||||
|
"keytype": "ksk",
|
||||||
|
"active": True
|
||||||
|
}
|
||||||
|
try:
|
||||||
|
jdata = utils.fetch_json(urlparse.urljoin(PDNS_STATS_URL, API_EXTENDED_URL + '/servers/localhost/zones/%s/cryptokeys' % domain.name), headers=headers, method='POST',data=post_data)
|
||||||
|
if 'error' in jdata:
|
||||||
|
return {'status': 'error', 'msg': 'DNSSEC is not enabled for this domain', 'jdata' : jdata}
|
||||||
|
else:
|
||||||
|
return {'status': 'ok'}
|
||||||
|
except:
|
||||||
|
return {'status': 'error', 'msg': 'There was something wrong, please contact administrator'}
|
||||||
|
else:
|
||||||
|
return {'status': 'error', 'msg': 'This domain doesnot exist'}
|
||||||
|
|
||||||
|
def delete_dnssec_key(self, domain_name, key_id):
|
||||||
|
"""
|
||||||
|
Remove keys DNSSEC
|
||||||
|
"""
|
||||||
|
domain = Domain.query.filter(Domain.name == domain_name).first()
|
||||||
|
if domain:
|
||||||
|
headers = {}
|
||||||
|
headers['X-API-Key'] = PDNS_API_KEY
|
||||||
|
url = '/servers/localhost/zones/%s/cryptokeys/%s' % (domain.name, key_id)
|
||||||
|
|
||||||
|
try:
|
||||||
|
jdata = utils.fetch_json(urlparse.urljoin(PDNS_STATS_URL, API_EXTENDED_URL + url), headers=headers, method='DELETE')
|
||||||
|
if 'error' in jdata:
|
||||||
|
return {'status': 'error', 'msg': 'DNSSEC is not disabled for this domain', 'jdata' : jdata}
|
||||||
|
else:
|
||||||
|
return {'status': 'ok'}
|
||||||
|
except:
|
||||||
|
return {'status': 'error', 'msg': 'There was something wrong, please contact administrator','id': key_id, 'url': url}
|
||||||
|
else:
|
||||||
|
return {'status': 'error', 'msg': 'This domain doesnot exist'}
|
||||||
|
|
||||||
class DomainUser(db.Model):
|
class DomainUser(db.Model):
|
||||||
__tablename__ = 'domain_user'
|
__tablename__ = 'domain_user'
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
var dnssecKeyList = []
|
||||||
|
|
||||||
function applyChanges(data, url, showResult, refreshPage) {
|
function applyChanges(data, url, showResult, refreshPage) {
|
||||||
var success = false;
|
var success = false;
|
||||||
$.ajax({
|
$.ajax({
|
||||||
@ -116,7 +118,22 @@ function SelectElement(elementID, valueToSelect)
|
|||||||
element.value = valueToSelect;
|
element.value = valueToSelect;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getdnssec(url){
|
function enable_dns_sec(url) {
|
||||||
|
$.getJSON(url, function(data) {
|
||||||
|
var modal = $("#modal_dnssec_info");
|
||||||
|
|
||||||
|
if (data['status'] == 'error'){
|
||||||
|
modal.find('.modal-body p').text(data['msg']);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
modal.modal('hide');
|
||||||
|
//location.reload();
|
||||||
|
window.location.reload(true);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function getdnssec(url,domain){
|
||||||
|
|
||||||
$.getJSON(url, function(data) {
|
$.getJSON(url, function(data) {
|
||||||
var modal = $("#modal_dnssec_info");
|
var modal = $("#modal_dnssec_info");
|
||||||
@ -127,6 +144,18 @@ function getdnssec(url){
|
|||||||
else {
|
else {
|
||||||
dnssec_msg = '';
|
dnssec_msg = '';
|
||||||
var dnssec = data['dnssec'];
|
var dnssec = data['dnssec'];
|
||||||
|
|
||||||
|
if (dnssec.length == 0 && parseFloat(PDNS_VERSION) > 4.1) {
|
||||||
|
dnssec_msg = '<h3>Enable DNSSEC?';
|
||||||
|
modal.find('.modal-body p').html(dnssec_msg);
|
||||||
|
dnssec_footer = '<button type="button" class="btn btn-flat btn-success button_dnssec_enable pull-left" id="'+domain+'">Enable</button><button type="button" class="btn btn-flat btn-default pull-right" data-dismiss="modal">Cancel</button>';
|
||||||
|
modal.find('.modal-footer ').html(dnssec_footer);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (parseFloat(PDNS_VERSION) > 4.1) {
|
||||||
|
dnssec_footer = '<button type="button" class="btn btn-flat btn-danger button_dnssec_disable pull-left" id="'+domain+'">Disable DNSSEC</button><button type="button" class="btn btn-flat btn-default pull-right" data-dismiss="modal">Close</button>';
|
||||||
|
modal.find('.modal-footer ').html(dnssec_footer);
|
||||||
|
}
|
||||||
for (var i = 0; i < dnssec.length; i++) {
|
for (var i = 0; i < dnssec.length; i++) {
|
||||||
if (dnssec[i]['active']){
|
if (dnssec[i]['active']){
|
||||||
dnssec_msg += '<form>'+
|
dnssec_msg += '<form>'+
|
||||||
@ -145,6 +174,7 @@ function getdnssec(url){
|
|||||||
dnssec_msg += '</form>';
|
dnssec_msg += '</form>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
modal.find('.modal-body p').html(dnssec_msg);
|
modal.find('.modal-body p').html(dnssec_msg);
|
||||||
}
|
}
|
||||||
modal.modal('show');
|
modal.modal('show');
|
||||||
|
@ -158,6 +158,7 @@
|
|||||||
<button type="button" class="btn btn-flat dnssec btn-success button_dnssec" id="{{ domain.name }}" style="width:100%;">
|
<button type="button" class="btn btn-flat dnssec btn-success button_dnssec" id="{{ domain.name }}" style="width:100%;">
|
||||||
<i class="fa fa-lock"></i> Enabled
|
<i class="fa fa-lock"></i> Enabled
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
<button type="button" class="btn btn-flat dnssec button_dnssec" id="{{ domain.name }}" style="width:100%;">
|
<button type="button" class="btn btn-flat dnssec button_dnssec" id="{{ domain.name }}" style="width:100%;">
|
||||||
<i class="fa fa-unlock-alt"></i> Disabled
|
<i class="fa fa-unlock-alt"></i> Disabled
|
||||||
@ -206,6 +207,7 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block extrascripts %}
|
{% block extrascripts %}
|
||||||
<script>
|
<script>
|
||||||
|
PDNS_VERSION = '{{ pdns_version }}'
|
||||||
// set up history data table
|
// set up history data table
|
||||||
$("#tbl_history").DataTable({
|
$("#tbl_history").DataTable({
|
||||||
"paging" : false,
|
"paging" : false,
|
||||||
@ -240,7 +242,19 @@
|
|||||||
});
|
});
|
||||||
$(document.body).on("click", ".button_dnssec", function() {
|
$(document.body).on("click", ".button_dnssec", function() {
|
||||||
var domain = $(this).prop('id');
|
var domain = $(this).prop('id');
|
||||||
getdnssec($SCRIPT_ROOT + '/domain/' + domain + '/dnssec');
|
getdnssec($SCRIPT_ROOT + '/domain/' + domain + '/dnssec',domain);
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document.body).on("click", ".button_dnssec_enable", function() {
|
||||||
|
var domain = $(this).prop('id');
|
||||||
|
enable_dns_sec($SCRIPT_ROOT + '/domain/' + domain + '/dnssec/enable');
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document.body).on("click", ".button_dnssec_disable", function() {
|
||||||
|
var domain = $(this).prop('id');
|
||||||
|
enable_dns_sec($SCRIPT_ROOT + '/domain/' + domain + '/dnssec/disable');
|
||||||
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -109,6 +109,7 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block extrascripts %}
|
{% block extrascripts %}
|
||||||
<script>
|
<script>
|
||||||
|
PDNS_VERSION = '{{ pdns_version }}'
|
||||||
// superglobals
|
// superglobals
|
||||||
window.records_allow_edit = {{ editable_records|tojson }};
|
window.records_allow_edit = {{ editable_records|tojson }};
|
||||||
window.nEditing = null;
|
window.nEditing = null;
|
||||||
|
29
app/views.py
29
app/views.py
@ -439,7 +439,7 @@ def dashboard():
|
|||||||
uptime = filter(lambda uptime: uptime['name'] == 'uptime', statistics)[0]['value']
|
uptime = filter(lambda uptime: uptime['name'] == 'uptime', statistics)[0]['value']
|
||||||
else:
|
else:
|
||||||
uptime = 0
|
uptime = 0
|
||||||
return render_template('dashboard.html', domains=domains, domain_count=domain_count, users=users, history_number=history_number, uptime=uptime, histories=history)
|
return render_template('dashboard.html', domains=domains, domain_count=domain_count, users=users, history_number=history_number, uptime=uptime, histories=history,pdns_version=app.config['PDNS_VERSION'])
|
||||||
|
|
||||||
|
|
||||||
@app.route('/domain/<path:domain_name>', methods=['GET', 'POST'])
|
@app.route('/domain/<path:domain_name>', methods=['GET', 'POST'])
|
||||||
@ -479,7 +479,7 @@ def domain(domain_name):
|
|||||||
editable_records = app.config['FORWARD_RECORDS_ALLOW_EDIT']
|
editable_records = app.config['FORWARD_RECORDS_ALLOW_EDIT']
|
||||||
else:
|
else:
|
||||||
editable_records = app.config['REVERSE_RECORDS_ALLOW_EDIT']
|
editable_records = app.config['REVERSE_RECORDS_ALLOW_EDIT']
|
||||||
return render_template('domain.html', domain=domain, records=records, editable_records=editable_records)
|
return render_template('domain.html', domain=domain, records=records, editable_records=editable_records,pdns_version=app.config['PDNS_VERSION'])
|
||||||
|
|
||||||
|
|
||||||
@app.route('/admin/domain/add', methods=['GET', 'POST'])
|
@app.route('/admin/domain/add', methods=['GET', 'POST'])
|
||||||
@ -644,6 +644,31 @@ def domain_dnssec(domain_name):
|
|||||||
dnssec = domain.get_domain_dnssec(domain_name)
|
dnssec = domain.get_domain_dnssec(domain_name)
|
||||||
return make_response(jsonify(dnssec), 200)
|
return make_response(jsonify(dnssec), 200)
|
||||||
|
|
||||||
|
@app.route('/domain/<string:domain_name>/dnssec/enable', methods=['GET'])
|
||||||
|
@login_required
|
||||||
|
def domain_dnssec_enable(domain_name):
|
||||||
|
if not current_user.can_access_domain(domain_name):
|
||||||
|
return make_response(jsonify({'status': 'error', 'msg': 'You do not have access to that domain'}), 403)
|
||||||
|
|
||||||
|
domain = Domain()
|
||||||
|
dnssec = domain.enable_domain_dnssec(domain_name)
|
||||||
|
return make_response(jsonify(dnssec), 200)
|
||||||
|
|
||||||
|
@app.route('/domain/<string:domain_name>/dnssec/disable', methods=['GET'])
|
||||||
|
@login_required
|
||||||
|
def domain_dnssec_disable(domain_name):
|
||||||
|
if not current_user.can_access_domain(domain_name):
|
||||||
|
return make_response(jsonify({'status': 'error', 'msg': 'You do not have access to that domain'}), 403)
|
||||||
|
|
||||||
|
domain = Domain()
|
||||||
|
dnssec = domain.get_domain_dnssec(domain_name)
|
||||||
|
|
||||||
|
for key in dnssec['dnssec']:
|
||||||
|
response = domain.delete_dnssec_key(domain_name,key['id']);
|
||||||
|
|
||||||
|
return make_response(jsonify( { 'status': 'ok', 'msg': 'DNSSEC removed.' } ))
|
||||||
|
|
||||||
|
|
||||||
@app.route('/domain/<string:domain_name>/managesetting', methods=['GET', 'POST'])
|
@app.route('/domain/<string:domain_name>/managesetting', methods=['GET', 'POST'])
|
||||||
@login_required
|
@login_required
|
||||||
@admin_role_required
|
@admin_role_required
|
||||||
|
Loading…
x
Reference in New Issue
Block a user