Add full reverse dns view

This commit is contained in:
rdujardin 2016-07-26 18:26:20 +02:00
parent e9d6c923d8
commit fd98c0c2a8
4 changed files with 84 additions and 1 deletions

View File

@ -24,4 +24,7 @@ urlpatterns = [
url(r'^records/(?P<pk>\d+)/edit/$', views.RecordEditView.as_view(), name='record_edit'), url(r'^records/(?P<pk>\d+)/edit/$', views.RecordEditView.as_view(), name='record_edit'),
url(r'^records/(?P<pk>\d+)/delete/$', views.RecordDeleteView.as_view(), name='record_delete'), url(r'^records/(?P<pk>\d+)/delete/$', views.RecordDeleteView.as_view(), name='record_delete'),
# Full Reverse
url(r'^reverse/$', views.full_reverse, name='full_reverse'),
] ]

View File

@ -5,7 +5,7 @@ from django.db.models import Count
from django.shortcuts import get_object_or_404, render from django.shortcuts import get_object_or_404, render
from django.http import HttpResponse from django.http import HttpResponse
from ipam.models import IPAddress from ipam.models import IPAddress, Prefix
from utilities.paginator import EnhancedPaginator from utilities.paginator import EnhancedPaginator
from utilities.views import ( from utilities.views import (
BulkDeleteView, BulkEditView, BulkImportView, ObjectDeleteView, ObjectEditView, ObjectListView, BulkDeleteView, BulkEditView, BulkImportView, ObjectDeleteView, ObjectEditView, ObjectListView,
@ -159,3 +159,33 @@ class RecordBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
cls = Record cls = Record
form = forms.RecordBulkEditForm form = forms.RecordBulkEditForm
default_redirect_url = 'dns:record_list' default_redirect_url = 'dns:record_list'
#
# Full Reverse
#
def full_reverse(request):
zones = {}
prefixes = Prefix.objects.all()
for p in prefixes:
child_ip = IPAddress.objects.filter(address__net_contained_or_equal=str(p.prefix))
z = p.to_bind(child_ip)
for zz in z:
if not zz['id'] in zones:
zones[zz['id']] = zz['content']
zones_list = []
for zid,zc in zones.items():
zones_list.append({
'num': len(zones_list),
'id': zid,
'content': zc,
})
return render(request, 'dns/full_reverse.html', {
'zones': zones_list,
'bind_export_count': len(zones_list),
})

View File

@ -170,6 +170,8 @@
<li><a href="{% url 'dns:zone_add' %}"><i class="glyphicon glyphicon-plus" aria-hidden="true"></i> Add a zone</a></li> <li><a href="{% url 'dns:zone_add' %}"><i class="glyphicon glyphicon-plus" aria-hidden="true"></i> Add a zone</a></li>
<li><a href="{% url 'dns:zone_import' %}"><i class="glyphicon glyphicon-import" aria-hidden="true"></i> Import zones</a></li> <li><a href="{% url 'dns:zone_import' %}"><i class="glyphicon glyphicon-import" aria-hidden="true"></i> Import zones</a></li>
{% endif %} {% endif %}
<li class="divider"></li>
<li><a href="{% url 'dns:full_reverse' %}"><i class="glyphicon glyphicon-search" aria-hidden="true"></i> Full Reverse Export</a></li>
</ul> </ul>
</li> </li>
<li class="dropdown{% if request.path|startswith:'/ipam/vlan' %} active{% endif %}"> <li class="dropdown{% if request.path|startswith:'/ipam/vlan' %} active{% endif %}">

View File

@ -0,0 +1,48 @@
{% extends '_base.html' %}
{% load render_table from django_tables2 %}
{% block title %}Full Reverse DNS{% endblock %}
{% block content %}
<h1>Full Reverse DNS</h1>
<div class="row">
<div class="col-md-12">
{% for z in zones %}
<div class="panel panel-default">
<div class="panel-heading">
<strong class="text-md-left">{{ z.id }}</strong>
<a class="pull-right" id="bind_export_select_{{ z.num }}" href="#">Select</a>
</div>
<table class="table table-hover panel-body">
<tr><td>
<pre id="bind_export_{{ z.num }}" style="overflow: auto;">{{ z.content }}</pre>
</td></tr>
</table>
</div>
{% endfor %}
</div>
</div>
{% endblock %}
{% block javascript %}
<script>
for(var i=0;i<{{ bind_export_count }};i++) {
$('#bind_export_select_'+i).click(function(e){
var i_str = $(this).attr('id');
i_str = i_str.substr(i_str.lastIndexOf('_')+1);
e.preventDefault();
if(document.selection) {
var range = document.body.createTextRange();
var id='bind_export_'+i_str;
range.moveToElementText(document.getElementById(id));
range.select();
}
else if(window.getSelection) {
var range = document.createRange();
var id='bind_export_'+i_str;
range.selectNode(document.getElementById(id));
window.getSelection().addRange(range);
}
});
}
</script>
{% endblock %}