mirror of
https://forge.dns-witch.net/dns-witch/nomilo.git
synced 2026-07-02 20:55:03 +02:00
373 lines
15 KiB
HTML
373 lines
15 KiB
HTML
<h1>{{ tr(msg="record-config-mail-heading", name=new_record_name) }}</h1>
|
|
|
|
<form id="main-form" method="post" action="">
|
|
{% include "partials/advanced_mode.html" %}
|
|
|
|
<h3>{{ tr(msg="record-config-section-mail", attr="servers") }}</h3>
|
|
|
|
|
|
{% if advanced %}
|
|
<div class="form-input">
|
|
{{
|
|
<form.input
|
|
id="mailservers-ttl"
|
|
name="mailservers[ttl]"
|
|
value={input_data?.mailservers?.ttl}
|
|
type="number"
|
|
errors={errors}
|
|
errors_keys={[ "/mailservers/ttl" ]}
|
|
error_msg_id="record-input-ttl"
|
|
description={tr(msg="record-input-ttl", attr="help")}
|
|
label={tr(msg="record-input-ttl", attr="input-label")}
|
|
lang={lang}
|
|
/>
|
|
}}
|
|
</div>
|
|
{% else %}
|
|
<input
|
|
type="hidden"
|
|
name="mailservers[ttl]"
|
|
value="{{ input_data?.mailservers?.ttl | default(value="") }}"
|
|
>
|
|
{% endif %}
|
|
|
|
{%- for mailserver in input_data?.mailservers?.data?.mailservers or [none] -%}
|
|
{% if advanced %}
|
|
<fieldset class="group" data-new-item-template="mailserver">
|
|
<legend>
|
|
<span data-new-item-template-content="{{ tr(msg="record-input-mailservers-fieldset", attr="legend", index="{i}") }}">
|
|
{{ tr(msg="record-input-mailservers-fieldset", attr="legend", index=loop.index) }}
|
|
</span>
|
|
<button type="button" class="primary icon" data-delete-item>
|
|
{{ <icon.trash /> }}
|
|
<span class="visually-hidden" data-new-item-template-content="{{ tr(msg="record-input-mailservers-fieldset", attr="delete-button", index="{i}") }}">
|
|
{{ tr(msg="record-input-mailservers-fieldset", attr="delete-button", index=loop.index) }}
|
|
</span>
|
|
</button>
|
|
</legend>
|
|
|
|
{% set mailserver_error = errors | get(key="/mailservers/data", default="") %}
|
|
{% if mailserver_error %}
|
|
<p class="error" id="mailserver-fieldset-error">
|
|
{{ tr(
|
|
msg="record-input-mailservers-fieldset",
|
|
attr="error-" ~ mailserver_error.code | replace(from=":", to="-")) }}
|
|
</p>
|
|
{% set extra_errors = "mailserver-fieldset-error" %}
|
|
{% else %}
|
|
{% set extra_errors = "" %}
|
|
{% endif %}
|
|
|
|
<div class="form-input">
|
|
{{
|
|
<form.input
|
|
id={"mailserver-mail_exchanger-" ~ loop.index0}
|
|
name={"mailservers[data][mailservers][" ~loop.index0 ~ "][mail_exchanger]"}
|
|
value={mailserver?.mail_exchanger}
|
|
type="text"
|
|
errors={errors}
|
|
errors_keys={[ "/mailservers/data/mailservers/" ~ loop.index0 ~ "/mail_exchanger" ]}
|
|
error_msg_id="record-input-mailservers-server-name"
|
|
extra_errors={extra_errors}
|
|
label={tr(msg="record-input-mailservers-server-name", attr="input-label")}
|
|
label_attributes={ {
|
|
"data-new-item-template-attr": "for",
|
|
"data-template-for": "mailserver-mail_exchanger-{i}",
|
|
} }
|
|
attributes={ {
|
|
"data-new-item-template-attr": "name id",
|
|
"data-template-name": "mailservers[data][mailservers][{i}][mail_exchanger]",
|
|
"data-template-id": "mailserver-mail_exchanger-{i}",
|
|
} }
|
|
lang={lang}
|
|
/>
|
|
}}
|
|
|
|
{{
|
|
<form.input
|
|
id={"mailserver-preference-" ~ loop.index0}
|
|
name={"mailservers[data][mailservers][" ~loop.index0 ~ "][preference]"}
|
|
value={mailserver?.preference}
|
|
type="text"
|
|
errors={errors}
|
|
errors_keys={["/mailservers/data/mailservers/" ~ loop.index0 ~ "/preference"]}
|
|
error_msg_id="record-input-mailservers-preference"
|
|
extra_errors={extra_errors}
|
|
label={tr(msg="record-input-mailservers-preference", attr="input-label")}
|
|
label_attributes={ {
|
|
"data-new-item-template-attr": "for",
|
|
"data-template-for": "mailserver-preference-{i}",
|
|
} }
|
|
attributes={ {
|
|
"data-new-item-template-attr": "name id",
|
|
"data-template-name": "mailservers[data][mailservers][{i}][preference]",
|
|
"data-template-id": "mailserver-preference-{i}",
|
|
} }
|
|
lang={lang}
|
|
/>
|
|
}}
|
|
</div>
|
|
|
|
</fieldset>
|
|
{% else %}
|
|
<div class="form-input" data-new-item-template="mailserver">
|
|
{{
|
|
<form.input
|
|
id={"mailserver-mail_exchanger-" ~ loop.index0}
|
|
name={"mailservers[data][mailservers][" ~loop.index0 ~ "][mail_exchanger]"}
|
|
value={mailserver?.mail_exchanger}
|
|
type="text"
|
|
errors={errors}
|
|
errors_keys={[
|
|
"/mailservers/data",
|
|
"/mailservers/data/mailservers/" ~ loop.index0 ~ "/mail_exchanger"
|
|
]}
|
|
error_msg_id="record-input-mailservers-server-name"
|
|
label={tr(msg="record-input-mailservers-fieldset", attr="legend", index=loop.index)}
|
|
label_attributes={ {
|
|
"data-new-item-template-attr": "for",
|
|
"data-template-for": "mailserver-mail_exchanger-{i}",
|
|
"data-new-item-template-content": tr(msg="record-input-mailservers-fieldset", attr="legend", index="{i}")
|
|
} }
|
|
delete_button_msg={tr(msg="record-input-mailservers-fieldset", attr="delete-button", index=loop.index)}
|
|
delete_button_msg_template={tr(msg="record-input-mailservers-fieldset", attr="delete-button", index="{i}")}
|
|
attributes={ {
|
|
"data-new-item-template-attr": "name id",
|
|
"data-template-name": "mailservers[data][mailservers][{i}][mail_exchanger]",
|
|
"data-template-id": "mailserver-mail_exchanger-{i}",
|
|
} }
|
|
lang={lang}
|
|
/>
|
|
}}
|
|
<input
|
|
type="hidden"
|
|
name="mailservers[data][mailservers][{{ loop.index0 }}][preference]"
|
|
value="{{ mailserver?.preference | default(value="") }}"
|
|
data-new-item-skip
|
|
>
|
|
</div>
|
|
|
|
{% endif %}
|
|
{%- endfor -%}
|
|
|
|
<button class="link" type="button" data-new-item="mailserver">
|
|
{{ <icon.plus_circle /> }}
|
|
{{ tr(msg="button-add-mailserver") }}
|
|
</button>
|
|
|
|
<h3>{{ tr(msg="record-config-section-mail", attr="security") }}</h3>
|
|
|
|
{% if advanced %}
|
|
<fieldset class="group">
|
|
<legend>{{ tr(msg="record-input-spf-fieldset", attr="legend") }}</legend>
|
|
<div class="form-input">
|
|
{{
|
|
<form.input
|
|
id="spf-policy"
|
|
name="spf[data][policy]"
|
|
value={input_data?.spf?.data?.policy}
|
|
type="number"
|
|
errors={errors}
|
|
errors_keys={[ "/spf/data/policy" ]}
|
|
error_msg_id="record-input-spf"
|
|
label={tr(msg="record-input-spf", attr="input-label")}
|
|
lang={lang}
|
|
/>
|
|
}}
|
|
|
|
{{
|
|
<form.input
|
|
id="spf-ttl"
|
|
name="spf[ttl]"
|
|
value={input_data?.spf?.ttl}
|
|
type="number"
|
|
errors={errors}
|
|
errors_keys={[ "/spf/ttl" ]}
|
|
error_msg_id="record-input-ttl"
|
|
description={tr(msg="record-input-ttl", attr="help")}
|
|
label={tr(msg="record-input-ttl", attr="input-label")}
|
|
lang={lang}
|
|
/>
|
|
}}
|
|
</div>
|
|
</fieldset>
|
|
|
|
<fieldset class="group">
|
|
<legend>{{ tr(msg="record-input-dmarc-fieldset", attr="legend") }}</legend>
|
|
<div class="form-input">
|
|
{{
|
|
<form.input
|
|
id="dmarc-policy"
|
|
name="dmarc[data][policy]"
|
|
value={input_data?.dmarc?.data?.policy}
|
|
type="number"
|
|
errors={errors}
|
|
errors_keys={[ "/dmarc/data/policy" ]}
|
|
error_msg_id="record-input-dmarc"
|
|
label={tr(msg="record-input-dmarc", attr="input-label")}
|
|
lang={lang}
|
|
/>
|
|
}}
|
|
|
|
{{
|
|
<form.input
|
|
id="dmarc-ttl"
|
|
name="dmarc[ttl]"
|
|
value={input_data?.dmarc?.ttl}
|
|
type="number"
|
|
errors={errors}
|
|
errors_keys={[ "/dmarc/ttl" ]}
|
|
error_msg_id="record-input-ttl"
|
|
description={tr(msg="record-input-ttl", attr="help")}
|
|
label={tr(msg="record-input-ttl", attr="input-label")}
|
|
lang={lang}
|
|
/>
|
|
}}
|
|
</div>
|
|
</fieldset>
|
|
{% else %}
|
|
<div class="form-input">
|
|
{{
|
|
<form.input
|
|
id="spf-policy"
|
|
name="spf[data][policy]"
|
|
value={input_data?.spf?.data?.policy}
|
|
type="number"
|
|
errors={errors}
|
|
errors_keys={[ "/spf/data/policy" ]}
|
|
error_msg_id="record-input-spf"
|
|
label={tr(msg="record-input-spf-fieldset", attr="legend")}
|
|
lang={lang}
|
|
/>
|
|
}}
|
|
</div>
|
|
|
|
<input
|
|
type="hidden"
|
|
name="spf[ttl]"
|
|
value="{{ input_data?.spf?.ttl | default(value="") }}"
|
|
>
|
|
|
|
<div class="form-input">
|
|
{{
|
|
<form.input
|
|
id="dmarc-policy"
|
|
name="dmarc[data][policy]"
|
|
value={input_data?.dmarc?.data?.policy}
|
|
type="number"
|
|
errors={errors}
|
|
errors_keys={[ "/dmarc/data/policy" ]}
|
|
error_msg_id="record-input-dmarc"
|
|
label={tr(msg="record-input-dmarc-fieldset", attr="legend")}
|
|
lang={lang}
|
|
/>
|
|
}}
|
|
</div>
|
|
|
|
<input
|
|
type="hidden"
|
|
name="dmarc[ttl]"
|
|
value="{{ input_data?.dmarc?.ttl | default(value="") }}"
|
|
>
|
|
{% endif %}
|
|
|
|
<h3>{{ tr(msg="record-config-section-mail", attr="dkim") }}</h3>
|
|
|
|
{% if advanced %}
|
|
<div class="form-input">
|
|
{{
|
|
<form.input
|
|
id="dkim-ttl"
|
|
name="dkim_keys[ttl]"
|
|
value={input_data?.dkim_keys?.ttl}
|
|
type="number"
|
|
errors={errors}
|
|
errors_keys={[ "/dkim_keys/ttl" ]}
|
|
error_msg_id="record-input-ttl"
|
|
description={tr(msg="record-input-ttl", attr="help")}
|
|
label={tr(msg="record-input-ttl", attr="input-label")}
|
|
lang={lang}
|
|
/>
|
|
}}
|
|
</div>
|
|
{% else %}
|
|
<input
|
|
type="hidden"
|
|
name="dkim_keys[ttl]"
|
|
value="{{ input_data?.dkim_keys?.ttl | default(value="") }}"
|
|
>
|
|
{% endif %}
|
|
|
|
{%- for dkim in input_data?.dkim_keys?.data?.dkim_keys or [none] -%}
|
|
<fieldset class="group" data-new-item-template="dkim-key">
|
|
<legend>
|
|
<span data-new-item-template-content="{{ tr(msg="record-input-dkim-fieldset", attr="legend", index="{i}") }}">
|
|
{{ tr(msg="record-input-dkim-fieldset", attr="legend", index=1) }}
|
|
</span>
|
|
<button type="button" class="primary icon" data-delete-item>
|
|
{{ <icon.trash /> }}
|
|
<span class="visually-hidden" data-new-item-template-content="{{ tr(msg="record-input-dkim-fieldset", attr="delete-button", index="{i}") }}">
|
|
{{ tr(msg="record-input-dkim-fieldset", attr="delete-button", index=loop.index) }}
|
|
</span>
|
|
</button>
|
|
</legend>
|
|
|
|
<div class="form-input">
|
|
{{
|
|
<form.input
|
|
id={"dkim-selector-" ~ loop.index0}
|
|
name={"dkim_keys[data][dkim_keys][" ~loop.index0 ~ "][selector]"}
|
|
value={dkim?.selector}
|
|
type="text"
|
|
errors={errors}
|
|
errors_keys={[ "/dkim_keys/data/dkim_keys/" ~ loop.index0 ~ "/selector" ]}
|
|
error_msg_id="record-input-dkim-selector"
|
|
label={tr(msg="record-input-dkim-selector", attr="input-label")}
|
|
label_attributes={ {
|
|
"data-new-item-template-attr": "for",
|
|
"data-template-for": "dkim-selector-{i}",
|
|
} }
|
|
attributes={ {
|
|
"data-new-item-template-attr": "name id",
|
|
"data-template-name": "dkim_keys[data][dkim_keys][{i}][selector]",
|
|
"data-template-id": "dkim-selector-{i}",
|
|
} }
|
|
lang={lang}
|
|
/>
|
|
}}
|
|
|
|
{{
|
|
<form.input
|
|
id={"dkim-key-" ~ loop.index0}
|
|
name={"dkim_keys[data][dkim_keys][" ~loop.index0 ~ "][key]"}
|
|
value={dkim?.key}
|
|
type="textarea"
|
|
errors={errors}
|
|
errors_keys={[
|
|
"/dkim_keys/data/dkim_keys/" ~ loop.index0 ~ "/key",
|
|
]}
|
|
error_msg_id="record-input-dkim-signing-key"
|
|
label={tr(msg="record-input-dkim-signing-key", attr="input-label")}
|
|
label_attributes={ {
|
|
"data-new-item-template-attr": "for",
|
|
"data-template-for": "dkim-key-{i}",
|
|
} }
|
|
attributes={ {
|
|
"data-new-item-template-attr": "name id",
|
|
"data-template-name": "dkim_keys[data][dkim_keys][{i}][key]",
|
|
"data-template-id": "dkim-key-{i}",
|
|
} }
|
|
lang={lang}
|
|
/>
|
|
}}
|
|
</div>
|
|
</fieldset>
|
|
{%- endfor -%}
|
|
|
|
<button class="link" type="button" data-new-item="dkim-key">
|
|
{{ <icon.plus_circle /> }}
|
|
{{ tr(msg="button-add-dkim-key") }}
|
|
</button>
|
|
|
|
{% include "partials/form_submit.html" %}
|
|
</form>
|