wip friendly records
This commit is contained in:
parent
76aa894123
commit
7e3e927946
4 changed files with 198 additions and 76 deletions
|
@ -1,5 +1,5 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
|
74
templates/macros.html
Normal file
74
templates/macros.html
Normal file
|
@ -0,0 +1,74 @@
|
|||
{% macro rrset(rtype, ttl, data, zone) %}
|
||||
<li class="rrset">
|
||||
<div class="rtype">
|
||||
{{ rtype }}
|
||||
<div class="action">
|
||||
<button class="icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-trash" viewBox="0 0 16 16">
|
||||
<path d="M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5m2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5m3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0z"/>
|
||||
<path d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1zM4.118 4 4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4zM2.5 3h11V2h-11z"/>
|
||||
</svg>
|
||||
</button>
|
||||
<a class="button icon" href="#">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-pencil" viewBox="0 0 16 16">
|
||||
<path d="M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168zM11.207 2.5 13.5 4.793 14.793 3.5 12.5 1.207zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293zm-9.761 5.175-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325"/>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ul>
|
||||
{% for data in data %}
|
||||
<li>
|
||||
<div class="rdata">
|
||||
{% if rtype == "address" %}
|
||||
<div class="rdata-main">
|
||||
<span class="pill">
|
||||
{{ data.address }}
|
||||
</span>
|
||||
</div>
|
||||
{% elif rtype == "mailserver" %}
|
||||
<div class="rdata-main">
|
||||
<span class="pill">
|
||||
{{ data.mail_exchanger }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="rdata-complementary">
|
||||
<span class="pill">
|
||||
Preference: {{ data.preference }}
|
||||
</span>
|
||||
</div>
|
||||
{% elif rtype == "nameserver" %}
|
||||
<div class="rdata-main">
|
||||
<span class="pill">
|
||||
{{ data.target }}
|
||||
</span>
|
||||
</div>
|
||||
{% elif rtype == "service" %}
|
||||
<div class="rdata-main">
|
||||
<span class="pill">
|
||||
{% if data.service_type == "other" %}
|
||||
{{ data.service_name }}/{{ data.service_protocol }}
|
||||
{% else %}
|
||||
{{ data.service_type }}
|
||||
{% endif %}
|
||||
</span>
|
||||
<span class="pill">
|
||||
Address: {{ data.server }}:{{ data.port }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="rdata-complementary">
|
||||
<span class="pill">
|
||||
Priority: {{ data.priority }}
|
||||
</span>
|
||||
<span class="pill">
|
||||
Weight: {{ data.weight }}
|
||||
</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</li>
|
||||
{% endmacro rrset %}
|
61
templates/pages/new_record.html
Normal file
61
templates/pages/new_record.html
Normal file
|
@ -0,0 +1,61 @@
|
|||
{% extends "bases/app.html" %}
|
||||
{% block title %}New record - {{ current_zone }} - {% endblock title %}
|
||||
|
||||
{% block main %}
|
||||
<h1>Create a new record in zone {{ current_zone }}</h1>
|
||||
{% if not new_record_name or (new_record_name and domain_error) %}
|
||||
<h2>Choose the name of the new record</h2>
|
||||
<form action="" method="GET">
|
||||
<label for="subdomain">Name of the new record</label>
|
||||
<div class="input-group">
|
||||
<input
|
||||
type="text"
|
||||
name="subdomain"
|
||||
id="subdomain"
|
||||
{% if domain_error %}aria-invalid="true"{% endif %}
|
||||
aria-describedby="subdomain-help{% if domain_error %} subdomain-error{% endif %}"
|
||||
>
|
||||
<span>.{{ current_zone }}</span>
|
||||
</div>
|
||||
{% if domain_error %}
|
||||
<p class="error" id="subdomain-error">{{ domain_error.description }}</p>
|
||||
{% endif %}
|
||||
<p id="subdomain-help">Only the subdomain, without the main domain. For instance, "www" to create the subdomain "www.{{ current_zone }}".</p>
|
||||
<button type="submit">Next step</button>
|
||||
</form>
|
||||
{% elif not config and not rtype %}
|
||||
|
||||
<h2>Configure the domain {{ new_record_name }}...</h2>
|
||||
<ul>
|
||||
<li><a href="{{ url }}&config=web">Web</a></li>
|
||||
<li><a href="{{ url }}&config=mail">E-mails</a></li>
|
||||
</ul>
|
||||
<h2>...or create a new record for the domain {{ new_record_name }}</h2>
|
||||
<h3>General</h3>
|
||||
<ul>
|
||||
<li><a href="{{ url }}&rtype=address">Address (A or AAAA)</a></li>
|
||||
<li><a href="{{ url }}&rtype=alias">Alias (CNAME)</a></li>
|
||||
<li><a href="{{ url }}&rtype=text">Text (TXT)</a></li>
|
||||
<li><a href="{{ url }}&rtype=service">Service (SRV)</a></li>
|
||||
</ul>
|
||||
<h3>E-mails</h3>
|
||||
<ul>
|
||||
<li><a href="{{ url }}&rtype=service">Mail servers (MX)</a></li>
|
||||
<li><a href="{{ url }}&rtype=spf">Sender policy (SPF)</a></li>
|
||||
<li><a href="{{ url }}&rtype=dkim">Cryptographic signatures (DKIM)</a></li>
|
||||
<li><a href="{{ url }}&rtype=dmarc">Error reporting (DMARC)</a></li>
|
||||
</ul>
|
||||
<h3>Security</h3>
|
||||
<ul>
|
||||
<li><a href="{{ url }}&rtype=dane">Domain authentication (TLSA)</a></li>
|
||||
<li><a href="{{ url }}&rtype=sshfp">SSH keys fingerprint (SSHFP)</a></li>
|
||||
</ul>
|
||||
<h3>DNS Delegation</h3>
|
||||
<ul>
|
||||
<li><a href="{{ url }}&rtype=nameserver">Nameserver (NS)</a></li>
|
||||
<li><a href="{{ url }}&rtype=ds">Delegation signer (DS)</a></li>
|
||||
</ul>
|
||||
{% else %}
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
|
@ -1,9 +1,11 @@
|
|||
{% import "macros.html" as macros %}
|
||||
{% extends "bases/app.html" %}
|
||||
|
||||
{% block title %}Records - {{ current_zone }} - {% endblock title %}
|
||||
|
||||
{% block main %}
|
||||
<h1>Zone {{ current_zone }} records</h1>
|
||||
<svg width="0" height="0" aria-hidden="true">
|
||||
<h1>Zone <strong>{{ current_zone }}</strong> records</h1>
|
||||
<svg width="0" height="0" aria-hidden="true" style="position: absolute;">
|
||||
<defs>
|
||||
<clipPath id="corner-folder-tab-right" clipPathUnits="objectBoundingBox">
|
||||
<path d="m 0,0 c .25,0 0.75,1 1,1 l -1,0 z"/>
|
||||
|
@ -12,26 +14,12 @@
|
|||
</svg>
|
||||
<section>
|
||||
<h2>Records</h2>
|
||||
|
||||
{% set current_domain = '' %}
|
||||
{% set current_rtype = '' %}
|
||||
|
||||
{% for record in records %}
|
||||
{% if record.name != current_domain %}
|
||||
{% if current_domain %}
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</article>
|
||||
{% endif %}
|
||||
{% set_global current_domain = record.name %}
|
||||
{% set_global current_rtype = '' %}
|
||||
{% for group in records.records %}
|
||||
<article class="domain">
|
||||
<header>
|
||||
<h3 class="folder-tab">{{ record.name }}</h3>
|
||||
<h3 class="folder-tab">{{ group.owner }}</h3>
|
||||
<span class="sep"></span>
|
||||
<a href="#" class="button">
|
||||
<a href="{{ url }}/new?subdomain={{ group.owner | trim_end_matches(pat=current_zone) | trim_end_matches(pat=".") }}" class="button">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-plus-circle" viewBox="0 0 16 16" aria-hidden="true">
|
||||
<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16"/>
|
||||
<path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4"/>
|
||||
|
@ -40,64 +28,63 @@
|
|||
</a>
|
||||
</header>
|
||||
<div class="records">
|
||||
{% if group.web %}
|
||||
<h4>Web</h4>
|
||||
<ul>
|
||||
{% if group.web.addresses %}
|
||||
{{ macros::rrset(
|
||||
rtype=group.web.addresses.rtype,
|
||||
ttl=group.web.addresses.ttl,
|
||||
data=group.web.addresses.data,
|
||||
zone=current_zone) }}
|
||||
{% endif %}
|
||||
{% if record.type != current_rtype %}
|
||||
{% if current_rtype %}
|
||||
</ul>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% set_global current_rtype = record.type %}
|
||||
<li class="rrset">
|
||||
<span class="rtype">{{ record.type }}</span>
|
||||
|
||||
{% if group.mail %}
|
||||
<h4>E-mails</h4>
|
||||
<ul>
|
||||
<li>
|
||||
{% if group.mail.servers %}
|
||||
{{ macros::rrset(
|
||||
rtype=group.mail.servers.rtype,
|
||||
ttl=group.mail.servers.ttl,
|
||||
data=group.mail.servers.data,
|
||||
zone=current_zone) }}
|
||||
{% endif %}
|
||||
<div class="rdata">
|
||||
{% if record.type == "A" or record.type == "AAAA" %}
|
||||
<div class="rdata-main">
|
||||
<span class="pill">
|
||||
{{ record.rdata.address }}
|
||||
</span>
|
||||
</div>
|
||||
{% elif record.type == "MX" %}
|
||||
<div class="rdata-main">
|
||||
<span class="pill">
|
||||
{{ record.rdata.mail_exchanger }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="rdata-complementary">
|
||||
<span class="pill">
|
||||
Preference: {{ record.rdata.mail_exchanger }}
|
||||
</span>
|
||||
</div>
|
||||
{% elif record.type == "NS" %}
|
||||
<div class="rdata-main">
|
||||
<span class="pill">
|
||||
{{ record.rdata.target }}
|
||||
</span>
|
||||
</div>
|
||||
{% if group.mail.spf %}
|
||||
{{ macros::rrset(
|
||||
rtype=group.mail.spf.rtype,
|
||||
ttl=group.mail.spf.ttl,
|
||||
data=group.mail.spf.data,
|
||||
zone=current_zone) }}
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="action">
|
||||
<button class="icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-trash" viewBox="0 0 16 16">
|
||||
<path d="M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5m2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5m3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0z"/>
|
||||
<path d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1zM4.118 4 4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4zM2.5 3h11V2h-11z"/>
|
||||
</svg>
|
||||
</button>
|
||||
<a class="button icon" href="#">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-pencil" viewBox="0 0 16 16">
|
||||
<path d="M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168zM11.207 2.5 13.5 4.793 14.793 3.5 12.5 1.207zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293zm-9.761 5.175-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325"/>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
{% if group.general_records %}
|
||||
<h4>General</h4>
|
||||
<ul>
|
||||
{% for rrset in group.general_records %}
|
||||
{{ macros::rrset(
|
||||
rtype=rrset.rtype,
|
||||
ttl=rrset.ttl,
|
||||
data=rrset.data,
|
||||
zone=current_zone) }}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
</article>
|
||||
{% endfor %}
|
||||
</section>
|
||||
<section>
|
||||
<h2>Aliases</h2>
|
||||
|
||||
<ul>
|
||||
{% for alias in records.aliases %}
|
||||
<li>{{ alias.from }} → {{ alias.target }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</section>
|
||||
{% endblock main %}
|
||||
|
|
Loading…
Reference in a new issue