Skip to content

Commit

Permalink
Revert "Revert "Clean up dashboard zone tabs""
Browse files Browse the repository at this point in the history
This reverts commit 5f2fc51.
  • Loading branch information
AzorianMatt committed Mar 6, 2023
1 parent 5f2fc51 commit 4933351
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 37 deletions.
9 changes: 0 additions & 9 deletions powerdnsadmin/lib/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -227,15 +227,6 @@ 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)
Expand Down
53 changes: 41 additions & 12 deletions powerdnsadmin/routes/dashboard.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import datetime
from flask import Blueprint, render_template, url_for, current_app, request, jsonify, redirect, g, session
from collections import namedtuple
from flask import Blueprint, render_template, url_for, current_app, request, jsonify, redirect, g, session, abort
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
Expand All @@ -21,6 +21,31 @@
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
Expand All @@ -41,9 +66,12 @@ def before_request():
session.modified = True


@dashboard_bp.route('/domains-custom/<path:boxId>', methods=['GET'])
@dashboard_bp.route('/domains-custom/<path:tab_id>', methods=['GET'])
@login_required
def domains_custom(boxId):
def domains_custom(tab_id):
if tab_id not in ZoneTabs.tabs:
abort(404)

if current_user.role.name in ['Administrator', 'Operator']:
domains = Domain.query
else:
Expand Down Expand Up @@ -83,14 +111,15 @@ def domains_custom(boxId):
if order_by:
domains = domains.order_by(*order_by)

if boxId == "reverse":
for boxId in customBoxes.order:
if boxId == "reverse": continue
domains = domains.filter(
not_(Domain.name.ilike(customBoxes.boxes[boxId][1])))
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))
else:
domains = domains.filter(Domain.name.ilike(
customBoxes.boxes[boxId][1]))
# 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)))

total_count = domains.count()

Expand Down Expand Up @@ -207,7 +236,7 @@ def dashboard():

# Add custom boxes to render_template
return render_template('dashboard.html',
custom_boxes=customBoxes,
zone_tabs=ZoneTabs,
domain_count=domain_count,
user_num=user_num,
history_number=history_number,
Expand Down
26 changes: 10 additions & 16 deletions powerdnsadmin/templates/dashboard.html
Original file line number Diff line number Diff line change
Expand Up @@ -176,17 +176,11 @@ <h3 class="card-title mb-2">
<div class="nav-tabs-custom">
<ul class="nav nav-tabs card-header-tabs" id="custom-content-below-tab"
role="tablist">
<li class="nav-item">
<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:] %}
{% for tab_id in zone_tabs.order %}
<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 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>
</li>
{% endfor %}
Expand All @@ -197,10 +191,11 @@ <h3 class="card-title mb-2">
<!-- /.card-header -->
<div class="card-body p-0">
<div class="tab-content">
{% for boxId in custom_boxes.order %}
<div class="tab-pane show" id='tab_{{ boxId }}'>
{% for tab_id in zone_tabs.order %}
<div id='tab_{{ tab_id }}'
class="tab-pane show {% if loop.first %}active{% endif %}">
<div class="card-body table-responsive records p-0 pt-2">
<table id='tbl_domain_list_{{ boxId }}'
<table id='tbl_domain_list_{{ tab_id }}'
class="table table-striped table-hover table-sm records">
<thead>
<tr>
Expand Down Expand Up @@ -274,9 +269,8 @@ <h3 class="card-title mb-2">
});
}

$('#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)}}");
{% for tab_id in zone_tabs.order %}
setUpDomainList("#tbl_domain_list_{{tab_id}}", "{{url_for('dashboard.domains_custom',tab_id=tab_id)}}");
{% endfor %}
//SYBPATCH END//

Expand Down

0 comments on commit 4933351

Please sign in to comment.