diff options
Diffstat (limited to 'src/lib/Server')
15 files changed, 318 insertions, 39 deletions
diff --git a/src/lib/Server/Hostbase/hostbase/models.py b/src/lib/Server/Hostbase/hostbase/models.py index 7c47b65bd..3216944ea 100644 --- a/src/lib/Server/Hostbase/hostbase/models.py +++ b/src/lib/Server/Hostbase/hostbase/models.py @@ -141,6 +141,15 @@ class Nameserver(models.Model): class Admin: pass +class ZoneAddress(models.Model): + ip_addr = models.IPAddressField() + + def __str__(self): + return self.ip_addr + + class Admin: + pass + class Zone(models.Model): zone = models.CharField(maxlength=64) serial = models.IntegerField() @@ -152,7 +161,7 @@ class Zone(models.Model): ttl = models.IntegerField() nameservers = models.ManyToManyField(Nameserver) mxs = models.ManyToManyField(MX) - addresses = models.ManyToManyField(IP, blank=True) + addresses = models.ManyToManyField(ZoneAddress, blank=True) aux = models.TextField(blank=True) def __str__(self): diff --git a/src/lib/Server/Hostbase/hostbase/views.py b/src/lib/Server/Hostbase/hostbase/views.py index 757b43da0..e9673e0a1 100644 --- a/src/lib/Server/Hostbase/hostbase/views.py +++ b/src/lib/Server/Hostbase/hostbase/views.py @@ -16,6 +16,9 @@ attribs = ['hostname', 'whatami', 'netgroup', 'security_class', 'support', 'csi', 'printq', 'primary_user', 'administrator', 'location', 'comments', 'status'] +zoneattribs = ['zone', 'admin', 'primary_master', 'expire', 'retry', + 'refresh', 'ttl', 'aux'] + dispatch = {'mac_addr':'i.mac_addr LIKE \'%%%%%s%%%%\'', 'ip_addr':'p.ip_addr LIKE \'%%%%%s%%%%\'', 'name':'n.name LIKE \'%%%%%s%%%%\'', @@ -712,28 +715,48 @@ def validate(request, new=False, host_id=None): return 0 return failures -def push(request): - if request.GET.has_key('sub'): - # do xmlrpc function here - return HttpResponse("TBD") - else: - temp = Template(open('%s/push.html' % templatedir).read()) - temp.dirtyhosts = Host.objects.filter(dirty=True) - return HttpResponse(str(temp)) - def zones(request): zones = Zone.objects.all() - temp = Template(open('%s/zones.html' % templatedir).read()) - temp.zones = zones - return HttpResponse(str(temp)) + return render_to_response('zones.html', + {'zones': zones}) def zoneview(request, zone_id): zone = Zone.objects.get(id=zone_id) - temp = Template(open('%s/zoneview.html' % templatedir).read()) - temp.zone = zone - aux = zone.aux.split('\n') - temp.aux = aux - temp.nameservers = zone.nameservers.all() - temp.mxs = zone.mxs.all() - temp.addresses = zone.addresses.all() - return HttpResponse(str(temp)) + return render_to_response('zoneview.html', + {'zone': zone, + 'nameservers': zone.nameservers.all(), + 'mxs': zone.mxs.all(), + 'addresses': zone.addresses.all() + }) + +def zoneedit(request, zone_id): + if request.has_key('sub'): + zone = Zone.objects.get(id=zone_id) + for attrib in zoneattribs: + if request.POST.has_key(attrib): + zone.__dict__[attrib] = request.POST[attrib] + count = 0 +## for nameserver in zone.nameservers.all(): +## nameserver.name = request.POST['nameserver%i' % count] +## nameserver.save() +## count += 1 +## count = 0 +## for mx in zone.mxs.all(): +## mx.priority = request.POST['priority%i' % count] +## mx.mx = request.POST['mx%i' % count] +## mx.save() +## count += 1 +## count = 0 +## for address in zone.addresses.all(): +## address.ip_addr = request.POST['address%i' % count] +## count += 1 + zone.save() + return HttpResponseRedirect('/hostbase/zones/%s/' % zone.id) + else: + zone = Zone.objects.get(id=zone_id) + return render_to_response('zoneedit.html', + {'zone': zone, + 'nameservers': zone.nameservers.all(), + 'mxs': zone.mxs.all(), + 'addresses': zone.addresses.all() + }) diff --git a/src/lib/Server/Hostbase/hostbase/webtemplates/confirm.html b/src/lib/Server/Hostbase/hostbase/webtemplates/confirm.html index e89c21247..c7761c3ea 100644 --- a/src/lib/Server/Hostbase/hostbase/webtemplates/confirm.html +++ b/src/lib/Server/Hostbase/hostbase/webtemplates/confirm.html @@ -8,8 +8,7 @@ {% endblock %} {% block sidebar %} -<a href="/hostbase/" class="sidebar">new search</a><br> -<a href="/hostbase/" class="sidebar">add a new host</a> +{% include "navbar" %} {% endblock %} {% block content %} diff --git a/src/lib/Server/Hostbase/hostbase/webtemplates/dns.html b/src/lib/Server/Hostbase/hostbase/webtemplates/dns.html index 1ffb0297a..1db012852 100644 --- a/src/lib/Server/Hostbase/hostbase/webtemplates/dns.html +++ b/src/lib/Server/Hostbase/hostbase/webtemplates/dns.html @@ -8,8 +8,7 @@ {% endblock %} {% block sidebar %} -<a href="/hostbase/" class="sidebar">new search</a><br> -<a href="/hostbase/" class="sidebar">add a new host</a> +{% include "navbar" %} <ul class="sidebar"> <li><a href="/hostbase/{{ host.id }}/" class="sidebar">host info</a></li> <li><a href="/hostbase/{{ host.id }}/edit/" class="sidebar">edit host info</a></li> diff --git a/src/lib/Server/Hostbase/hostbase/webtemplates/dnsedit.html b/src/lib/Server/Hostbase/hostbase/webtemplates/dnsedit.html index a5a4088eb..1d6245e81 100644 --- a/src/lib/Server/Hostbase/hostbase/webtemplates/dnsedit.html +++ b/src/lib/Server/Hostbase/hostbase/webtemplates/dnsedit.html @@ -8,8 +8,7 @@ {% endblock %} {% block sidebar %} -<a href="/hostbase/" class="sidebar">new search</a><br> -<a href="/hostbase/" class="sidebar">add a new host</a> +{% include "navbar" %} <ul class="sidebar"> <li><a href="/hostbase/{{ host.id }}/" class="sidebar">host info</a></li> <li><a href="/hostbase/{{ host.id }}/edit/" class="sidebar">edit host info</a></li> diff --git a/src/lib/Server/Hostbase/hostbase/webtemplates/edit.html b/src/lib/Server/Hostbase/hostbase/webtemplates/edit.html index 19094e112..efc308def 100644 --- a/src/lib/Server/Hostbase/hostbase/webtemplates/edit.html +++ b/src/lib/Server/Hostbase/hostbase/webtemplates/edit.html @@ -8,9 +8,8 @@ {% endblock %} {% block sidebar %} -<a href="/hostbase/" class="sidebar">new search</a><br> -<a href="/hostbase/new/" class="sidebar">add a new host</a> -<ul> +{% include "navbar" %} +<ul class="sidebar"> <li><a href="/hostbase/{{ host.id }}/" class="sidebar">host info</a></li> <li><a href="/hostbase/{{ host.id }}/dns/" class="sidebar">detailed dns info</a></li> <li><a href="/hostbase/{{ host.id }}/dns/edit/" class="sidebar">edit dns info</a></li> @@ -47,12 +46,13 @@ div#interface{ <form name="hostdata" action="?sub=true" method="post"> <input type="hidden" name="host" value="{{ host.id }}"> +<input type="hidden" name="hostname" value="{{ host.hostname }}"> <table border="0" width="100%"> <colgroup> <col width="150"> <col width="*"> <tr> <td> <b>hostname</b></td> - <td> <input name="hostname" type="text" value="{{ host.hostname }}"></td></tr> + <td> {{ host.hostname }}</td></tr> <tr> <td> <b>whatami</b></td> <td> <select name="whatami"> diff --git a/src/lib/Server/Hostbase/hostbase/webtemplates/errors.html b/src/lib/Server/Hostbase/hostbase/webtemplates/errors.html index c240651fe..d321c529f 100644 --- a/src/lib/Server/Hostbase/hostbase/webtemplates/errors.html +++ b/src/lib/Server/Hostbase/hostbase/webtemplates/errors.html @@ -8,8 +8,7 @@ {% endblock %} {% block sidebar %} -<a href="/hostbase/" class="sidebar">new search</a><br> -<a href="/hostbase/" class="sidebar">add a new host</a> +{% include "navbar" %} {% endblock %} {% block content %} diff --git a/src/lib/Server/Hostbase/hostbase/webtemplates/host.html b/src/lib/Server/Hostbase/hostbase/webtemplates/host.html index 3b09cbc6b..088befe88 100644 --- a/src/lib/Server/Hostbase/hostbase/webtemplates/host.html +++ b/src/lib/Server/Hostbase/hostbase/webtemplates/host.html @@ -8,8 +8,7 @@ {% endblock %} {% block sidebar %} -<a href="/hostbase/" class="sidebar">new search</a><br> -<a href="/hostbase/new/" class="sidebar">add a new host</a> +{% include "navbar" %} <ul class="sidebar"> <li><a href="dns/" class="sidebar">detailed dns info</a></li> <li><a href="edit/" class="sidebar">edit host info</a></li> diff --git a/src/lib/Server/Hostbase/hostbase/webtemplates/navbar b/src/lib/Server/Hostbase/hostbase/webtemplates/navbar new file mode 100644 index 000000000..767601aca --- /dev/null +++ b/src/lib/Server/Hostbase/hostbase/webtemplates/navbar @@ -0,0 +1,2 @@ +<a href="/hostbase/" class="sidebar">new search</a><br> +<a href="/hostbase/new" class="sidebar">add a new host</a> diff --git a/src/lib/Server/Hostbase/hostbase/webtemplates/results.html b/src/lib/Server/Hostbase/hostbase/webtemplates/results.html index c9b634177..6fb45692e 100644 --- a/src/lib/Server/Hostbase/hostbase/webtemplates/results.html +++ b/src/lib/Server/Hostbase/hostbase/webtemplates/results.html @@ -8,8 +8,7 @@ {% endblock %} {% block sidebar %} -<a href="/hostbase/" class="sidebar">new search</a><br> -<a href="/hostbase/" class="sidebar">add a new host</a> +{% include "navbar" %} {% endblock %} {% block content %} diff --git a/src/lib/Server/Hostbase/hostbase/webtemplates/zoneedit.html b/src/lib/Server/Hostbase/hostbase/webtemplates/zoneedit.html new file mode 100644 index 000000000..918f80398 --- /dev/null +++ b/src/lib/Server/Hostbase/hostbase/webtemplates/zoneedit.html @@ -0,0 +1,146 @@ +{% extends "base.html" %} + +{% block pagebanner %} + <div class="header"> + <h2>Zones</h2> + <p>Edit information for {{ zone.zone }} + </div> + <br/> +{% endblock %} + +{% block sidebar %} +{% include "navbar" %} +{% endblock %} + +{% block content %} + +<script language=JavaScript type=text/Javascript> +function toggleField(fieldname){ + if(document.getElementById){ + var style = document.getElementById(fieldname).style; + style.display = style.display? "":"block"; + } +} +</script> + +<style type=text/css> +div#nameserver{ + display: none; +} +div#mx{ + display: none; +} +div#address{ + display: none; +} +</style> + +<form name="zonedata" action="?sub=true" method="post"> +<input type="hidden" name="zone" value="{{ zone.id }}"> +<table border="0" width="100%"> + <colgroup> + <col width="200"> + <col width="*"> + <tr> <td> <b>zone</b></td> + <td> <input name="zone" type="text" size="32" value="{{ zone.zone }}"></td></tr> + <tr> <td> <b>admin</b></td> + <td> <input name="admin" type="text" size="32" value="{{ zone.admin }}"></td></tr> + <tr> <td> <b>primary_master</b></td> + <td> <input name="primary_master" type="text" size="32" value="{{ zone.primary_master }}"></td></tr> + <tr> <td> <b>expire</b></td> + <td> <input name="expire" type="text" size="32" value="{{ zone.expire }}"></td></tr> + <tr> <td> <b>retry</b></td> + <td> <input name="retry" type="text" size="32" value="{{ zone.retry }}"></td></tr> + <tr> <td> <b>refresh</b></td> + <td> <input name="refresh" type="text" size="32" value="{{ zone.refresh }}"></td></tr> + <tr> <td> <b>ttl</b></td> + <td> <input name="ttl" type="text" size="32" value="{{ zone.ttl }}"></td></tr> + + <tr><td valign="top"> <b>nameservers</b><br> + <a style="font-size:75%" href=# onclick="toggleField('nameserver')">add a new NS record</a> + </td> + <td> + {% for nameserver in nameservers %} + <input name="nameserver{{ forloop.counter0 }}" type="text" size="32" value="{{ nameserver.name }}"><br> + {% endfor %} + </td></tr> + </table> + <div id=nameserver> + <table border="0" width="100%"> + <colgroup> + <col width="200"> + <col width="*"> + <tr> <td></td> + <td> <input name="new_nameserver" size="32" type="text"></td></tr> + </table> + </div> + <table border="0" width="100%"> + <colgroup> + <col width="200"> + <col width="*"> + <tr><td valign="top"> <b>mxs</b><br> + <a style="font-size:75%" href=# onclick="toggleField('mx')">add a new MX record</a> + </td> + <td> + {% for mx in mxs %} + <input name="priority{{ forloop.counter0 }}" type="text" size="6" value="{{ mx.priority }}"> + <input name="mx{{ forloop.counter0 }}" type="text" size="32" value="{{ mx.mx }}"><br> + {% endfor %} + </td></tr> + </table> + <div id=mx> + <table border="0" width="100%"> + <colgroup> + <col width="200"> + <col width="*"> + <tr> <td></td> + <td> <input name="new_priority" type="text" size="6" > + <input name="new_mx" type="text" size="32" > + </td></tr> + </table> + </div> + <table border="0" width="100%"> + <colgroup> + <col width="200"> + <col width="*"> + <tr><td valign="top"> <b>A records</b><br> + {% if addresses %} + <a style="font-size:75%" href=# onclick="toggleField('address')">add a new MX record</a> + {% endif %} + </td> + <td> + {% if addresses %} + {% for address in addresses %} + <input name="address{{ forloop.counter0 }}" type="text" value="{{ address.ip_addr }}"><br> + {% endfor %} + </td></tr> + </table> + <div id=address> + <table border="0" width="100%"> + <colgroup> + <col width="200"> + <col width="*"> + <tr> <td></td> + <td> <input name="new_address" type="text" > + </td></tr> + </table> + </div> + <table border="0" width="100%"> + <colgroup> + <col width="200"> + <col width="*"> + {% else %} + <input name="new_address" type="text" value="none" > + {% endif %} + </td></tr> + + <tr> <td valign="top"> <b>aux</b> (for information not generated by the database)</td> + <td> <textarea rows="20" cols="80" name="aux">{{ zone.aux }}</textarea></td></tr> + </td></tr> + +</table> +<p><input type="submit" value="Submit"> +</form> + +{% endblock %} + diff --git a/src/lib/Server/Hostbase/hostbase/webtemplates/zones.html b/src/lib/Server/Hostbase/hostbase/webtemplates/zones.html new file mode 100644 index 000000000..dcf9a3431 --- /dev/null +++ b/src/lib/Server/Hostbase/hostbase/webtemplates/zones.html @@ -0,0 +1,37 @@ +{% extends "base.html" %} + +{% block pagebanner %} + <div class="header"> + <h2>Zones</h2> + <p>Hostbase generates DNS zone files for the following zones. + </div> + <br/> +{% endblock %} + +{% block sidebar %} +{% include "navbar" %} +{% endblock %} + +{% block content %} + +{% if zones %} +<table border="0" width="100%"> + <colgroup> + <col width="200"> + <col width="75"> + <col width="50"> + <col width="*"> + <tr> <td><b>zone</b></td> + </tr> + {% for zone in zones %} + <tr> <td> {{ zone.zone }}</td> + <td> <a href="{{ zone.id }}">view</a> </td> + <td> <a href="{{ zone.id }}/edit">edit</a> </td> + </tr> + {% endfor %} +</table> +{% else %} +There is no zone data currently in the database<br> +{% endif %} +{% endblock %} + diff --git a/src/lib/Server/Hostbase/hostbase/webtemplates/zoneview.html b/src/lib/Server/Hostbase/hostbase/webtemplates/zoneview.html new file mode 100644 index 000000000..c7ac36402 --- /dev/null +++ b/src/lib/Server/Hostbase/hostbase/webtemplates/zoneview.html @@ -0,0 +1,66 @@ +{% extends "base.html" %} + +{% block pagebanner %} + <div class="header"> + <h2>Zones</h2> + <p>Hostbase generates DNS zone files for the following zones. + </div> + <br/> +{% endblock %} + +{% block sidebar %} +{% include "navbar" %} +{% endblock %} + +{% block content %} +<table border="0" width="100%"> + <colgroup> + <col width="200"> + <col width="*"> + <tr> <td> <b>zone</b></td> + <td> {{ zone.zone }}</td></tr> + <tr> <td> <b>serial</b></td> + <td> {{ zone.serial }}</td></tr> + <tr> <td> <b>admin</b></td> + <td> {{ zone.admin }}</td></tr> + <tr> <td> <b>primary_master</b></td> + <td> {{ zone.primary_master }}</td></tr> + <tr> <td> <b>expire</b></td> + <td> {{ zone.expire }}</td></tr> + <tr> <td> <b>retry</b></td> + <td> {{ zone.retry }}</td></tr> + <tr> <td> <b>refresh</b></td> + <td> {{ zone.refresh }}</td></tr> + <tr> <td> <b>ttl</b></td> + <td> {{ zone.ttl }}</td></tr> + + <tr><td valign="top"> <b>nameservers</b></td> + <td> + {% for nameserver in nameservers %} + {{ nameserver.name }}<br> + {% endfor %} + </td></tr> + <tr><td valign="top"> <b>mxs</b></td> + <td> + {% for mx in mxs %} + {{ mx.priority }} {{ mx.mx }}<br> + {% endfor %} + </td></tr> + {% if addresses %} + <tr><td valign="top"> <b>A records</b></td> + <td> + {% for address in addresses %} + {{ address.ip_addr }}<br> + {% endfor %} + </td></tr> + {% endif %} + + <tr> <td valign="top"> <b>aux</b></td> + <td> + {{ zone.aux|linebreaksbr }} + </td></tr> + +</table> +<br><br> +{% endblock %} + diff --git a/src/lib/Server/Hostbase/urls.py b/src/lib/Server/Hostbase/urls.py index 49c498297..526990d95 100644 --- a/src/lib/Server/Hostbase/urls.py +++ b/src/lib/Server/Hostbase/urls.py @@ -16,5 +16,7 @@ urlpatterns = patterns('Hostbase.hostbase.views', (r'^hostbase/(?P<host_id>\d+)/dns', 'dns'), (r'^hostbase/new', 'new'), (r'^hostbase/hostinfo', 'hostinfo'), - (r'^hostbase/zones', 'zones'), + (r'^hostbase/zones/$', 'zones'), + (r'^hostbase/zones/(?P<zone_id>\d+)/$', 'zoneview'), + (r'^hostbase/zones/(?P<zone_id>\d+)/edit', 'zoneedit'), ) diff --git a/src/lib/Server/Plugins/Hostbase.py b/src/lib/Server/Plugins/Hostbase.py index 589d8920b..f4381d4b9 100644 --- a/src/lib/Server/Plugins/Hostbase.py +++ b/src/lib/Server/Plugins/Hostbase.py @@ -137,7 +137,7 @@ class Hostbase(Plugin): WHERE z.zone_id = \'%s\'""" % zone[0]) self.templates['zone'].nameservers = cursor.fetchall() cursor.execute("""SELECT i.ip_addr FROM hostbase_zone_addresses z - INNER JOIN hostbase_ip i ON z.ip_id = i.id + INNER JOIN hostbase_zoneaddress i ON z.zoneaddress_id = i.id WHERE z.zone_id = \'%s\'""" % zone[0]) self.templates['zone'].addresses = cursor.fetchall() cursor.execute("""SELECT m.priority, m.mx FROM hostbase_zone_mxs z |