Edit zone form
parent
a2cb50c674
commit
14581195a4
|
@ -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):
|
||||||
|
|
|
@ -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 %}
|
|
@ -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 %}
|
|
||||||
|
|
|
@ -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 %}
|
|
@ -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">
|
||||||
|
|
Reference in New Issue