mirror of
https://github.com/cwinfo/powerdns-admin.git
synced 2024-11-09 15:10:27 +00:00
parent
9003b3f6c8
commit
5f2fc514df
@ -227,6 +227,15 @@ def ensure_list(l):
|
||||
yield from l
|
||||
|
||||
|
||||
class customBoxes:
|
||||
boxes = {
|
||||
"reverse": (" ", " "),
|
||||
"ip6arpa": ("ip6", "%.ip6.arpa"),
|
||||
"inaddrarpa": ("in-addr", "%.in-addr.arpa")
|
||||
}
|
||||
order = ["reverse", "ip6arpa", "inaddrarpa"]
|
||||
|
||||
|
||||
def pretty_domain_name(domain_name):
|
||||
# Add a debugging statement to print out the domain name
|
||||
print("Received domain name:", domain_name)
|
||||
|
@ -1,10 +1,10 @@
|
||||
import datetime
|
||||
from collections import namedtuple
|
||||
from flask import Blueprint, render_template, url_for, current_app, request, jsonify, redirect, g, session, abort
|
||||
from flask import Blueprint, render_template, url_for, current_app, request, jsonify, redirect, g, session
|
||||
from flask_login import login_required, current_user, login_manager
|
||||
from sqlalchemy import not_
|
||||
|
||||
from ..decorators import operator_role_required
|
||||
from ..lib.utils import customBoxes
|
||||
from ..models.user import User, Anonymous
|
||||
from ..models.account import Account
|
||||
from ..models.account_user import AccountUser
|
||||
@ -21,31 +21,6 @@ dashboard_bp = Blueprint('dashboard',
|
||||
url_prefix='/dashboard')
|
||||
|
||||
|
||||
class ZoneTabs:
|
||||
"""Config data for the zone tabs on the dashboard."""
|
||||
|
||||
TabInfo = namedtuple('TabInfo', ['display_name', 'filter_pattern'])
|
||||
"""Info about a single tab.
|
||||
|
||||
`display_name` is the name on the tab.
|
||||
`filter_pattern` is a SQL LIKE pattern , which is case-insensitively matched against the zone
|
||||
name (without the final root-dot).
|
||||
|
||||
If a filter is present, the tab will show zones that match the filter.
|
||||
If no filter is present, the tab will show zones that are not matched by any other tab filter.
|
||||
"""
|
||||
|
||||
tabs = {
|
||||
'forward': TabInfo("", None),
|
||||
'reverse_ipv4': TabInfo("in-addr.arpa", '%.in-addr.arpa'),
|
||||
'reverse_ipv6': TabInfo("ip6.arpa", '%.ip6.arpa'),
|
||||
}
|
||||
"""Dict of unique tab id to a TabInfo."""
|
||||
|
||||
order = ['forward', 'reverse_ipv4', 'reverse_ipv6']
|
||||
"""List of tab ids in the order they will appear."""
|
||||
|
||||
|
||||
@dashboard_bp.before_request
|
||||
def before_request():
|
||||
# Check if user is anonymous
|
||||
@ -66,12 +41,9 @@ def before_request():
|
||||
session.modified = True
|
||||
|
||||
|
||||
@dashboard_bp.route('/domains-custom/<path:tab_id>', methods=['GET'])
|
||||
@dashboard_bp.route('/domains-custom/<path:boxId>', methods=['GET'])
|
||||
@login_required
|
||||
def domains_custom(tab_id):
|
||||
if tab_id not in ZoneTabs.tabs:
|
||||
abort(404)
|
||||
|
||||
def domains_custom(boxId):
|
||||
if current_user.role.name in ['Administrator', 'Operator']:
|
||||
domains = Domain.query
|
||||
else:
|
||||
@ -111,15 +83,14 @@ def domains_custom(tab_id):
|
||||
if order_by:
|
||||
domains = domains.order_by(*order_by)
|
||||
|
||||
if ZoneTabs.tabs[tab_id].filter_pattern:
|
||||
# If the tab has a filter, use only that
|
||||
domains = domains.filter(Domain.name.ilike(ZoneTabs.tabs[tab_id].filter_pattern))
|
||||
if boxId == "reverse":
|
||||
for boxId in customBoxes.order:
|
||||
if boxId == "reverse": continue
|
||||
domains = domains.filter(
|
||||
not_(Domain.name.ilike(customBoxes.boxes[boxId][1])))
|
||||
else:
|
||||
# If the tab has no filter, use all the other filters in negated form
|
||||
for tab_info in ZoneTabs.tabs.values():
|
||||
if not tab_info.filter_pattern:
|
||||
continue
|
||||
domains = domains.filter(not_(Domain.name.ilike(tab_info.filter_pattern)))
|
||||
domains = domains.filter(Domain.name.ilike(
|
||||
customBoxes.boxes[boxId][1]))
|
||||
|
||||
total_count = domains.count()
|
||||
|
||||
@ -236,7 +207,7 @@ def dashboard():
|
||||
|
||||
# Add custom boxes to render_template
|
||||
return render_template('dashboard.html',
|
||||
zone_tabs=ZoneTabs,
|
||||
custom_boxes=customBoxes,
|
||||
domain_count=domain_count,
|
||||
user_num=user_num,
|
||||
history_number=history_number,
|
||||
|
@ -176,11 +176,17 @@
|
||||
<div class="nav-tabs-custom">
|
||||
<ul class="nav nav-tabs card-header-tabs" id="custom-content-below-tab"
|
||||
role="tablist">
|
||||
{% for tab_id in zone_tabs.order %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if loop.first %}active{% endif %}"
|
||||
href="#tab_{{ tab_id }}" data-toggle="pill" role="tab">
|
||||
Zones <b>{{ zone_tabs.tabs[tab_id].display_name }}</b>
|
||||
<a class="nav-link active" href="#tab_{{ custom_boxes.order[0] }}"
|
||||
data-toggle="pill" role="tab">
|
||||
Zones <b>{{ custom_boxes.boxes[custom_boxes.order[0]][0] }}</b>
|
||||
</a>
|
||||
</li>
|
||||
{% for boxId in custom_boxes.order[1:] %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="#tab_{{ boxId }}" data-toggle="pill"
|
||||
role="tab">
|
||||
Zones <b>{{ custom_boxes.boxes[boxId][0] }}</b>
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
@ -191,11 +197,10 @@
|
||||
<!-- /.card-header -->
|
||||
<div class="card-body p-0">
|
||||
<div class="tab-content">
|
||||
{% for tab_id in zone_tabs.order %}
|
||||
<div id='tab_{{ tab_id }}'
|
||||
class="tab-pane show {% if loop.first %}active{% endif %}">
|
||||
{% for boxId in custom_boxes.order %}
|
||||
<div class="tab-pane show" id='tab_{{ boxId }}'>
|
||||
<div class="card-body table-responsive records p-0 pt-2">
|
||||
<table id='tbl_domain_list_{{ tab_id }}'
|
||||
<table id='tbl_domain_list_{{ boxId }}'
|
||||
class="table table-striped table-hover table-sm records">
|
||||
<thead>
|
||||
<tr>
|
||||
@ -269,8 +274,9 @@
|
||||
});
|
||||
}
|
||||
|
||||
{% for tab_id in zone_tabs.order %}
|
||||
setUpDomainList("#tbl_domain_list_{{tab_id}}", "{{url_for('dashboard.domains_custom',tab_id=tab_id)}}");
|
||||
$('#tab_{{custom_boxes.order[0]}}').addClass("active");
|
||||
{% for boxId in custom_boxes.order %}
|
||||
setUpDomainList("#tbl_domain_list_{{boxId}}", "{{url_for('dashboard.domains_custom',boxId=boxId)}}");
|
||||
{% endfor %}
|
||||
//SYBPATCH END//
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user