Edit zone form

master
Dustin 2015-02-15 21:56:38 -06:00
parent a2cb50c674
commit 14581195a4
5 changed files with 124 additions and 70 deletions

View File

@ -128,6 +128,8 @@ class ZoneController(BaseController):
else: else:
if 'new' in request.GET: if 'new' in request.GET:
tmpl = 'new-record.html.j2' tmpl = 'new-record.html.j2'
elif 'edit' in request.GET:
tmpl = 'edit-zone.html.j2'
else: else:
tmpl = 'zone.html.j2' tmpl = 'zone.html.j2'
response.text = self.render(tmpl, zone=zone) response.text = self.render(tmpl, zone=zone)
@ -137,13 +139,22 @@ class ZoneController(BaseController):
def PUT(self, request, name): def PUT(self, request, name):
response = request.ResponseClass() response = request.ResponseClass()
response.content_type = 'application/json' response.content_type = None
data = json.loads(request.text) if request.content_type == 'application/x-www-form-urlencoded':
data = dict(request.POST)
elif request.content_type == 'application/json':
data = json.loads(request.text)
else:
raise milla.HTTPUnsupportedMediaType
zone = self.get_zone(name)
for k, v in data.items(): for k, v in data.items():
assert k != 'records' assert k != 'records'
assert hasattr(zone, k) assert hasattr(zone, k)
setattr(zone, k, v) setattr(zone, k, v)
self.session.commit() self.session.commit()
if request.want in 'xhtml':
raise milla.HTTPSeeOther(location='/zones/{}'.format(zone.name))
response.status_int = 204
return response return response
def POST(self, request, name): def POST(self, request, name):

View File

@ -0,0 +1,7 @@
{#- vim: set sw=2 ts=2 sts=2 et : -#}
{% set page_title = zone.name %}
{% extends 'zone-form.html.j2' %}
{%- block breadcrumbs %}
<li><a href="{{ url('/zones/') }}">Zones</a></li>
<li class="current"><a href="{{ url('/zones/') }}{{ zone.name }}">{{ zone.name }}</a></li>
{%- endblock %}

View File

@ -1,74 +1,8 @@
{#- vim: set sw=2 ts=2 sts=2 et : -#} {#- vim: set sw=2 ts=2 sts=2 et : -#}
{% set page_title = 'New Zone' %} {% set page_title = 'New Zone' %}
{% extends 'base.html.j2' %} {% set zone = None %}
{% extends 'zone-form.html.j2' %}
{%- block breadcrumbs %} {%- block breadcrumbs %}
<li><a href="{{ url('/zones/') }}">Zones</a></li> <li><a href="{{ url('/zones/') }}">Zones</a></li>
<li class="current"><a href="{{ url('/zones/') }}?new">New Zone</a></li> <li class="current"><a href="{{ url('/zones/') }}?new">New Zone</a></li>
{%- endblock %} {%- endblock %}
{% block body -%}
<form method="post">
{% set domain_regex = '(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{0,62}[a-zA-Z0-9]\\.)+[a-zA-Z]{2,63}$)' %}
{% set fqdn_regex = '(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{0,62}[a-zA-Z0-9]\\.)+[a-zA-Z]{2,63}\\.?$)' %}
<div class="row">
<div class="columns">
<label>Name:
<input type="text" name="name" required="requred"
pattern="{{ domain_regex }}" placeholder="example.com"
x-moz-errormessage="Please enter a valid DNS domain name." />
</label>
</div>
<div class="medium-4 columns">
<label>Contact:
<input type="text" name="contact" required="required"
pattern="{{ fqdn_regex }}" placeholder="hostmaster.example.com."
x-moz-errormessage="Please enter a valid fully-qualified DNS domain name." />
</label>
</div>
<div class="medium-4 columns">
<label>Source:
<input type="text" name="source" required="requred"
pattern="{{ fqdn_regex }}" placeholder="ns1.example.com."
x-moz-errormessage="Please enter a valid fully-qualified DNS domain name." />
</label>
</div>
<div class="medium-4 columns">
<label>Serial:
<input type="number" name="serial" placeholder="1024" />
</label>
</div>
</div>
<div class="row">
<div class="large-2 medium-4 columns">
<label><abbr title="Time To Live">TTL</abbr>:
<input type="number" name="ttl" placeholder="3600" />
</label>
</div>
<div class="large-2 medium-4 columns">
<label>Refresh Interval:
<input type="number" name="refresh" placeholder="900" />
</label>
</div>
<div class="large-2 medium-4 columns">
<label>Retry Interval:
<input type="number" name="retry" placeholder="600" />
</label>
</div>
<div class="large-2 medium-4 columns">
<label>Expiry Time:
<input type="number" name="expire" placeholder="86400" />
</label>
</div>
<div class="large-3 medium-4 columns">
<label>Minumum (default) <abbr title="Time To Live">TTL</abbr>:
<input type="number" name="minimum" placeholder="3600" />
</label>
</div>
<div class="large-1 medium-4 columns"></div>
</div>
<div class="row text-right">
<div class="columns">
<button class="small button" type="submit">Submit</button>
</div>
</div>
</form>
{% endblock %}

View File

@ -0,0 +1,101 @@
{#- vim: set sw=2 ts=2 sts=2 et : -#}
{% extends 'base.html.j2' %}
{% block body -%}
<form method="post">
{% set domain_regex = '(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{0,62}[a-zA-Z0-9]\\.)+[a-zA-Z]{2,63}$)' %}
{% set fqdn_regex = '(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{0,62}[a-zA-Z0-9]\\.)+[a-zA-Z]{2,63}\\.?$)' %}
<div class="row">
<div class="columns">
<label>Name:
<input type="text" name="name" required="requred"
pattern="{{ domain_regex }}" placeholder="example.com"
{%- if zone %} disabled="disabled"{% endif %}
x-moz-errormessage="Please enter a valid DNS domain name." />
</label>
</div>
<div class="medium-4 columns">
<label>Contact:
<input type="text" name="contact" required="required"
pattern="{{ fqdn_regex }}" placeholder="hostmaster.example.com."
{%- if zone %}
value="{{ zone.contact }}"
{%- endif %}
x-moz-errormessage="Please enter a valid fully-qualified DNS domain name." />
</label>
</div>
<div class="medium-4 columns">
<label>Source:
<input type="text" name="source" required="requred"
pattern="{{ fqdn_regex }}" placeholder="ns1.example.com."
{%- if zone %}
value="{{ zone.source }}"
{%- endif %}
x-moz-errormessage="Please enter a valid fully-qualified DNS domain name." />
</label>
</div>
<div class="medium-4 columns">
<label>Serial:
<input type="number" name="serial"
{%- if zone %}
value="{{ zone.serial }}"
{%- endif %}
placeholder="1024" />
</label>
</div>
</div>
<div class="row">
<div class="large-2 medium-4 columns">
<label><abbr title="Time To Live">TTL</abbr>:
<input type="number" name="ttl"
{%- if zone %}
value="{{ zone.ttl }}"
{%- endif %}
placeholder="3600" />
</label>
</div>
<div class="large-2 medium-4 columns">
<label>Refresh Interval:
<input type="number" name="refresh"
{%- if zone %}
value="{{ zone.refresh }}"
{%- endif %}
placeholder="900" />
</label>
</div>
<div class="large-2 medium-4 columns">
<label>Retry Interval:
<input type="number" name="retry"
{%- if zone %}
value="{{ zone.retry }}"
{%- endif %}
placeholder="600" />
</label>
</div>
<div class="large-2 medium-4 columns">
<label>Expiry Time:
<input type="number" name="expire"
{%- if zone %}
value="{{ zone.expire }}"
{%- endif %}
placeholder="86400" />
</label>
</div>
<div class="large-3 medium-4 columns">
<label>Minumum (default) <abbr title="Time To Live">TTL</abbr>:
<input type="number" name="minimum"
{%- if zone %}
value="{{ zone.minimum }}"
{%- endif %}
placeholder="3600" />
</label>
</div>
<div class="large-1 medium-4 columns"></div>
</div>
<div class="row text-right">
<div class="columns">
<button class="small button" type="submit"
{%- if zone %} name="_method" value="PUT"{% endif %}>Submit</button>
</div>
</div>
</form>
{% endblock %}

View File

@ -11,6 +11,7 @@
<div class="columns"> <div class="columns">
<button class="tiny alert button" type="submit" name="_method" value="DELETE"> <button class="tiny alert button" type="submit" name="_method" value="DELETE">
Delete</button> Delete</button>
<a class="tiny button" href="?edit">Edit</a>
</div> </div>
</form> </form>
<div class="medium-6 columns"> <div class="medium-6 columns">