[BS5] add layout spacing
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<div role="tabpanel" class="tab-pane fade show active" id="tab-config-admins" role="tabpanel" aria-labelledby="tab-config-admins">
|
||||
<div class="card">
|
||||
<div class="card mb-4">
|
||||
<div class="card-header bg-danger text-white">{{ lang.admin.admin_details }}</div>
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
@@ -135,33 +135,33 @@
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form class="form-horizontal" autocapitalize="none" autocorrect="off" role="form" method="post">
|
||||
<div class="row">
|
||||
<div class="row mb-4">
|
||||
<label class="control-label col-sm-3" for="allow_from_ro">{{ lang.admin.api_allow_from }}:</label>
|
||||
<div class="col-sm-9">
|
||||
<textarea class="form-control textarea-code" rows="7" name="allow_from" id="allow_from_ro" {% if api.ro.skip_ip_check %}disabled{% endif %} required>{{ api.ro.allow_from }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="row mb-2">
|
||||
<div class="offset-sm-3 col-sm-9">
|
||||
<label>
|
||||
<input type="checkbox" name="skip_ip_check" id="skip_ip_check_ro" {% if api.ro.skip_ip_check %}checked{% endif %}> {{ lang.admin.api_skip_ip_check }}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="row mb-4">
|
||||
<label class="control-label col-sm-3">{{ lang.admin.api_key }}:</label>
|
||||
<div class="col-sm-9">
|
||||
<pre>{{ api.ro.api_key|default('-') }}</pre>
|
||||
<input type="text" class="form-control" value="{{ api.ro.api_key|default('-') }}" readonly />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="row mb-2">
|
||||
<div class="offset-sm-3 col-sm-9">
|
||||
<label>
|
||||
<input type="checkbox" name="active" {% if api.ro.active %}checked{% endif %}> {{ lang.admin.activate_api }}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="row mb-2">
|
||||
<div class="offset-sm-3 col-sm-9">
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-sm btn-xs-half d-block d-sm-inline btn-success" name="admin_api[ro]" type="submit" href="#"><i class="bi bi-check-lg"></i> {{ lang.admin.save }}</button>
|
||||
@@ -180,33 +180,33 @@
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form class="form-horizontal" autocapitalize="none" autocorrect="off" role="form" method="post">
|
||||
<div class="row">
|
||||
<div class="row mb-4">
|
||||
<label class="control-label col-sm-3" for="allow_from_rw">{{ lang.admin.api_allow_from }}:</label>
|
||||
<div class="col-sm-9">
|
||||
<textarea class="form-control textarea-code" rows="7" name="allow_from" id="allow_from_rw" {% if api.rw.skip_ip_check %}disabled{% endif %} required>{{ api.rw.allow_from }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="row mb-2">
|
||||
<div class="offset-sm-3 col-sm-9">
|
||||
<label>
|
||||
<input type="checkbox" name="skip_ip_check" id="skip_ip_check_rw" {% if api.rw.skip_ip_check %}checked{% endif %}> {{ lang.admin.api_skip_ip_check }}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="row mb-4">
|
||||
<label class="control-label col-sm-3" for="admin_api_key">{{ lang.admin.api_key }}:</label>
|
||||
<div class="col-sm-9">
|
||||
<pre>{{ api.rw.api_key|default('-') }}</pre>
|
||||
<input type="text" class="form-control" value="{{ api.rw.api_key|default('-') }}" readonly />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="row mb-2">
|
||||
<div class="offset-sm-3 col-sm-9">
|
||||
<label>
|
||||
<input type="checkbox" name="active" {% if api.rw.active %}checked{% endif %}> {{ lang.admin.activate_api }}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="row mb-2">
|
||||
<div class="offset-sm-3 col-sm-9">
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-sm btn-xs-half d-block d-sm-inline btn-success" name="admin_api[rw]" type="submit" href="#"><i class="bi bi-check-lg"></i> {{ lang.admin.save }}</button>
|
||||
@@ -223,7 +223,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card mb-4">
|
||||
<div class="card-header">{{ lang.admin.domain_admins }}</div>
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
|
@@ -6,7 +6,7 @@
|
||||
<p class="text-muted">{{ lang.admin.logo_info }}</p>
|
||||
<form class="form-inline" role="form" method="post" enctype="multipart/form-data">
|
||||
<p>
|
||||
<input type="file" name="main_logo" accept="image/gif, image/jpeg, image/pjpeg, image/x-png, image/png, image/svg+xml"><br>
|
||||
<input class="mb-4" type="file" name="main_logo" accept="image/gif, image/jpeg, image/pjpeg, image/x-png, image/png, image/svg+xml"><br>
|
||||
<button name="submit_main_logo" type="submit" class="btn btn-sm d-block d-sm-inline btn-secondary"><i class="bi bi-upload"></i> {{ lang.admin.upload }}</button>
|
||||
</p>
|
||||
</form>
|
||||
@@ -62,19 +62,19 @@
|
||||
<legend data-bs-target="#ui_texts" style="padding-top:20px" unselectable="on">{{ lang.admin.ui_texts }}</legend><hr />
|
||||
<div id="ui_texts">
|
||||
<form class="form" data-id="uitexts" role="form" method="post">
|
||||
<div>
|
||||
<div class="mb-2">
|
||||
<label for="uitests_title_name">{{ lang.admin.title_name }}:</label>
|
||||
<input type="text" class="form-control" id="uitests_title_name" name="title_name" placeholder="mailcow UI" value="{{ ui_texts.title_name|raw }}">
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-2">
|
||||
<label for="uitests_main_name">{{ lang.admin.main_name }}:</label>
|
||||
<input type="text" class="form-control" id="uitests_main_name" name="main_name" placeholder="mailcow UI" value="{{ ui_texts.main_name|raw }}">
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-2">
|
||||
<label for="uitests_apps_name">{{ lang.admin.apps_name }}:</label>
|
||||
<input type="text" class="form-control" id="uitests_apps_name" name="apps_name" placeholder="{{ lang.header.apps }}" value="{{ ui_texts.apps_name|raw }}">
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-4">
|
||||
<label for="help_text">{{ lang.admin.help_text }}:</label>
|
||||
<textarea class="form-control" id="help_text" name="help_text" rows="7">{{ ui_texts.help_text|raw }}</textarea>
|
||||
</div>
|
||||
@@ -82,11 +82,15 @@
|
||||
<div>
|
||||
<p class="text-muted">{{ lang.admin.ui_header_announcement_help }}</p>
|
||||
<label for="ui_announcement_type">{{ lang.admin.ui_header_announcement }}:</label>
|
||||
<p><select multiple data-width="100%" id="ui_announcement_type" name="ui_announcement_type" class="selectpicker show-tick" data-max-options="1" title="{{ lang.admin.ui_header_announcement_select }}">
|
||||
<option {% if ui_texts.ui_announcement_type == 'info' %}selected{% endif %} value="info">{{ lang.admin.ui_header_announcement_type_info }}</option>
|
||||
<option {% if ui_texts.ui_announcement_type == 'warning' %}selected{% endif %} value="warning">{{ lang.admin.ui_header_announcement_type_warning }}</option>
|
||||
<option {% if ui_texts.ui_announcement_type == 'danger' %}selected{% endif %} value="danger">{{ lang.admin.ui_header_announcement_type_danger }}</option>
|
||||
</select></p>
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-6 col-lg-4 col-xl-3">
|
||||
<p><select multiple data-width="100%" id="ui_announcement_type" name="ui_announcement_type" class="selectpicker show-tick" data-max-options="1" title="{{ lang.admin.ui_header_announcement_select }}">
|
||||
<option {% if ui_texts.ui_announcement_type == 'info' %}selected{% endif %} value="info">{{ lang.admin.ui_header_announcement_type_info }}</option>
|
||||
<option {% if ui_texts.ui_announcement_type == 'warning' %}selected{% endif %} value="warning">{{ lang.admin.ui_header_announcement_type_warning }}</option>
|
||||
<option {% if ui_texts.ui_announcement_type == 'danger' %}selected{% endif %} value="danger">{{ lang.admin.ui_header_announcement_type_danger }}</option>
|
||||
</select></p>
|
||||
</div>
|
||||
</div>
|
||||
<p><textarea class="form-control" id="ui_announcement_text" name="ui_announcement_text" rows="7">{{ ui_texts.ui_announcement_text }}</textarea></p>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
@@ -95,7 +99,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div>
|
||||
<div class="mb-4">
|
||||
<label for="ui_footer">{{ lang.admin.ui_footer }}:</label>
|
||||
<textarea class="form-control" id="ui_footer" name="ui_footer" rows="7">{{ ui_texts.ui_footer }}</textarea>
|
||||
</div>
|
||||
|
@@ -9,18 +9,21 @@
|
||||
</div>
|
||||
{% for domain, domain_data in dkim_domains %}
|
||||
{% if domain_data.dkim %}
|
||||
<div class="row collapse in dkim_key_valid">
|
||||
<div class="row collapse show dkim_key_valid">
|
||||
<div class="col-md-1"><input type="checkbox" data-id="dkim" name="multi_select" value="{{ domain }}"></div>
|
||||
<div class="col-md-3">
|
||||
<p>{{ lang.admin.domain }}: <strong>{{ domain }}</strong>
|
||||
<p class="dkim-label"><span class="badge fs-5 bg-success">{{ lang.admin.dkim_key_valid }}</span></p>
|
||||
<p class="dkim-label"><span class="badge fs-5 bg-primary">{{ lang.admin.dkim_domains_selector }} '{{ domain_data.dkim.dkim_selector }}'</span></p>
|
||||
<p class="dkim-label"><span class="badge fs-5 bg-info">{{ domain_data.dkim.length }} bit</span></p>
|
||||
<p class="dkim-label"><span class="badge fs-6 bg-success">{{ lang.admin.dkim_key_valid }}</span></p>
|
||||
<p class="dkim-label"><span class="badge fs-6 bg-primary">{{ lang.admin.dkim_domains_selector }} '{{ domain_data.dkim.dkim_selector }}'</span></p>
|
||||
<p class="dkim-label"><span class="badge fs-6 bg-info">{{ domain_data.dkim.length }} bit</span></p>
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<pre>{{ domain_data.dkim.dkim_txt }}</pre>
|
||||
<p data-bs-toggle="modal" data-bs-target="#showDKIMprivKey" id="dkim_priv" style="cursor:pointer;margin-top:-8pt" data-priv-key="{{ domain_data.dkim.privkey }}"><small><i class="bi bi-arrow-return-right"></i> {{ lang.admin.dkim_private_key }}</small></p>
|
||||
<textarea class="form-control" rows="6" readonly>{{ domain_data.dkim.dkim_txt }}</textarea>
|
||||
<small>
|
||||
<i class="bi bi-arrow-return-right"></i>
|
||||
<a href="#" data-bs-toggle="modal" data-bs-target="#showDKIMprivKey" id="dkim_priv" data-priv-key="{{ domain_data.dkim.privkey }}"> {{ lang.admin.dkim_private_key }}</a>
|
||||
</small>
|
||||
</div>
|
||||
<hr class="d-block d-md-none">
|
||||
</div>
|
||||
@@ -28,7 +31,7 @@
|
||||
<div class="row collapse in dkim_key_missing">
|
||||
<div class="col-md-1"><input class="dkim_missing" type="checkbox" data-id="dkim" name="multi_select" value="{{ domain }}" disabled></div>
|
||||
<div class="col-md-3">
|
||||
<p>{{ lang.admin.domain }}: <strong>{{ domain }}</strong><br><span class="badge fs-5 bg-danger">{{ lang.admin.dkim_key_missing }}</span></p>
|
||||
<p>{{ lang.admin.domain }}: <strong>{{ domain }}</strong><br><span class="badge fs-6 bg-danger">{{ lang.admin.dkim_key_missing }}</span></p>
|
||||
</div>
|
||||
<div class="col-md-8"><pre>-</pre></div>
|
||||
<hr class="d-block d-md-none">
|
||||
@@ -40,9 +43,9 @@
|
||||
<div class="col-md-1"><input type="checkbox" data-id="dkim" name="multi_select" value="{{ alias_domain }}"></div>
|
||||
<div class="col-md-2 offset-md-1">
|
||||
<p><small>↳ Alias-Domain: <strong>{{ alias_domain }}</strong></small>
|
||||
<p class="dkim-label"><span class="badge fs-5 bg-success">{{ lang.admin.dkim_key_valid }}</span></p>
|
||||
<p class="dkim-label"><span class="badge fs-5 bg-primary">Selector '{{ alias_domain_data.dkim.dkim_selector }}'</span></p>
|
||||
<p class="dkim-label"><span class="badge fs-5 bg-info">{{ alias_domain_data.dkim.length }} bit</span></p>
|
||||
<p class="dkim-label"><span class="badge fs-6 bg-success">{{ lang.admin.dkim_key_valid }}</span></p>
|
||||
<p class="dkim-label"><span class="badge fs-6 bg-primary">Selector '{{ alias_domain_data.dkim.dkim_selector }}'</span></p>
|
||||
<p class="dkim-label"><span class="badge fs-6 bg-info">{{ alias_domain_data.dkim.length }} bit</span></p>
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
@@ -55,7 +58,7 @@
|
||||
<div class="row collapse in dkim_key_missing">
|
||||
<div class="col-md-1"><input class="dkim_missing" type="checkbox" data-id="dkim" name="multi_select" value="{{ alias_domain }}" disabled></div>
|
||||
<div class="col-md-2 offset-md-1">
|
||||
<p><small>↳ Alias-Domain: <strong>{{ alias_domain }}</strong><br></small><span class="badge fs-5 bg-danger">{{ lang.admin.dkim_key_missing }}</span></p>
|
||||
<p><small>↳ Alias-Domain: <strong>{{ alias_domain }}</strong><br></small><span class="badge fs-6 bg-danger">{{ lang.admin.dkim_key_missing }}</span></p>
|
||||
</div>
|
||||
<div class="col-md-8"><pre>-</pre></div>
|
||||
<hr class="d-block d-md-none">
|
||||
@@ -68,9 +71,9 @@
|
||||
<div class="col-md-1"><input type="checkbox" data-id="dkim" name="multi_select" value="{{ blind }}"></div>
|
||||
<div class="col-md-3">
|
||||
<p>{{ lang.admin.domain }}: <strong>{{ blind }}</strong>
|
||||
<p class="dkim-label"><span class="badge fs-5 bg-warning">{{ lang.admin.dkim_key_unused }}</span></p>
|
||||
<p class="dkim-label"><span class="badge fs-5 bg-primary">Selector '{{ data.dkim.dkim_selector }}'</span></p>
|
||||
<p class="dkim-label"><span class="badge fs-5 bg-info">{{ data.dkim.length }} bit</span></p>
|
||||
<p class="dkim-label"><span class="badge fs-6 bg-warning">{{ lang.admin.dkim_key_unused }}</span></p>
|
||||
<p class="dkim-label"><span class="badge fs-6 bg-primary">Selector '{{ data.dkim.dkim_selector }}'</span></p>
|
||||
<p class="dkim-label"><span class="badge fs-6 bg-info">{{ data.dkim.length }} bit</span></p>
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
@@ -90,20 +93,22 @@
|
||||
|
||||
<legend style="margin-top:40px">{{ lang.admin.dkim_add_key }}</legend><hr />
|
||||
<form class="form" data-id="dkim" role="form" method="post">
|
||||
<div>
|
||||
<div class="mb-4">
|
||||
<label for="dkim_add_domains">{{ lang.admin.domain_s }}</label>
|
||||
<input class="form-control input-sm" id="dkim_add_domains" name="domains" placeholder="example.org, example.com" required>
|
||||
<small><i class="bi bi-arrow-return-right"></i> <a href="#" id="dkim_missing_keys">{{ lang.admin.dkim_domains_wo_keys }}</a></small>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-2">
|
||||
<label for="dkim_selector">{{ lang.admin.dkim_domains_selector }}</label>
|
||||
<input class="form-control input-sm" id="dkim_selector" name="dkim_selector" value="dkim" required>
|
||||
</div>
|
||||
<div>
|
||||
<select data-style="btn btn-secondary btn-sm" class="form-control" id="key_size" name="key_size" title="{{ lang.admin.dkim_key_length }}" required>
|
||||
<option data-subtext="bits">1024</option>
|
||||
<option data-subtext="bits">2048</option>
|
||||
</select>
|
||||
<div class="row mb-4">
|
||||
<div class="col-12 col-md-6 col-lg-4 col-xl-3">
|
||||
<select data-style="btn btn-secondary btn-sm" class="form-control" id="key_size" name="key_size" title="{{ lang.admin.dkim_key_length }}" required>
|
||||
<option data-subtext="bits">1024</option>
|
||||
<option data-subtext="bits">2048</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<button class="btn btn-sm d-block d-sm-inline btn-success" data-action="add_item" data-id="dkim" data-api-url='add/dkim' data-api-attr='{}' href="#"><i class="bi bi-plus-lg"></i> {{ lang.admin.add }}</button>
|
||||
</form>
|
||||
@@ -114,19 +119,19 @@
|
||||
<hr />
|
||||
<div id="import_dkim" class="collapse">
|
||||
<form class="form" data-id="dkim_import" role="form" method="post">
|
||||
<div>
|
||||
<div class="mb-2">
|
||||
<label for="dkim_import_domain">{{ lang.admin.domain }}:</label>
|
||||
<input class="form-control input-sm" id="dkim_import_domain" name="domain" placeholder="example.org" required>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-2">
|
||||
<label for="dkim_import_selector">{{ lang.admin.dkim_domains_selector }}:</label>
|
||||
<input class="form-control input-sm" id="dkim_import_selector" name="dkim_selector" value="dkim" required>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-4">
|
||||
<label for="private_key_file">{{ lang.admin.private_key }}: (RSA PKCS#8)</label>
|
||||
<textarea class="form-control input-sm" rows="10" name="private_key_file" id="private_key_file" required placeholder="-----BEGIN RSA KEY-----"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-2">
|
||||
<label>
|
||||
<input type="checkbox" name="overwrite_existing" value="1"> {{ lang.admin.dkim_overwrite_key }}
|
||||
</label>
|
||||
@@ -141,9 +146,9 @@
|
||||
<hr />
|
||||
<div id="duplicate_dkim" class="collapse">
|
||||
<form class="form-horizontal" data-id="dkim_duplicate" role="form" method="post">
|
||||
<div class="row">
|
||||
<label class="control-label col-sm-2" for="from_domain">{{ lang.admin.dkim_from }}:</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="row mb-2">
|
||||
<label class="control-label col-sm-2 text-sm-end" for="from_domain">{{ lang.admin.dkim_from }}:</label>
|
||||
<div class="col-sm-10 col-md-6 col-lg-4 col-xl-3">
|
||||
<select data-style="btn btn-secondary btn-sm"
|
||||
data-live-search="true"
|
||||
data-id="dkim_duplicate"
|
||||
@@ -155,9 +160,9 @@
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<label class="control-label col-sm-2" for="to_domain">{{ lang.admin.dkim_to }}:</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="row mb-4">
|
||||
<label class="control-label col-sm-2 text-sm-end" for="to_domain">{{ lang.admin.dkim_to }}:</label>
|
||||
<div class="col-sm-10 col-md-6 col-lg-4 col-xl-3">
|
||||
<select
|
||||
data-live-search="true"
|
||||
data-style="btn btn-secondary btn-sm"
|
||||
|
@@ -3,26 +3,26 @@
|
||||
<div class="card-header">{{ lang.admin.f2b_parameters }}</div>
|
||||
<div class="card-body">
|
||||
<form class="form" data-id="f2b" role="form" method="post">
|
||||
<div>
|
||||
<div class="mb-4">
|
||||
<label for="f2b_ban_time">{{ lang.admin.f2b_ban_time }}:</label>
|
||||
<input type="number" class="form-control" id="f2b_ban_time" name="ban_time" value="{{ f2b_data.ban_time }}" required>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-4">
|
||||
<label for="f2b_max_attempts">{{ lang.admin.f2b_max_attempts }}:</label>
|
||||
<input type="number" class="form-control" id="f2b_max_attempts" name="max_attempts" value="{{ f2b_data.max_attempts }}" required>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-4">
|
||||
<label for="f2b_retry_window">{{ lang.admin.f2b_retry_window }}:</label>
|
||||
<input type="number" class="form-control" id="f2b_retry_window" name="retry_window" value="{{ f2b_data.retry_window }}" required>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-4">
|
||||
<label for="f2b_netban_ipv4">{{ lang.admin.f2b_netban_ipv4 }}:</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">/</span>
|
||||
<input type="number" class="form-control" id="f2b_netban_ipv4" name="netban_ipv4" value="{{ f2b_data.netban_ipv4 }}" required>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-4">
|
||||
<label for="f2b_netban_ipv6">{{ lang.admin.f2b_netban_ipv6 }}:</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">/</span>
|
||||
@@ -31,11 +31,11 @@
|
||||
</div>
|
||||
<hr>
|
||||
<p class="text-muted">{{ lang.admin.f2b_list_info|raw }}</p>
|
||||
<div>
|
||||
<div class="mb-2">
|
||||
<label for="f2b_whitelist">{{ lang.admin.f2b_whitelist }}:</label>
|
||||
<textarea class="form-control" id="f2b_whitelist" name="whitelist" rows="5">{{ f2b_data.whitelist }}</textarea>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-4">
|
||||
<label for="f2b_blacklist">{{ lang.admin.f2b_blacklist }}:</label>
|
||||
<textarea class="form-control" id="f2b_blacklist" name="blacklist" rows="5">{{ f2b_data.blacklist }}</textarea>
|
||||
</div>
|
||||
|
@@ -21,11 +21,11 @@
|
||||
<legend>{{ lang.admin.add_forwarding_host }}</legend><hr />
|
||||
<p class="text-muted">{{ lang.admin.forwarding_hosts_add_hint }}</p>
|
||||
<form class="form" data-id="fwdhost" role="form" method="post">
|
||||
<div>
|
||||
<div class="mb-2">
|
||||
<label for="fwdhost_hostname">{{ lang.admin.host }}</label>
|
||||
<input class="form-control" id="fwdhost_hostname" name="hostname" placeholder="example.org" required>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-4">
|
||||
<select data-width="200px" class="form-control" id="filter_spam" name="filter_spam" title="{{ lang.user.spamfilter }}" required>
|
||||
<option value="1">{{ lang.admin.active }}</option>
|
||||
<option value="0">{{ lang.admin.inactive }}</option>
|
||||
|
@@ -5,15 +5,15 @@
|
||||
<form class="form-horizontal" data-id="passwordpolicy" role="form" method="post">
|
||||
{% for name, value in password_complexity %}
|
||||
{% if name == 'length' %}
|
||||
<div class="row">
|
||||
<label class="control-label col-sm-3" for="length">{{ lang.admin.password_length }}:</label>
|
||||
<div class="row mb-4">
|
||||
<label class="control-label col-sm-3 text-sm-end" for="length">{{ lang.admin.password_length }}:</label>
|
||||
<div class="col-sm-2">
|
||||
<input type="number" class="form-control" min="3" max="64" name="length" id="length" value="{{ value }}" required>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<input type="hidden" name="{{ name }}" value="0">
|
||||
<div class="row">
|
||||
<div class="row mb-2">
|
||||
<div class="offset-sm-3 col-sm-9">
|
||||
<label>
|
||||
<input type="checkbox" name="{{ name }}" id="{{ name }}" value="1" {% if value == 1 %}checked{% endif %}> {{ lang.admin['password_policy_'~name] }}
|
||||
@@ -22,7 +22,7 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<div class="row">
|
||||
<div class="row mt-4 mb-2">
|
||||
<div class="offset-sm-3 col-sm-9">
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-sm d-block d-sm-inline btn-success" data-item="passwordpolicy" data-action="edit_selected" data-id="passwordpolicy" data-api-url='edit/passwordpolicy' data-api-attr='{}' href="#"><i class="bi bi-check-lg"></i> {{ lang.admin.save }}</button>
|
||||
|
@@ -6,69 +6,69 @@
|
||||
<div class="alert alert-info">{{ lang.quarantine.disabled_by_config }}</div>
|
||||
{% endif %}
|
||||
<form class="form-horizontal" data-id="quarantine" role="form" method="post">
|
||||
<div class="row">
|
||||
<label class="col-sm-4 control-label" for="quarantine_retention_size">{{ lang.admin.quarantine_retention_size|raw }}</label>
|
||||
<div class="row mb-4">
|
||||
<label class="col-sm-4 control-label text-sm-end" for="quarantine_retention_size">{{ lang.admin.quarantine_retention_size|raw }}</label>
|
||||
<div class="col-sm-8">
|
||||
<input type="number" class="form-control" id="quarantine_retention_size" name="retention_size" value="{{ q_data.retention_size }}" placeholder="0" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<label class="col-sm-4 control-label" for="quarantine_max_size">{{ lang.admin.quarantine_max_size|raw }}</label>
|
||||
<div class="row mb-4">
|
||||
<label class="col-sm-4 control-label text-sm-end" for="quarantine_max_size">{{ lang.admin.quarantine_max_size|raw }}</label>
|
||||
<div class="col-sm-8">
|
||||
<input type="number" class="form-control" id="quarantine_max_size" name="max_size" value="{{ q_data.max_size }}" placeholder="0" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<label class="col-sm-4 control-label" for="quarantine_max_score">{{ lang.admin.quarantine_max_score|raw }}</label>
|
||||
<div class="row mb-4">
|
||||
<label class="col-sm-4 control-label text-sm-end" for="quarantine_max_score">{{ lang.admin.quarantine_max_score|raw }}</label>
|
||||
<div class="col-sm-8">
|
||||
<input type="number" class="form-control" id="quarantine_max_score" name="max_score" value="{{ q_data.max_score }}" placeholder="9999.0">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<label class="col-sm-4 control-label" for="quarantine_max_age">{{ lang.admin.quarantine_max_age|raw }}</label>
|
||||
<div class="row mb-4">
|
||||
<label class="col-sm-4 control-label text-sm-end" for="quarantine_max_age">{{ lang.admin.quarantine_max_age|raw }}</label>
|
||||
<div class="col-sm-8">
|
||||
<input type="number" class="form-control" id="quarantine_max_age" name="max_age" value="{{ q_data.max_age }}" min="1" required>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="row">
|
||||
<label class="col-sm-4 control-label" for="quarantine_redirect"><i class="bi bi-box-arrow-right"></i> {{ lang.admin.quarantine_redirect|raw }}</label>
|
||||
<div class="row mb-4">
|
||||
<label class="col-sm-4 control-label text-sm-end" for="quarantine_redirect"><i class="bi bi-box-arrow-right"></i> {{ lang.admin.quarantine_redirect|raw }}</label>
|
||||
<div class="col-sm-8">
|
||||
<input type="email" class="form-control" id="quarantine_redirect" name="redirect" value="{{ q_data.redirect }}" placeholder="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<label class="col-sm-4 control-label" for="quarantine_bcc"><i class="bi bi-files"></i> {{ lang.admin.quarantine_bcc|raw }}</label>
|
||||
<div class="row mb-4">
|
||||
<label class="col-sm-4 control-label text-sm-end" for="quarantine_bcc"><i class="bi bi-files"></i> {{ lang.admin.quarantine_bcc|raw }}</label>
|
||||
<div class="col-sm-8">
|
||||
<input type="email" class="form-control" id="quarantine_bcc" name="bcc" value="{{ q_data.bcc }}" placeholder="">
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="row">
|
||||
<label class="col-sm-4 control-label" for="quarantine_sender">{{ lang.admin.quarantine_notification_sender }}:</label>
|
||||
<div class="row mb-2">
|
||||
<label class="col-sm-4 control-label text-sm-end" for="quarantine_sender">{{ lang.admin.quarantine_notification_sender }}:</label>
|
||||
<div class="col-sm-8">
|
||||
<input type="email" class="form-control" id="quarantine_sender" name="sender" value="{{ q_data.sender }}" placeholder="quarantine@localhost">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<label class="col-sm-4 control-label" for="quarantine_subject">{{ lang.admin.quarantine_notification_subject }}:</label>
|
||||
<div class="row mb-4">
|
||||
<label class="col-sm-4 control-label text-sm-end" for="quarantine_subject">{{ lang.admin.quarantine_notification_subject }}:</label>
|
||||
<div class="col-sm-8">
|
||||
<input type="text" class="form-control" id="quarantine_subject" name="subject" value="{{ q_data.subject }}" placeholder="Spam Quarantine Notification">
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="row">
|
||||
<label class="col-sm-4 control-label" for="quarantine_release_format">{{ lang.admin.quarantine_release_format }}:</label>
|
||||
<div class="col-sm-8">
|
||||
<div class="row mb-2">
|
||||
<label class="col-sm-4 control-label text-sm-end" for="quarantine_release_format">{{ lang.admin.quarantine_release_format }}:</label>
|
||||
<div class="col-sm-8 col-md-6 col-lg-4 col-xl-3">
|
||||
<select data-width="100%" id="quarantine_release_format" name="release_format" class="selectpicker" title="{{ lang.tfa.select }}">
|
||||
<option {% if q_data.release_format == 'raw' %}selected{% endif %} value="raw">{{ lang.admin.quarantine_release_format_raw }}</option>
|
||||
<option {% if q_data.release_format == 'attachment' %}selected{% endif %} value="attachment">{{ lang.admin.quarantine_release_format_att }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<label class="col-sm-4 control-label" for="exclude_domains">{{ lang.admin.quarantine_exclude_domains }}:</label>
|
||||
<div class="col-sm-8">
|
||||
<div class="row mb-4">
|
||||
<label class="col-sm-4 control-label text-sm-end" for="exclude_domains">{{ lang.admin.quarantine_exclude_domains }}:</label>
|
||||
<div class="col-sm-8 col-md-6 col-lg-4 col-xl-3">
|
||||
<select data-width="100%" name="exclude_domains" class="selectpicker" title="{{ lang.tfa.select }}" multiple>
|
||||
{% for domain in all_domains %}
|
||||
<option {% if domain in q_data.exclude_domains %}selected{% endif %}>{{ domain }}</option>
|
||||
|
@@ -4,7 +4,7 @@
|
||||
<div class="card-body">
|
||||
<p>{{ lang.admin.quota_notifications_info }}</p>
|
||||
<form class="form" role="form" data-id="quota_notification" method="post">
|
||||
<div class="row">
|
||||
<div class="row mb-4">
|
||||
<div class="col-sm-6">
|
||||
<div>
|
||||
<label for="quota_notification_sender">{{ lang.admin.quota_notification_sender }}:</label>
|
||||
|
@@ -5,31 +5,31 @@
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-12 d-block d-sm-none">
|
||||
<img class="img-responsive" src="/img/rspamd_logo.png" alt="Rspamd UI">
|
||||
<div class="col-12 d-flex d-sm-none mb-4">
|
||||
<img class="img-responsive mx-auto" src="/img/rspamd_logo.png" alt="Rspamd UI">
|
||||
</div>
|
||||
<div class="col-sm-9 col-12">
|
||||
<form class="form-horizontal" autocapitalize="none" data-id="admin" autocorrect="off" role="form" method="post">
|
||||
<div class="row">
|
||||
<div class="row mb-4">
|
||||
<div class="offset-sm-3 col-sm-9">
|
||||
<label>
|
||||
<a href="/rspamd/" target="_blank"><i class="bi bi-window"></i> Rspamd UI</a>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<label class="control-label col-sm-3" for="rspamd_ui_pass">{{ lang.admin.password }}:</label>
|
||||
<div class="row mb-2">
|
||||
<label class="control-label col-sm-3 text-sm-end" for="rspamd_ui_pass">{{ lang.admin.password }}:</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="password" class="form-control" id="rspamd_ui_pass" name="rspamd_ui_pass" autocomplete="new-password" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<label class="control-label col-sm-3" for="rspamd_ui_pass2">{{ lang.admin.password_repeat }}:</label>
|
||||
<div class="row mb-4">
|
||||
<label class="control-label col-sm-3 text-sm-end" for="rspamd_ui_pass2">{{ lang.admin.password_repeat }}:</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="password" class="form-control" id="rspamd_ui_pass2" name="rspamd_ui_pass2" autocomplete="new-password" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="row mb-4">
|
||||
<div class="offset-sm-3 col-sm-9">
|
||||
<button type="submit" class="btn btn-sm d-block d-sm-inline btn-success" id="rspamd_ui" name="rspamd_ui" href="#"><i class="bi bi-check-lg"></i> {{ lang.admin.save }}</button>
|
||||
</div>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<div role="tabpanel" class="tab-pane fade" id="tab-routing" role="tabpanel" aria-labelledby="tab-routing">
|
||||
<div class="card">
|
||||
<div class="card mb-4">
|
||||
<div class="card-header">{{ lang.admin.relayhosts }}</div>
|
||||
<div class="card-body">
|
||||
<p style="margin-bottom:40px">{{ lang.admin.relayhosts_hint|raw }}</p>
|
||||
@@ -23,15 +23,15 @@
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
<form class="form" data-id="rlyhost" role="form" method="post">
|
||||
<div>
|
||||
<div class="mb-2">
|
||||
<label for="rlyhost_hostname">{{ lang.admin.host }}</label>
|
||||
<input class="form-control" id="rlyhost_hostname" name="hostname" placeholder='[0.0.0.0], [0.0.0.0]:25, host:25, host, [host]:25' required>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-2">
|
||||
<label for="rlyhost_username">{{ lang.admin.username }}</label>
|
||||
<input class="form-control" id="rlyhost_username" name="username">
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-4">
|
||||
<label for="rlyhost_password">{{ lang.admin.password }}</label>
|
||||
<input class="form-control" id="rlyhost_password" name="password">
|
||||
</div>
|
||||
@@ -42,7 +42,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card mb-4">
|
||||
<div class="card-header">{{ lang.admin.transport_maps }}</div>
|
||||
<div class="card-body">
|
||||
<p style="margin-bottom:40px">{{ lang.admin.transports_hint|raw }}</p>
|
||||
@@ -66,28 +66,28 @@
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
<form class="form" data-id="transport" role="form" method="post">
|
||||
<div>
|
||||
<div class="mb-2">
|
||||
<label for="transport_destination">{{ lang.admin.destination }}</label>
|
||||
<input class="form-control" id="transport_destination" name="destination" placeholder='{{ lang.admin.transport_dest_format }}' required>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-2">
|
||||
<label for="transport_nexthop">{{ lang.admin.nexthop }}</label>
|
||||
<input class="form-control" id="transport_nexthop" name="nexthop" placeholder='host:25, host, [host]:25, [0.0.0.0]:25' required>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-2">
|
||||
<label for="transport_username">{{ lang.admin.username }}</label>
|
||||
<input class="form-control" id="transport_username" name="username">
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-4">
|
||||
<label for="transport_password">{{ lang.admin.password }}</label>
|
||||
<input class="form-control" id="transport_password" name="password">
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-2">
|
||||
<label>
|
||||
<input type="checkbox" name="is_mx_based" value="1"> {{ lang.admin.lookup_mx|raw }}
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-4">
|
||||
<label>
|
||||
<input type="checkbox" name="active" value="1"> {{ lang.admin.active }}
|
||||
</label>
|
||||
|
@@ -3,14 +3,14 @@
|
||||
<div class="card-header">{{ lang.admin.sys_mails }}</div>
|
||||
<div class="card-body">
|
||||
<form class="form-horizontal" autocapitalize="none" data-id="admin" autocorrect="off" role="form" method="post">
|
||||
<div class="row">
|
||||
<label class="control-label col-sm-2" for="admin_mass_from">{{ lang.admin.from }}:</label>
|
||||
<div class="row mb-2">
|
||||
<label class="control-label col-sm-2 text-sm-end" for="admin_mass_from">{{ lang.admin.from }}:</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="email" class="form-control" id="admin_mass_from" name="mass_from" value="noreply@{{ mailcow_hostname }}" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<label class="control-label col-sm-2" for="admin_mass_subject">{{ lang.admin.subject }}:</label>
|
||||
<div class="row mb-4">
|
||||
<label class="control-label col-sm-2 text-sm-end" for="admin_mass_subject">{{ lang.admin.subject }}:</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" id="admin_mass_subject" name="mass_subject" required>
|
||||
</div>
|
||||
@@ -18,8 +18,8 @@
|
||||
{% for domain in all_domains %}
|
||||
|
||||
{% endfor %}
|
||||
<div class="row">
|
||||
<label class="control-label col-sm-2" for="mass_subject">{{ lang.admin.include_exclude }}:
|
||||
<div class="row mb-4">
|
||||
<label class="control-label col-sm-2 text-sm-end" for="mass_subject">{{ lang.admin.include_exclude }}:
|
||||
<p class="text-muted">{{ lang.admin.include_exclude_info|raw }}</p>
|
||||
</label>
|
||||
<div class="col-sm-5">
|
||||
@@ -39,27 +39,27 @@
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<label class="control-label col-sm-2" for="mass_text">{{ lang.admin.text }}:</label>
|
||||
<div class="row mb-2">
|
||||
<label class="control-label col-sm-2 text-sm-end" for="mass_text">{{ lang.admin.text }}:</label>
|
||||
<div class="col-sm-10">
|
||||
<textarea class="form-control" rows="10" name="mass_text" id="mass_text" required></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<label class="control-label col-sm-2" for="mass_html">{{ lang.admin.html }} ({{ lang.admin.optional }}):</label>
|
||||
<div class="row mb-4">
|
||||
<label class="control-label col-sm-2 text-sm-end" for="mass_html">{{ lang.admin.html }} ({{ lang.admin.optional }}):</label>
|
||||
<div class="col-sm-10">
|
||||
<textarea class="form-control" rows="10" name="mass_html" id="mass_html"></textarea>
|
||||
<p class="small"><i class="bi bi-arrow-return-right"></i> <a target="_blank" href="https://templates.mailchimp.com/resources/html-to-text/">{{ lang.admin.convert_html_to_text }}</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="row mb-2">
|
||||
<div class="offset-sm-2 col-sm-10">
|
||||
<label>
|
||||
<input type="checkbox" id="mass_disarm"> {{ lang.admin.activate_send }}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="row mb-2">
|
||||
<div class="offset-sm-2 col-sm-10">
|
||||
<button class="btn btn-sm d-block d-sm-inline btn-success" type="submit" id="mass_send" name="mass_send" disabled><i class="bi bi-envelope-fill"></i> {{ lang.admin.send }}</button>
|
||||
</div>
|
||||
|
Reference in New Issue
Block a user