1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
{% extends "op_layout.html" %}
{% block title %}Hostnames for {{ slug }} — {{ brand_name | default(value='Rustango Operator Console') }}{% endblock %}
{% block content %}
Organizations/{{ slug }}/Hostnames
Hostnames for {{ slug }}
Every hostname this tenant answers on. Each is matched
exactly against the Host header, so a hostname belongs to
one tenant only.
{% if error %}
{{ error }}
{% endif %}
{% if notice %}
{{ notice }}
{% endif %}
hostname
source
serving
actions
{% for h in hosts %}
{{ h.hostname }}
{% if h.is_base %}
base
{% else %}
extra
{% endif %}
{% if h.enabled %}
yes
{% else %}
parked
{% endif %}
{#- The base host has no row in `rustango_org_hosts`, so there
is nothing here to toggle or delete. Saying where it *is*
editable beats showing disabled buttons. -#}
{% if h.is_base %}
set on the edit page
{% else %}
{% if h.enabled %}
Park
{% else %}
Serve
{% endif %}
Remove
{% endif %}
{% endfor %}
Add a hostname
hostname
{#- Uppercase is allowed through and lowercased by the
server, because that is what `normalize_hostname` does and
refusing here would make the browser stricter than the
thing it is previewing.
The hyphen is escaped on purpose: `[a-z0-9-]` is a syntax
error under the `v`-flag regex `pattern` now uses, and a
browser that cannot parse the attribute ignores it
silently — so the field would have no validation at all
while looking like it did. -#}
Lowercase, no https://,
no :port, no trailing dot — the value is compared
byte-for-byte with the Host header. Added serving;
park it afterwards if DNS has not propagated yet.
Add hostname
Back to tenant
{% endblock %}