[BS5] change form-group
This commit is contained in:
		| @@ -3,7 +3,7 @@ | ||||
|       <div class="card-header bg-danger text-white">{{ lang.admin.admin_details }}</div> | ||||
|       <div class="card-body"> | ||||
|         <div class="table-responsive"> | ||||
|           <table class="table table-striped table-condensed" id="adminstable"></table> | ||||
|           <div id="adminstable"></div> | ||||
|         </div> | ||||
|         <div class="mass-actions-admin"> | ||||
|           <div class="btn-group"> | ||||
| @@ -92,7 +92,7 @@ | ||||
|         <hr /> | ||||
|         <div id="license" class="collapse"> | ||||
|           <form class="form-horizontal" autocapitalize="none" autocorrect="off" role="form" method="post"> | ||||
|             <div class="form-group"> | ||||
|             <div class="row"> | ||||
|               <label class="control-label col-sm-3" for="guid">{{ lang.admin.guid }}:</label> | ||||
|               <div class="col-sm-9"> | ||||
|                 <div class="input-group"> | ||||
| @@ -108,7 +108,7 @@ | ||||
|                 </p> | ||||
|               </div> | ||||
|             </div> | ||||
|             <div class="form-group"> | ||||
|             <div class="row"> | ||||
|               <div class="offset-sm-3 col-sm-9"> | ||||
|                 <p class="text-muted">{{ lang.admin.license_info|raw }}</p> | ||||
|                 <div class="btn-group"> | ||||
| @@ -135,33 +135,33 @@ | ||||
|                 </div> | ||||
|                 <div class="card-body"> | ||||
|                   <form class="form-horizontal" autocapitalize="none" autocorrect="off" role="form" method="post"> | ||||
|                     <div class="form-group"> | ||||
|                     <div class="row"> | ||||
|                       <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="form-group"> | ||||
|                     <div class="row"> | ||||
|                       <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="form-group"> | ||||
|                     <div class="row"> | ||||
|                       <label class="control-label col-sm-3">{{ lang.admin.api_key }}:</label> | ||||
|                       <div class="col-sm-9"> | ||||
|                         <pre>{{ api.ro.api_key|default('-') }}</pre> | ||||
|                       </div> | ||||
|                     </div> | ||||
|                     <div class="form-group"> | ||||
|                     <div class="row"> | ||||
|                       <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="form-group"> | ||||
|                     <div class="row"> | ||||
|                       <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="form-group"> | ||||
|                     <div class="row"> | ||||
|                       <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="form-group"> | ||||
|                     <div class="row"> | ||||
|                       <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="form-group"> | ||||
|                     <div class="row"> | ||||
|                       <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> | ||||
|                       </div> | ||||
|                     </div> | ||||
|                     <div class="form-group"> | ||||
|                     <div class="row"> | ||||
|                       <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="form-group"> | ||||
|                     <div class="row"> | ||||
|                       <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> | ||||
|   | ||||
| @@ -62,24 +62,24 @@ | ||||
|       <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 class="form-group"> | ||||
|           <div> | ||||
|             <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 class="form-group"> | ||||
|           <div> | ||||
|             <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 class="form-group"> | ||||
|           <div> | ||||
|             <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 class="form-group"> | ||||
|           <div> | ||||
|             <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> | ||||
|           <hr> | ||||
|           <div class="form-group"> | ||||
|           <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 }}"> | ||||
| @@ -95,7 +95,7 @@ | ||||
|             </div> | ||||
|           </div> | ||||
|           <hr> | ||||
|           <div class="form-group"> | ||||
|           <div> | ||||
|             <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> | ||||
|   | ||||
| @@ -90,16 +90,16 @@ | ||||
|  | ||||
|       <legend style="margin-top:40px">{{ lang.admin.dkim_add_key }}</legend><hr /> | ||||
|       <form class="form" data-id="dkim" role="form" method="post"> | ||||
|         <div class="form-group"> | ||||
|         <div> | ||||
|           <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 class="form-group"> | ||||
|         <div> | ||||
|           <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 class="form-group"> | ||||
|         <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> | ||||
| @@ -114,19 +114,19 @@ | ||||
|       <hr /> | ||||
|       <div id="import_dkim" class="collapse"> | ||||
|         <form class="form" data-id="dkim_import" role="form" method="post"> | ||||
|           <div class="form-group"> | ||||
|           <div> | ||||
|             <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 class="form-group"> | ||||
|           <div> | ||||
|             <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 class="form-group"> | ||||
|           <div> | ||||
|             <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 class="form-group"> | ||||
|           <div> | ||||
|             <label> | ||||
|               <input type="checkbox" name="overwrite_existing" value="1"> {{ lang.admin.dkim_overwrite_key }} | ||||
|             </label> | ||||
| @@ -141,7 +141,7 @@ | ||||
|       <hr /> | ||||
|       <div id="duplicate_dkim" class="collapse"> | ||||
|         <form class="form-horizontal" data-id="dkim_duplicate" role="form" method="post"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="from_domain">{{ lang.admin.dkim_from }}:</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <select data-style="btn btn-secondary btn-sm" | ||||
| @@ -155,7 +155,7 @@ | ||||
|               </select> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="to_domain">{{ lang.admin.dkim_to }}:</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <select | ||||
|   | ||||
| @@ -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 class="form-group"> | ||||
|         <div> | ||||
|           <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 class="form-group"> | ||||
|         <div> | ||||
|           <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 class="form-group"> | ||||
|         <div> | ||||
|           <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 class="form-group"> | ||||
|         <div> | ||||
|           <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 class="form-group"> | ||||
|         <div> | ||||
|           <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 class="form-group"> | ||||
|         <div> | ||||
|           <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 class="form-group"> | ||||
|         <div> | ||||
|           <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 class="form-group"> | ||||
|         <div> | ||||
|           <label for="fwdhost_hostname">{{ lang.admin.host }}</label> | ||||
|           <input class="form-control" id="fwdhost_hostname" name="hostname" placeholder="example.org" required> | ||||
|         </div> | ||||
|         <div class="form-group"> | ||||
|         <div> | ||||
|           <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,7 +5,7 @@ | ||||
|       <form class="form-horizontal" data-id="passwordpolicy" role="form" method="post"> | ||||
|         {% for name, value in password_complexity %} | ||||
|           {% if name == 'length' %} | ||||
|             <div class="form-group"> | ||||
|             <div class="row"> | ||||
|               <label class="control-label col-sm-3" 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> | ||||
| @@ -13,7 +13,7 @@ | ||||
|             </div> | ||||
|           {% else %} | ||||
|             <input type="hidden" name="{{ name }}" value="0"> | ||||
|             <div class="form-group"> | ||||
|             <div class="row"> | ||||
|               <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="form-group"> | ||||
|         <div class="row"> | ||||
|           <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,58 +6,58 @@ | ||||
|       <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="form-group"> | ||||
|         <div class="row"> | ||||
|           <label class="col-sm-4 control-label" 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="form-group"> | ||||
|         <div class="row"> | ||||
|           <label class="col-sm-4 control-label" 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="form-group"> | ||||
|         <div class="row"> | ||||
|           <label class="col-sm-4 control-label" 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="form-group"> | ||||
|         <div class="row"> | ||||
|           <label class="col-sm-4 control-label" 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="form-group"> | ||||
|         <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="col-sm-8"> | ||||
|             <input type="email" class="form-control" id="quarantine_redirect" name="redirect" value="{{ q_data.redirect }}" placeholder=""> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="form-group"> | ||||
|         <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="col-sm-8"> | ||||
|             <input type="email" class="form-control" id="quarantine_bcc" name="bcc" value="{{ q_data.bcc }}" placeholder=""> | ||||
|           </div> | ||||
|         </div> | ||||
|         <hr> | ||||
|         <div class="form-group"> | ||||
|         <div class="row"> | ||||
|           <label class="col-sm-4 control-label" 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="form-group"> | ||||
|         <div class="row"> | ||||
|           <label class="col-sm-4 control-label" 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="form-group"> | ||||
|         <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"> | ||||
|             <select data-width="100%" id="quarantine_release_format" name="release_format" class="selectpicker" title="{{ lang.tfa.select }}"> | ||||
| @@ -66,7 +66,7 @@ | ||||
|             </select> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="form-group"> | ||||
|         <div class="row"> | ||||
|           <label class="col-sm-4 control-label" for="exclude_domains">{{ lang.admin.quarantine_exclude_domains }}:</label> | ||||
|           <div class="col-sm-8"> | ||||
|             <select data-width="100%" name="exclude_domains" class="selectpicker" title="{{ lang.tfa.select }}" multiple> | ||||
|   | ||||
| @@ -6,13 +6,13 @@ | ||||
|       <form class="form" role="form" data-id="quota_notification" method="post"> | ||||
|         <div class="row"> | ||||
|           <div class="col-sm-6"> | ||||
|             <div class="form-group"> | ||||
|             <div> | ||||
|               <label for="quota_notification_sender">{{ lang.admin.quota_notification_sender }}:</label> | ||||
|               <input type="email" class="form-control" id="quota_notification_sender" name="sender" value="{{ qn_data.sender }}" placeholder="quota-warning@localhost"> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="col-sm-6"> | ||||
|             <div class="form-group"> | ||||
|             <div> | ||||
|               <label for="quota_notification_subject">{{ lang.admin.quota_notification_subject }}:</label> | ||||
|               <input type="text" class="form-control" id="quota_notification_subject" name="subject" value="{{ qn_data.subject }}" placeholder="Quota warning"> | ||||
|             </div> | ||||
| @@ -32,7 +32,7 @@ | ||||
|         </div> | ||||
|         <div class="row"> | ||||
|           <div class="col-sm-10"> | ||||
|             <div class="form-group"> | ||||
|             <div> | ||||
|               <br> | ||||
|               <a type="button" class="btn btn-sm d-block d-sm-inline btn-success" data-action="edit_selected" | ||||
|                  data-item="quota_notification" | ||||
|   | ||||
| @@ -44,15 +44,15 @@ | ||||
|                   <div id="{{ rsetting.details.id }}" class="tab-pane"> | ||||
|                     <form class="form" data-id="rsettings" role="form" method="post"> | ||||
|                       <input type="hidden" name="active" value="0"> | ||||
|                       <div class="form-group"> | ||||
|                       <div> | ||||
|                         <label for="rsettings_desc">{{ lang.admin.rsetting_desc }}:</label> | ||||
|                         <input type="text" class="form-control" id="rsettings_desc" name="desc" value="{{ rsetting.details.desc }}"> | ||||
|                       </div> | ||||
|                       <div class="form-group"> | ||||
|                       <div> | ||||
|                         <label for="rsettings_content">{{ lang.admin.rsetting_content }}:</label> | ||||
|                         <textarea class="form-control" id="rsettings_content" name="content" rows="10">{{ rsetting.details.content }}</textarea> | ||||
|                       </div> | ||||
|                       <div class="form-group"> | ||||
|                       <div> | ||||
|                         <label> | ||||
|                           <input type="checkbox" name="active" value="1" {% if rsetting.details.active %}checked{% endif %}> {{ lang.admin.active }} | ||||
|                         </label> | ||||
|   | ||||
| @@ -10,26 +10,26 @@ | ||||
|         </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="form-group"> | ||||
|             <div class="row"> | ||||
|               <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="form-group"> | ||||
|             <div class="row"> | ||||
|               <label class="control-label col-sm-3" 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="form-group"> | ||||
|             <div class="row"> | ||||
|               <label class="control-label col-sm-3" 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="form-group"> | ||||
|             <div class="row"> | ||||
|               <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> | ||||
|   | ||||
| @@ -6,7 +6,7 @@ | ||||
|     <div class="card-body"> | ||||
|       <p>{{ lang.admin.rspamd_global_filters_info }}</p> | ||||
|       <div id="confirm_show_rspamd_global_filters"{% if show_rspamd_global_filters %} class="d-none"{% endif %}> | ||||
|         <div class="form-group"> | ||||
|         <div class="row"> | ||||
|           <div class="offset-sm-2 col-sm-10"> | ||||
|             <label> | ||||
|               <input type="checkbox" id="show_rspamd_global_filters"> {{ lang.admin.rspamd_global_filters_agree }} | ||||
| @@ -28,13 +28,13 @@ | ||||
|         <hr> | ||||
|         <span class="anchor" id="{{ rspamd_regex_map.map }}"></span> | ||||
|         <form class="form-horizontal" data-cached-form="false" data-id="{{ rspamd_regex_map.map }}" role="form" method="post"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-3" for="{{ rspamd_regex_map.map }}">{{ rspamd_regex_desc }}<br><small>{{ rspamd_regex_map.map }}</small></label> | ||||
|             <div class="col-sm-9"> | ||||
|               <textarea id="{{ rspamd_regex_map.map }}" spellcheck="false" autocorrect="off" autocapitalize="none" class="form-control textarea-code" rows="10" name="rspamd_map_data" required>{{ rspamd_regex_map.data }}</textarea> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-3 col-sm-9"> | ||||
|               <button class="btn btn-sm btn-xs-half d-block d-sm-inline btn-secondary validate_rspamd_regex" data-regex-map="{{ rspamd_regex_map.map }}" href="#">{{ lang.add.validate }}</button> | ||||
|               <button class="btn btn-sm btn-xs-half d-block d-sm-inline btn-success submit_rspamd_regex" data-action="edit_selected" data-id="{{ rspamd_regex_map.map }}" data-item="{{ rspamd_regex_map.map }}" data-api-url='edit/rspamd-map' data-api-attr='{}' href="#" disabled>{{ lang.edit.save }}</button> | ||||
|   | ||||
| @@ -23,15 +23,15 @@ | ||||
|       <div class="row"> | ||||
|         <div class="col-md-8"> | ||||
|           <form class="form" data-id="rlyhost" role="form" method="post"> | ||||
|             <div class="form-group"> | ||||
|             <div> | ||||
|               <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 class="form-group"> | ||||
|             <div> | ||||
|               <label for="rlyhost_username">{{ lang.admin.username }}</label> | ||||
|               <input class="form-control" id="rlyhost_username" name="username"> | ||||
|             </div> | ||||
|             <div class="form-group"> | ||||
|             <div> | ||||
|               <label for="rlyhost_password">{{ lang.admin.password }}</label> | ||||
|               <input class="form-control" id="rlyhost_password" name="password"> | ||||
|             </div> | ||||
| @@ -66,28 +66,28 @@ | ||||
|       <div class="row"> | ||||
|         <div class="col-md-8"> | ||||
|           <form class="form" data-id="transport" role="form" method="post"> | ||||
|             <div class="form-group"> | ||||
|             <div> | ||||
|               <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 class="form-group"> | ||||
|             <div> | ||||
|               <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 class="form-group"> | ||||
|             <div> | ||||
|               <label for="transport_username">{{ lang.admin.username }}</label> | ||||
|               <input class="form-control" id="transport_username" name="username"> | ||||
|             </div> | ||||
|             <div class="form-group"> | ||||
|             <div> | ||||
|               <label for="transport_password">{{ lang.admin.password }}</label> | ||||
|               <input class="form-control" id="transport_password" name="password"> | ||||
|             </div> | ||||
|             <div class="form-group"> | ||||
|             <div> | ||||
|               <label> | ||||
|                 <input type="checkbox" name="is_mx_based" value="1"> {{ lang.admin.lookup_mx|raw }} | ||||
|               </label> | ||||
|             </div> | ||||
|             <div class="form-group"> | ||||
|             <div> | ||||
|               <label> | ||||
|                 <input type="checkbox" name="active" value="1"> {{ lang.admin.active }} | ||||
|               </label> | ||||
|   | ||||
| @@ -3,13 +3,13 @@ | ||||
|     <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="form-group"> | ||||
|         <div class="row"> | ||||
|           <label class="control-label col-sm-2" 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="form-group"> | ||||
|         <div class="row"> | ||||
|           <label class="control-label col-sm-2" 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> | ||||
| @@ -18,7 +18,7 @@ | ||||
|         {% for domain in all_domains %} | ||||
|  | ||||
|         {% endfor %} | ||||
|         <div class="form-group"> | ||||
|         <div class="row"> | ||||
|           <label class="control-label col-sm-2" for="mass_subject">{{ lang.admin.include_exclude }}: | ||||
|             <p class="text-muted">{{ lang.admin.include_exclude_info|raw }}</p> | ||||
|           </label> | ||||
| @@ -39,27 +39,27 @@ | ||||
|             </select> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="form-group"> | ||||
|         <div class="row"> | ||||
|           <label class="control-label col-sm-2" 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="form-group"> | ||||
|         <div class="row"> | ||||
|           <label class="control-label col-sm-2" 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="form-group"> | ||||
|         <div class="row"> | ||||
|           <div class="offset-sm-2 col-sm-10"> | ||||
|             <label> | ||||
|               <input type="checkbox" id="mass_disarm"> {{ lang.admin.activate_send }} | ||||
|             </label> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="form-group"> | ||||
|         <div class="row"> | ||||
|           <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> | ||||
|   | ||||
| @@ -6,40 +6,40 @@ | ||||
| <br> | ||||
| <form class="form-horizontal" data-id="editadmin" role="form" method="post" autocomplete="off"> | ||||
|   <input type="hidden" value="0" name="active"> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="username_new">{{ lang.edit.username }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input class="form-control" type="text" name="username_new" onkeyup="this.value = this.value.toLowerCase();" required value="{{ admin }}" /> | ||||
|       ↳ <kbd>a-z - _ .</kbd> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="password">{{ lang.edit.password }} (<a href="#" class="generate_password">{{ lang.edit.generate }}</a>)</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input type="password" data-pwgen-field="true" data-hibp="true" class="form-control" name="password" placeholder="" autocomplete="new-password"> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="password2">{{ lang.edit.password_repeat }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input type="password" data-pwgen-field="true" class="form-control" name="password2" autocomplete="new-password"> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <div class="checkbox"> | ||||
|         <label><input type="checkbox" value="1" name="active"{% if result.active == '1' %} checked{% endif %}> {{ lang.edit.active }}</label> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <div class="checkbox"> | ||||
|         <label><input type="checkbox" value="1" name="disable_tfa"> {{ lang.tfa.disable_tfa }}</label> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-api-reload-location="/admin" data-id="editadmin" data-item="{{ admin }}" data-api-url='edit/admin' data-api-attr='{}' href="#">{{ lang.edit.save }}</button> | ||||
|     </div> | ||||
|   | ||||
| @@ -9,13 +9,13 @@ | ||||
|   {% if not skip_sogo %} | ||||
|   <input type="hidden" value="0" name="sogo_visible"> | ||||
|   {% endif %} | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="address">{{ lang.edit.alias }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input class="form-control" type="text" name="address" value="{{ result.address }}" /> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="goto">{{ lang.edit.target_address|raw }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <textarea id="textarea_alias_goto" class="form-control" autocapitalize="none" autocorrect="off" rows="10" id="goto" name="goto" required>{{ goto|replace({',': ', '}) }}</textarea> | ||||
| @@ -38,27 +38,27 @@ | ||||
|     </div> | ||||
|   </div> | ||||
|   <hr> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="private_">{{ lang.edit.private_comment }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input maxlength="160" class="form-control" type="text" name="private_comment" value="{{ result.private_comment }}" /> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="public_comment">{{ lang.edit.public_comment }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input maxlength="160" class="form-control" type="text" name="public_comment" value="{{ result.public_comment }}" /> | ||||
|     </div> | ||||
|   </div> | ||||
|   <hr> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <div class="checkbox"> | ||||
|         <label><input type="checkbox" value="1" name="active"{% if result.active == '1' %} checked{% endif %}> {{ lang.edit.active }}</label> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-id="editalias" data-item="{{ alias }}" data-api-url='edit/alias' data-api-attr='{}' href="#">{{ lang.edit.save }}</button> | ||||
|     </div> | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
| <h4>{{ lang.edit.edit_alias_domain }}</h4> | ||||
| <form class="form-horizontal" data-id="editaliasdomain" role="form" method="post"> | ||||
|   <input type="hidden" value="0" name="active"> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="target_domain">{{ lang.edit.target_domain }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <select class="full-width-select" data-live-search="true" id="addSelectDomain" name="target_domain" required> | ||||
| @@ -15,14 +15,14 @@ | ||||
|       </select> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <div class="checkbox"> | ||||
|         <label><input type="checkbox" value="1" name="active"{% if result.active == '1' %} checked{% endif %}> {{ lang.edit.active }}</label> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-id="editaliasdomain" data-item="{{ alias_domain }}" data-api-url='edit/alias-domain' data-api-attr='{}' href="#">{{ lang.edit.save }}</button> | ||||
|     </div> | ||||
| @@ -30,16 +30,16 @@ | ||||
| </form> | ||||
| <hr> | ||||
| <form data-id="domratelimit" class="form-inline well" method="post"> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label">{{ lang.acl.ratelimit }}</label> | ||||
|     <input name="rl_value" type="number" value="{{ rl.value }}" autocomplete="off" class="form-control" placeholder="{{ lang.ratelimit.disabled }}"> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <select name="rl_frame" class="form-control"> | ||||
|       {% include 'mailbox/rl-frame.twig' %} | ||||
|     </select> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <button class="btn btn-xs-lg d-block d-sm-inline btn-secondary" data-action="edit_selected" data-id="domratelimit" data-item="{{ alias_domain }}" data-api-url='edit/rl-domain' data-api-attr='{}' href="#">{{ lang.admin.save }}</button> | ||||
|   </div> | ||||
| </form> | ||||
|   | ||||
| @@ -6,32 +6,32 @@ | ||||
| <form class="form-horizontal" data-pwgen-length="32" data-id="editapp" role="form" method="post"> | ||||
|   <input type="hidden" value="0" name="active"> | ||||
|   <input type="hidden" value="0" name="protocols"> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="app_name">{{ lang.edit.app_name }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input type="text" class="form-control" name="app_name" id="app_name" value="{{ result.name }}" required maxlength="255"> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="password">{{ lang.edit.password }} (<a href="#" class="generate_password">{{ lang.edit.generate }}</a>)</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input type="password" data-pwgen-field="true" data-hibp="true" class="form-control" name="password" placeholder="" autocomplete="new-password"> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="password2">{{ lang.edit.password_repeat }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input type="password" data-pwgen-field="true" class="form-control" name="password2" autocomplete="new-password"> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <div class="checkbox"> | ||||
|         <label><input type="checkbox" value="1" name="active"{% if result.active == '1' %} checked{% endif %}> {{ lang.edit.active }}</label> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="protocols">{{ lang.edit.app_passwd_protocols }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <select class="full-width-select" data-live-search="true" id="protocols" name="protocols" multiple> | ||||
| @@ -44,7 +44,7 @@ | ||||
|       </select> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-id="editapp" data-item="{{ result.id }}" data-api-url='edit/app-passwd' data-api-attr='{}' href="#">{{ lang.edit.save }}</button> | ||||
|     </div> | ||||
|   | ||||
| @@ -6,14 +6,14 @@ | ||||
| <br> | ||||
| <form class="form-horizontal" data-id="editbcc" role="form" method="post"> | ||||
|   <input type="hidden" value="0" name="active"> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="bcc_dest">{{ lang.mailbox.bcc_destination }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input value="{{ result.bcc_dest }}" type="text" class="form-control" name="bcc_dest" id="bcc_dest"> | ||||
|       <small>{{ lang.edit.bcc_dest_format|raw }}</small> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="type">{{ lang.mailbox.bcc_map_type }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <select id="addFilterType" name="type" id="type" required> | ||||
| @@ -22,14 +22,14 @@ | ||||
|       </select> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <div class="checkbox"> | ||||
|         <label><input type="checkbox" value="1" name="active"{% if result.active == '1' %} checked{% endif %}> {{ lang.edit.active }}</label> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-id="editbcc" data-item="{{ bcc }}" data-api-url='edit/bcc' data-api-attr='{}' href="#">{{ lang.edit.save }}</button> | ||||
|     </div> | ||||
|   | ||||
| @@ -17,13 +17,13 @@ | ||||
|       <input type="hidden" value="0" name="gal"> | ||||
|       <input type="hidden" value="0" name="relay_all_recipients"> | ||||
|       <input type="hidden" value="0" name="relay_unknown_only"> | ||||
|       <div class="form-group" data-acl="{{ acl.domain_desc }}"> | ||||
|       <div class="row" data-acl="{{ acl.domain_desc }}"> | ||||
|         <label class="control-label col-sm-2" for="description">{{ lang.edit.description }}</label> | ||||
|         <div class="col-sm-10"> | ||||
|           <input type="text" class="form-control" name="description" value="{{ result.description }}"> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <label class="control-label col-sm-2" for="relayhost">{{ lang.edit.relayhost }}</label> | ||||
|         <div class="col-sm-10"> | ||||
|           <select data-acl="{{ acl.domain_relayhost }}" data-live-search="true" id="relayhost" name="relayhost" class="form-control"> | ||||
| @@ -42,37 +42,37 @@ | ||||
|         </div> | ||||
|       </div> | ||||
|       {% if mailcow_cc_role == 'admin' %} | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <label class="control-label col-sm-2" for="aliases">{{ lang.edit.max_aliases }}</label> | ||||
|         <div class="col-sm-10"> | ||||
|           <input type="number" class="form-control" name="aliases" value="{{ result.max_num_aliases_for_domain }}"> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <label class="control-label col-sm-2" for="mailboxes">{{ lang.edit.max_mailboxes }}</label> | ||||
|         <div class="col-sm-10"> | ||||
|           <input type="number" class="form-control" name="mailboxes" value="{{ result.max_num_mboxes_for_domain }}"> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <label class="control-label col-sm-2" for="defquota">{{ lang.edit.mailbox_quota_def }}</label> | ||||
|         <div class="col-sm-10"> | ||||
|           <input type="number" class="form-control" name="defquota" value="{{ (result.def_quota_for_mbox / 1048576) }}"> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <label class="control-label col-sm-2" for="maxquota">{{ lang.edit.max_quota }}</label> | ||||
|         <div class="col-sm-10"> | ||||
|           <input type="number" class="form-control" name="maxquota" value="{{ (result.max_quota_for_mbox / 1048576) }}"> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <label class="control-label col-sm-2" for="quota">{{ lang.edit.domain_quota }}</label> | ||||
|         <div class="col-sm-10"> | ||||
|           <input type="number" class="form-control" name="quota" value="{{ (result.max_quota_for_domain / 1048576) }}"> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <label class="control-label col-sm-2">{{ lang.edit.backup_mx_options }}</label> | ||||
|         <div class="col-sm-10"> | ||||
|           <div class="checkbox"> | ||||
| @@ -88,7 +88,7 @@ | ||||
|         </div> | ||||
|       </div> | ||||
|       {% endif %} | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <div class="offset-sm-2 col-sm-10"> | ||||
|           <div class="checkbox"> | ||||
|             <label><input type="checkbox" value="1" name="gal"{% if result.gal == '1' %} checked{% endif %}> {{ lang.edit.gal }}</label> | ||||
| @@ -97,14 +97,14 @@ | ||||
|         </div> | ||||
|       </div> | ||||
|       <hr> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <div class="offset-sm-2 col-sm-10"> | ||||
|           <div class="checkbox"> | ||||
|             <label><input type="checkbox" value="1" name="active"{% if result.active == '1' %} checked{% endif %}{% if mailcow_cc_role != 'admin' %} disabled{% endif %}> {{ lang.edit.active }}</label> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <div class="offset-sm-2 col-sm-10"> | ||||
|           <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-id="editdomain" data-item="{{ domain }}" data-api-url='edit/domain' data-api-attr='{}' href="#">{{ lang.admin.save }}</button> | ||||
|         </div> | ||||
| @@ -124,16 +124,16 @@ | ||||
|   </div> | ||||
|   <div id="dratelimit" class="tab-pane fade" role="tabpanel" aria-labelledby="domain-ratelimit"> | ||||
|     <form data-id="domratelimit" class="form-inline well" method="post"> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <label class="control-label">{{ lang.edit.ratelimit }}</label> | ||||
|         <input name="rl_value" type="number" value="{{ rl.value }}" autocomplete="off" class="form-control" placeholder="{{ lang.ratelimit.disabled }}"> | ||||
|       </div> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <select name="rl_frame" class="form-control"> | ||||
|           {% include 'mailbox/rl-frame.twig' %} | ||||
|         </select> | ||||
|       </div> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <button data-acl="{{ acl.ratelimit }}" class="btn btn-xs-lg d-block d-sm-inline btn-secondary" data-action="edit_selected" data-id="domratelimit" data-item="{{ domain }}" data-api-url='edit/rl-domain' data-api-attr='{}' href="#">{{ lang.admin.save }}</button> | ||||
|       </div> | ||||
|     </form> | ||||
| @@ -191,20 +191,20 @@ | ||||
|         <p>{{ lang.edit.quota_warning_bcc_info|raw }}</p> | ||||
|         <form class="form-horizontal" data-id="quota_bcc"> | ||||
|           <input type="hidden" value="0" name="active"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="script_data">{{ lang.edit.target_address|raw }}:</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <textarea spellcheck="false" autocorrect="off" autocapitalize="none" class="form-control" rows="10" id="bcc_rcpt" name="bcc_rcpt">{{ quota_notification_bcc.bcc_rcpts|join("\n") }}</textarea> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="active"{% if quota_notification_bcc.active == '1' %} checked{% endif %}> {{ lang.edit.active }}</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-id="quota_bcc" data-item="quota_bcc" data-api-url='edit/quota_notification_bcc' data-api-attr='{"domain":"{{ domain }}"}' href="#">{{ lang.edit.save }}</button> | ||||
|             </div> | ||||
|   | ||||
| @@ -6,14 +6,14 @@ | ||||
| <br> | ||||
| <form class="form-horizontal" data-id="editdomainadmin" role="form" method="post" autocomplete="off"> | ||||
|   <input type="hidden" value="0" name="active"> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="username_new">{{ lang.edit.username }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input class="form-control" type="text" name="username_new" value="{{ domain_admin }}" required onkeyup="this.value = this.value.toLowerCase();" /> | ||||
|       ↳ <kbd>a-z - _ .</kbd> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="domains">{{ lang.edit.domains }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <select data-live-search="true" class="full-width-select" name="domains" multiple required> | ||||
| @@ -26,33 +26,33 @@ | ||||
|       </select> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="password">{{ lang.edit.password }} (<a href="#" class="generate_password">{{ lang.edit.generate }}</a>)</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input type="password" data-pwgen-field="true" data-hibp="true" class="form-control" name="password" placeholder="" autocomplete="new-password"> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="password2">{{ lang.edit.password_repeat }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input type="password" data-pwgen-field="true" class="form-control" name="password2" autocomplete="new-password"> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <div class="checkbox"> | ||||
|         <label><input type="checkbox" value="1" name="active"{% if result.active == '1' %} checked{% endif %}> {{ lang.edit.active }}</label> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <div class="checkbox"> | ||||
|         <label><input type="checkbox" value="1" name="disable_tfa"> {{ lang.tfa.disable_tfa }}</label> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-api-reload-location="/admin" data-id="editdomainadmin" data-item="{{ domain_admin }}" data-api-url='edit/domain-admin' data-api-attr='{}' href="#">{{ lang.edit.save }}</button> | ||||
|     </div> | ||||
| @@ -64,14 +64,14 @@ | ||||
|       <p class="text-muted">ACL</p> | ||||
|     </div> | ||||
|     <div class="col-sm-10"> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <select id="da_acl" name="da_acl" size="10" data-container="body" multiple> | ||||
|           {% for acl, val in da_acls %} | ||||
|           <option value="{{ acl }}"{% if val == 1 %} selected{% endif %}>{{ lang.acl[acl] }}</option> | ||||
|           {% endfor %} | ||||
|         </select> | ||||
|       </div> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <button class="btn btn-xs-lg d-block d-sm-inline btn-secondary" data-action="edit_selected" data-id="daacl" data-item="{{ domain_admin }}" data-api-url='edit/da-acl' data-api-attr='{}' href="#">{{ lang.admin.save }}</button> | ||||
|       </div> | ||||
|     </div> | ||||
|   | ||||
| @@ -5,13 +5,13 @@ | ||||
| <h4>Filter</h4> | ||||
| <form class="form-horizontal" data-id="editfilter" role="form" method="post"> | ||||
|   <input type="hidden" value="0" name="active"> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="script_desc">{{ lang.edit.sieve_desc }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input type="text" class="form-control" name="script_desc" id="script_desc" value="{{ result.script_desc }}" required maxlength="255"> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="filter_type">{{ lang.edit.sieve_type }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <select id="addFilterType" name="filter_type" id="filter_type" required> | ||||
| @@ -20,20 +20,20 @@ | ||||
|       </select> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="script_data">Script:</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <textarea spellcheck="false" autocorrect="off" autocapitalize="none" class="form-control textarea-code" rows="20" id="script_data" name="script_data" required>{{ result.script_data|raw }}</textarea> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <div class="checkbox"> | ||||
|         <label><input type="checkbox" value="1" name="active"{% if result.active == '1' %} checked{% endif %}> {{ lang.edit.active }}</label> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-id="editfilter" data-item="{{ result.id }}" data-api-url='edit/filter' data-api-attr='{}' href="#">{{ lang.edit.validate_save }}</button> | ||||
|     </div> | ||||
|   | ||||
| @@ -16,13 +16,13 @@ | ||||
|       <input type="hidden" value="0" name="force_pw_update"> | ||||
|       <input type="hidden" value="0" name="sogo_access"> | ||||
|       <input type="hidden" value="0" name="protocol_access"> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <label class="control-label col-sm-2" for="name">{{ lang.edit.full_name }}</label> | ||||
|         <div class="col-sm-10"> | ||||
|           <input type="text" class="form-control" name="name" value="{{ result.name }}"> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <label class="control-label col-sm-2" for="quota">{{ lang.edit.quota_mb }} | ||||
|           <br><span id="quotaBadge" class="badge">max. {{ (result.max_new_quota / 1048576) }} MiB</span> | ||||
|         </label> | ||||
| @@ -31,7 +31,7 @@ | ||||
|           <small class="text-muted">0 = ∞</small> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <label class="control-label col-sm-2" for="sender_acl">{{ lang.edit.sender_acl }}</label> | ||||
|         <div class="col-sm-10"> | ||||
|           <select data-live-search="true" data-width="100%" style="width:100%" id="editSelectSenderACL" name="sender_acl" size="10" multiple> | ||||
| @@ -69,7 +69,7 @@ | ||||
|           <small class="text-muted">{{ lang.edit.sender_acl_info|raw }}</small> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <label class="control-label col-sm-2" for="relayhost">{{ lang.edit.relayhost }}</label> | ||||
|         <div class="col-sm-10"> | ||||
|           <select data-acl="{{ acl.mailbox_relayhost }}" data-live-search="true" id="relayhost" name="relayhost" class="form-control mb-4"> | ||||
| @@ -89,7 +89,7 @@ | ||||
|           <small class="text-muted">{{ lang.edit.mailbox_relayhost_info }}</small> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <label class="control-label col-sm-2">{{ lang.user.quarantine_notification }}</label> | ||||
|         <div class="col-sm-10"> | ||||
|           <div class="btn-group" data-acl="{{ acl.quarantine_notification }}"> | ||||
| @@ -121,7 +121,7 @@ | ||||
|           <p class="text-muted"><small>{{ lang.user.quarantine_notification_info }}</small></p> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <label class="control-label col-sm-2">{{ lang.user.quarantine_category }}</label> | ||||
|         <div class="col-sm-10"> | ||||
|           <div class="btn-group" data-acl="{{ acl.quarantine_category }}"> | ||||
| @@ -147,7 +147,7 @@ | ||||
|           <p class="text-muted"><small>{{ lang.user.quarantine_category_info }}</small></p> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <label class="control-label col-sm-2" for="sender_acl">{{ lang.user.tls_policy }}</label> | ||||
|         <div class="col-sm-10"> | ||||
|           <div class="btn-group" data-acl="{{ acl.tls_policy }}"> | ||||
| @@ -166,19 +166,19 @@ | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <label class="control-label col-sm-2" for="password">{{ lang.edit.password }} (<a href="#" class="generate_password">{{ lang.edit.generate }}</a>)</label> | ||||
|         <div class="col-sm-10"> | ||||
|           <input type="password" data-pwgen-field="true" data-hibp="true" class="form-control" name="password" placeholder="{{ lang.edit.unchanged_if_empty }}" autocomplete="new-password"> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <label class="control-label col-sm-2" for="password2">{{ lang.edit.password_repeat }}</label> | ||||
|         <div class="col-sm-10"> | ||||
|           <input type="password" data-pwgen-field="true" class="form-control" name="password2" autocomplete="new-password"> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div data-acl="{{ acl.extend_sender_acl }}" class="form-group"> | ||||
|       <div data-acl="{{ acl.extend_sender_acl }}" class="row"> | ||||
|         <label class="control-label col-sm-2" for="extended_sender_acl">{{ lang.edit.extended_sender_acl }}</label> | ||||
|         <div class="col-sm-10"> | ||||
|           {% if sender_acl_handles.external_sender_aliases %} | ||||
| @@ -188,7 +188,7 @@ | ||||
|           <small class="text-muted">{{ lang.edit.extended_sender_acl_info|raw }}</small> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <label class="control-label col-sm-2" for="protocol_access">{{ lang.edit.allowed_protocols }}</label> | ||||
|         <div class="col-sm-10"> | ||||
|           <select data-acl="{{ acl.protocol_access }}" name="protocol_access" multiple class="form-control"> | ||||
| @@ -199,7 +199,7 @@ | ||||
|           </select> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div hidden data-acl="{{ acl.smtp_ip_access }}" class="form-group"> | ||||
|       <div hidden data-acl="{{ acl.smtp_ip_access }}" class="row"> | ||||
|         <label class="control-label col-sm-2" for="allow_from_smtp">{{ lang.edit.allow_from_smtp }}</label> | ||||
|         <div class="col-sm-10"> | ||||
|           <input type="text" class="form-control" name="allow_from_smtp" value="{{ allow_from_smtp }}" placeholder="1.1.1.1, 10.2.0.0/24, ..."> | ||||
| @@ -207,7 +207,7 @@ | ||||
|         </div> | ||||
|       </div> | ||||
|       <hr> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <div class="offset-sm-2 col-sm-10"> | ||||
|           <select name="active" class="form-control"> | ||||
|             <option value="1"{% if result.active == '1' %} selected{% endif %}>{{ lang.edit.active }}</option> | ||||
| @@ -216,7 +216,7 @@ | ||||
|           </select> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <div class="offset-sm-2 col-sm-10"> | ||||
|           <div class="checkbox"> | ||||
|             <label><input type="checkbox" value="1" name="force_pw_update"{% if result.attributes.force_pw_update == '1' %} checked{% endif %}> {{ lang.edit.force_pw_update }}</label> | ||||
| @@ -225,7 +225,7 @@ | ||||
|         </div> | ||||
|       </div> | ||||
|       {% if not skip_sogo %} | ||||
|       <div data-acl="{{ acl.sogo_access }}" class="form-group"> | ||||
|       <div data-acl="{{ acl.sogo_access }}" class="row"> | ||||
|         <div class="offset-sm-2 col-sm-10"> | ||||
|           <div class="checkbox"> | ||||
|             <label><input type="checkbox" value="1" name="sogo_access"{% if result.attributes.sogo_access == '1' %} checked{% endif %}> {{ lang.edit.sogo_access }}</label> | ||||
| @@ -234,7 +234,7 @@ | ||||
|         </div> | ||||
|       </div> | ||||
|       {% endif %} | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <div class="offset-sm-2 col-sm-10"> | ||||
|           <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-id="editmailbox" data-item="{{ result.username }}" data-api-url='edit/mailbox' data-api-attr='{}' href="#">{{ lang.edit.save }}</button> | ||||
|         </div> | ||||
| @@ -253,34 +253,34 @@ | ||||
|         <div class="col-sm-10"> | ||||
|           <p class="text-muted">{{ lang.user.pushover_info|format(mailbox)|raw }}</p> | ||||
|           <p class="text-muted">{{ lang.edit.pushover_vars|raw }}: <code>{SUBJECT}</code>, <code>{SENDER}</code></p> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="row"> | ||||
|               <div class="col-sm-6"> | ||||
|                 <div class="form-group"> | ||||
|                 <div class="row"> | ||||
|                   <label for="token">API Token/Key (Application)</label> | ||||
|                   <input type="text" class="form-control" name="token" maxlength="30" value="{{ pushover_data.token }}" required> | ||||
|                 </div> | ||||
|               </div> | ||||
|               <div class="col-sm-6"> | ||||
|                 <div class="form-group"> | ||||
|                 <div class="row"> | ||||
|                   <label for="key">User/Group Key</label> | ||||
|                   <input type="text" class="form-control" name="key" maxlength="30" value="{{ pushover_data.key }}" required> | ||||
|                 </div> | ||||
|               </div> | ||||
|               <div class="col-sm-6"> | ||||
|                 <div class="form-group"> | ||||
|                 <div class="row"> | ||||
|                   <label for="title">{{ lang.edit.pushover_title }}</label> | ||||
|                   <input type="text" class="form-control" name="title" value="{{ pushover_data.title }}" placeholder="Mail"> | ||||
|                 </div> | ||||
|               </div> | ||||
|               <div class="col-sm-6"> | ||||
|                 <div class="form-group"> | ||||
|                 <div class="row"> | ||||
|                   <label for="text">{{ lang.edit.pushover_text }}</label> | ||||
|                   <input type="text" class="form-control" name="text" value="{{ pushover_data.text }}" placeholder="You've got mail 📧"> | ||||
|                 </div> | ||||
|               </div> | ||||
|               <div class="col-sm-12"> | ||||
|                 <div class="form-group"> | ||||
|                 <div class="row"> | ||||
|                   <label for="text">{{ lang.edit.pushover_sender_array|raw }}</label> | ||||
|                   <input type="text" class="form-control" name="senders" value="{{ pushover_data.senders }}" placeholder="sender1@example.com, sender2@example.com"> | ||||
|                 </div> | ||||
| @@ -298,7 +298,7 @@ | ||||
|               </div> | ||||
|               <div class="col-sm-12"> | ||||
|                 <div id="po_advanced" class="collapse"> | ||||
|                   <div class="form-group"> | ||||
|                   <div class="row"> | ||||
|                     <label for="text">{{ lang.edit.pushover_sender_regex }}</label> | ||||
|                     <input type="text" class="form-control" name="senders_regex" value="{{ pushover_data.senders_regex }}" placeholder="/(.*@example\.org$|^foo@example\.com$)/i" regex="true"> | ||||
|                     <div class="checkbox"> | ||||
| @@ -328,14 +328,14 @@ | ||||
|           <p class="text-muted">ACL</p> | ||||
|         </div> | ||||
|         <div class="col-sm-10"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <select id="user_acl" name="user_acl" size="10" multiple> | ||||
|               {% for acl, val in user_acls %} | ||||
|                 <option value="{{ acl }}"{% if val == 1 %} selected{% endif %}>{{ lang.acl[acl] }}</option> | ||||
|               {% endfor %} | ||||
|             </select> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <button class="btn btn-xs-lg d-block d-sm-inline btn-secondary" data-action="edit_selected" data-id="useracl" data-item="{{ mailbox }}" data-api-url='edit/user-acl' data-api-attr='{}' href="#">{{ lang.edit.save }}</button> | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -349,15 +349,15 @@ | ||||
|           <p class="text-muted">{{ lang.acl.ratelimit }}</p> | ||||
|         </div> | ||||
|         <div class="col-sm-10"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <input name="rl_value" type="number" autocomplete="off" value="{{ rl.value }}" class="form-control" placeholder="{{ lang.ratelimit.disabled }}"> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <select name="rl_frame" class="form-control"> | ||||
|               {% include 'mailbox/rl-frame.twig' %} | ||||
|             </select> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <button class="btn btn-xs-lg d-block d-sm-inline btn-secondary" data-action="edit_selected" data-id="mboxratelimit" data-item="{{ mailbox }}" data-api-url='edit/rl-mbox' data-api-attr='{}' href="#">{{ lang.edit.save }}</button> | ||||
|           </div> | ||||
|           <p class="text-muted">{{ lang.edit.mbox_rl_info }}</p> | ||||
|   | ||||
| @@ -4,31 +4,31 @@ | ||||
| {% if result %} | ||||
| <h4>OAuth2</h4> | ||||
| <form data-id="oauth2client" class="form-horizontal" role="form" method="post"> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="client_id">{{ lang.edit.client_id }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input type="text" class="form-control" name="client_id" id="client_id" value="{{ result.client_id }}" disabled> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="client_secret">{{ lang.edit.client_secret }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input type="text" class="form-control" name="client_secret" id="client_secret" value="{{ result.client_secret }}" disabled> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="scope">{{ lang.edit.scope }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input type="text" class="form-control" name="scope" id="scope" value="{{ result.scope }}" disabled> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="redirect_uri">{{ lang.edit.redirect_uri }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input type="text" class="form-control" name="redirect_uri" id="redirect_uri" value="{{ result.redirect_uri }}"> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <button class="btn btn-xs-lg d-block d-sm-inline btn-secondary" data-action="edit_selected" data-id="oauth2client" data-item="{{ oauth2client }}" data-api-url='edit/oauth2-client' data-api-attr='{}' href="#">{{ lang.admin.save }}</button> | ||||
|     </div> | ||||
|   | ||||
| @@ -6,28 +6,28 @@ | ||||
| <br> | ||||
| <form class="form-horizontal" data-id="edit_recipient_map" role="form" method="post"> | ||||
|   <input type="hidden" value="0" name="active"> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="recipient_map_new">{{ lang.mailbox.recipient_map_old }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input value="{{ result.recipient_map_old }}" type="text" class="form-control" name="recipient_map_old" id="recipient_map_old"> | ||||
|       <small>{{ lang.mailbox.recipient_map_old_info }}</small> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="recipient_map_new">{{ lang.mailbox.recipient_map_new }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input value="{{ result.recipient_map_new }}" type="text" class="form-control" name="recipient_map_new" id="recipient_map_new"> | ||||
|       <small>{{ lang.mailbox.recipient_map_new_info }}</small> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <div class="checkbox"> | ||||
|         <label><input type="checkbox" value="1" name="active"{% if result.active == '1' %} checked{% endif %}> {{ lang.edit.active }}</label> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-id="edit_recipient_map" data-item="{{ map }}" data-api-url='edit/recipient_map' data-api-attr='{}' href="#">{{ lang.edit.save }}</button> | ||||
|     </div> | ||||
|   | ||||
| @@ -5,33 +5,33 @@ | ||||
| <h4>{{ lang.edit.resource }}</h4> | ||||
| <form class="form-horizontal" role="form" method="post" data-id="editrelayhost"> | ||||
|   <input type="hidden" value="0" name="active"> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="hostname">{{ lang.add.hostname }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input type="text" class="form-control" name="hostname" value="{{ result.hostname }}" required> | ||||
|       <p class="text-muted">{{ lang.add.relayhost_wrapped_tls_info|raw }}</p> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="username">{{ lang.add.username }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input type="text" class="form-control" name="username" value="{{ result.username }}"> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="password">{{ lang.add.password }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input type="text" data-hibp="true" class="form-control" name="password" value="{{ result.password }}"> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <div class="checkbox"> | ||||
|         <label><input type="checkbox" value="1" name="active"{% if result.active == '1' %} checked{% endif %}> {{ lang.edit.active }}</label> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-id="editrelayhost" data-item="{{ result.id }}" data-api-url='edit/relayhost' data-api-attr='{}' href="#">{{ lang.edit.save }}</button> | ||||
|     </div> | ||||
|   | ||||
| @@ -5,13 +5,13 @@ | ||||
| <h4>{{ lang.edit.resource }}</h4> | ||||
| <form class="form-horizontal" role="form" method="post" data-id="editresource"> | ||||
|   <input type="hidden" value="0" name="active"> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="description">{{ lang.add.description }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input type="text" class="form-control" name="description" value="{{ result.description }}" required> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="domain">{{ lang.edit.kind }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <select name="kind" title="{{ lang.edit.select }}" required> | ||||
| @@ -21,7 +21,7 @@ | ||||
|       </select> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="multiple_bookings_select">{{ lang.add.multiple_bookings }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <select name="multiple_bookings_select" id="editSelectMultipleBookings" title="{{ lang.add.select }}" required> | ||||
| @@ -36,14 +36,14 @@ | ||||
|       <input type="hidden" name="multiple_bookings" id="multiple_bookings"> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <div class="checkbox"> | ||||
|         <label><input type="checkbox" value="1" name="active"{% if result.active == '1' %} checked{% endif %}> {{ lang.edit.active }}</label> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-id="editresource" data-item="{{ result.name }}" data-api-url='edit/resource' data-api-attr='{}' href="#">{{ lang.edit.save }}</button> | ||||
|     </div> | ||||
|   | ||||
| @@ -11,31 +11,31 @@ | ||||
|     <input type="hidden" value="0" name="skipcrossduplicates"> | ||||
|     <input type="hidden" value="0" name="active"> | ||||
|     <input type="hidden" value="0" name="subscribeall"> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <label class="control-label col-sm-2" for="host1">{{ lang.edit.hostname }}</label> | ||||
|       <div class="col-sm-10"> | ||||
|         <input type="text" class="form-control" name="host1" id="host1" value="{{ result.host1 }}"> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <label class="control-label col-sm-2" for="port1">Port</label> | ||||
|       <div class="col-sm-10"> | ||||
|         <input type="number" class="form-control" name="port1" id="port1" min="1" max="65535" value="{{ result.port1 }}"> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <label class="control-label col-sm-2" for="user1">{{ lang.edit.username }}</label> | ||||
|       <div class="col-sm-10"> | ||||
|         <input type="text" class="form-control" name="user1" id="user1" value="{{ result.user1 }}"> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <label class="control-label col-sm-2" for="password1">{{ lang.edit.password }}</label> | ||||
|       <div class="col-sm-10"> | ||||
|         <input type="password" class="form-control" name="password1" id="password1" value="{{ result.password1 }}"> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <label class="control-label col-sm-2" for="enc1">{{ lang.edit.encryption }}</label> | ||||
|       <div class="col-sm-10"> | ||||
|         <select id="enc1" name="enc1"> | ||||
| @@ -45,110 +45,110 @@ | ||||
|         </select> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <label class="control-label col-sm-2" for="mins_interval">{{ lang.edit.mins_interval }}</label> | ||||
|       <div class="col-sm-10"> | ||||
|         <input type="number" class="form-control" name="mins_interval" min="1" max="43800" value="{{ result.mins_interval }}" required> | ||||
|         <small class="text-muted">1-43800</small> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <label class="control-label col-sm-2" for="subfolder2">{{ lang.edit.subfolder2|raw }}</label> | ||||
|       <div class="col-sm-10"> | ||||
|         <input type="text" class="form-control" name="subfolder2" id="subfolder2" value="{{ result.subfolder2 }}"> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <label class="control-label col-sm-2" for="maxage">{{ lang.edit.maxage|raw }}</label> | ||||
|       <div class="col-sm-10"> | ||||
|         <input type="number" class="form-control" name="maxage" id="maxage" min="0" max="32000" value="{{ result.maxage }}"> | ||||
|         <small class="text-muted">0-32000</small> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <label class="control-label col-sm-2" for="maxbytespersecond">{{ lang.edit.maxbytespersecond|raw }}</label> | ||||
|       <div class="col-sm-10"> | ||||
|         <input type="number" class="form-control" name="maxbytespersecond" id="maxbytespersecond" min="0" max="125000000" value="{{ result.maxbytespersecond }}"> | ||||
|         <small class="text-muted">0-125000000</small> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <label class="control-label col-sm-2" for="timeout1">{{ lang.add.timeout1 }}</label> | ||||
|       <div class="col-sm-10"> | ||||
|         <input type="number" class="form-control" name="timeout1" id="timeout1" min="1" max="32000" value="{{ result.timeout1 }}"> | ||||
|         <small class="text-muted">1-32000</small> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <label class="control-label col-sm-2" for="timeout2">{{ lang.add.timeout2 }}</label> | ||||
|       <div class="col-sm-10"> | ||||
|         <input type="number" class="form-control" name="timeout2" id="timeout2" min="1" max="32000" value="{{ result.timeout2 }}"> | ||||
|         <small class="text-muted">1-32000</small> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <label class="control-label col-sm-2" for="exclude">{{ lang.edit.exclude }}</label> | ||||
|       <div class="col-sm-10"> | ||||
|         <input type="text" class="form-control" name="exclude" id="exclude" value="{{ result.exclude }}"> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <label class="control-label col-sm-2" for="custom_params">{{ lang.add.custom_params }}</label> | ||||
|       <div class="col-sm-10"> | ||||
|         <input type="text" class="form-control" name="custom_params" id="custom_params" value="{{ result.custom_params }}" placeholder="--dry --some-param=xy --other-param=yx"> | ||||
|         <small class="text-muted">{{ lang.add.custom_params_hint }}</small> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <div class="offset-sm-2 col-sm-10"> | ||||
|         <div class="checkbox"> | ||||
|           <label><input type="checkbox" value="1" name="delete2duplicates"{% if result.delete2duplicates == '1' %} checked{% endif %}> {{ lang.edit.delete2duplicates }} (--delete2duplicates)</label> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <div class="offset-sm-2 col-sm-10"> | ||||
|         <div class="checkbox"> | ||||
|           <label><input type="checkbox" value="1" name="delete1"{% if result.delete1 == '1' %} checked{% endif %}> {{ lang.edit.delete1 }} (--delete1)</label> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <div class="offset-sm-2 col-sm-10"> | ||||
|         <div class="checkbox"> | ||||
|           <label><input type="checkbox" value="1" name="delete2"{% if result.delete2 == '1' %} checked{% endif %}> {{ lang.edit.delete2 }} (--delete2)</label> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <div class="offset-sm-2 col-sm-10"> | ||||
|         <div class="checkbox"> | ||||
|           <label><input type="checkbox" value="1" name="automap"{% if result.automap == '1' %} checked{% endif %}> {{ lang.edit.automap }} (--automap)</label> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <div class="offset-sm-2 col-sm-10"> | ||||
|         <div class="checkbox"> | ||||
|           <label><input type="checkbox" value="1" name="skipcrossduplicates"{% if result.skipcrossduplicates == '1' %} checked{% endif %}> {{ lang.edit.skipcrossduplicates }} (--skipcrossduplicates)</label> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <div class="offset-sm-2 col-sm-10"> | ||||
|         <div class="checkbox"> | ||||
|           <label><input type="checkbox" value="1" name="subscribeall"{% if result.subscribeall == '1' %} checked{% endif %}> {{ lang.add.subscribeall }} (--subscribeall)</label> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <div class="offset-sm-2 col-sm-10"> | ||||
|         <div class="checkbox"> | ||||
|           <label><input type="checkbox" value="1" name="active"{% if result.active == '1' %} checked{% endif %}> {{ lang.edit.active }}</label> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|     <div class="row"> | ||||
|       <div class="offset-sm-2 col-sm-10"> | ||||
|         <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-id="editsyncjob" data-item="{{ result.id }}" data-api-url='edit/syncjob' data-api-attr='{}' href="#">{{ lang.edit.save }}</button> | ||||
|       </div> | ||||
|   | ||||
| @@ -6,14 +6,14 @@ | ||||
| <br> | ||||
| <form class="form-horizontal" data-id="edit_tls_policy_maps" role="form" method="post"> | ||||
|   <input type="hidden" value="0" name="active"> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="dest">{{ lang.mailbox.tls_map_dest }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input value="{{ result.dest }}" type="text" class="form-control" name="dest" id="dest"> | ||||
|       <small>{{ lang.mailbox.tls_map_dest_info }}</small> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="policy">{{ lang.mailbox.tls_map_policy }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <select class="full-width-select" name="policy" required> | ||||
| @@ -23,21 +23,21 @@ | ||||
|       </select> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="parameters">{{ lang.mailbox.tls_map_parameters }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input value="{{ result.parameters }}" type="text" class="form-control" name="parameters" id="parameters"> | ||||
|       <small>{{ lang.mailbox.tls_map_parameters_info }}</small> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <div class="checkbox"> | ||||
|         <label><input type="checkbox" value="1" name="active"{% if result.active == '1' %} checked{% endif %}> {{ lang.edit.active }}</label> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-id="edit_tls_policy_maps" data-item="{{ map }}" data-api-url='edit/tls-policy-map' data-api-attr='{}' href="#">{{ lang.edit.save }}</button> | ||||
|     </div> | ||||
|   | ||||
| @@ -6,45 +6,45 @@ | ||||
| <form class="form-horizontal" role="form" method="post" data-id="edittransport"> | ||||
|   <input type="hidden" value="0" name="active"> | ||||
|   <input type="hidden" value="0" name="is_mx_based"> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="destination">{{ lang.add.destination }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input type="text" class="form-control" name="destination" value="{{ result.destination }}" required> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="nexthop">{{ lang.edit.nexthop }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input type="text" class="form-control" name="nexthop" placeholder='[0.0.0.0], [0.0.0.0]:25, host:25, host, [host]:25' value="{{ result.nexthop }}" required> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="username">{{ lang.add.username }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input type="text" class="form-control" name="username" value="{{ result.username }}"> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <label class="control-label col-sm-2" for="password">{{ lang.add.password }}</label> | ||||
|     <div class="col-sm-10"> | ||||
|       <input type="text" data-hibp="true" class="form-control" name="password" value="{{ result.password }}"> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <div class="checkbox"> | ||||
|         <label><input type="checkbox" value="1" name="is_mx_based"{% if result.is_mx_based == '1' %} checked{% endif %}> {{ lang.edit.lookup_mx|raw }}</label> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <div class="checkbox"> | ||||
|         <label><input type="checkbox" value="1" name="active"{% if result.active == '1' %} checked{% endif %}> {{ lang.edit.active }}</label> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="form-group"> | ||||
|   <div class="row"> | ||||
|     <div class="offset-sm-2 col-sm-10"> | ||||
|       <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-id="edittransport" data-item="{{ result.id }}" data-api-url='edit/transport' data-api-attr='{}' href="#">{{ lang.edit.save }}</button> | ||||
|     </div> | ||||
|   | ||||
| @@ -39,12 +39,12 @@ | ||||
|       <div class="col-lg-6"> | ||||
|         <h5>Global Prefilter</h5> | ||||
|         <form class="form-horizontal" data-cached-form="false" role="form" data-id="add_prefilter"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="col-sm-12"> | ||||
|               <textarea autocorrect="off" spellcheck="false" autocapitalize="none" class="form-control textarea-code script_data" rows="10" name="script_data" required>{{ global_filters.prefilter }}</textarea> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="col-sm-10 add_filter_btns"> | ||||
|               <div class="btn-group"> | ||||
|                 <button class="btn btn-sm btn-xs-half d-block d-sm-inline btn-secondary validate_sieve" href="#">{{ lang.add.validate }}</button> | ||||
| @@ -57,12 +57,12 @@ | ||||
|       <div class="col-lg-6"> | ||||
|         <h5>Global Postfilter</h5> | ||||
|         <form class="form-horizontal" data-cached-form="false" role="form" data-id="add_postfilter"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="col-sm-12"> | ||||
|               <textarea autocorrect="off" spellcheck="false" autocapitalize="none" class="form-control textarea-code script_data" rows="10" name="script_data" required>{{ global_filters.postfilter }}</textarea> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="col-sm-10 add_filter_btns"> | ||||
|               <div class="btn-group"> | ||||
|                 <button class="btn btn-sm btn-xs-half d-block d-sm-inline btn-secondary validate_sieve" href="#">{{ lang.add.validate }}</button> | ||||
|   | ||||
| @@ -8,26 +8,26 @@ | ||||
|       </div> | ||||
|       <div class="modal-body"> | ||||
|         <form class="form-horizontal" data-cached-form="true" data-id="rsetting" role="form" method="post"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="desc">{{ lang.admin.rsetting_desc }}:</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" id="adminRspamdSettingsDesc" name="desc" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="content">{{ lang.admin.rsetting_content }}:</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <textarea class="form-control" id="adminRspamdSettingsContent" name="content" rows="10"></textarea> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="active" checked> {{ lang.admin.active }}</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="add_item" data-id="rsetting" data-api-url='add/rsetting' data-api-attr='{}' href="#"><i class="bi bi-plus-lg"></i> {{ lang.admin.add }}</button> | ||||
|             </div> | ||||
| @@ -50,14 +50,14 @@ | ||||
|       </div> | ||||
|       <div class="modal-body"> | ||||
|         <form class="form-horizontal" data-cached-form="true" data-id="add_domain_admin" role="form" method="post" autocomplete="off"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="username">{{ lang.admin.username }}:</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="username" onkeyup="this.value = this.value.toLowerCase();" required> | ||||
|               ↳ <kbd>a-z - _ .</kbd> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="name">{{ lang.admin.admin_domains }}:</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <select title="{{ lang.admin.search_domain_da }}" class="full-width-select" name="domains" size="5" multiple> | ||||
| @@ -67,26 +67,26 @@ | ||||
|               </select> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="password">{{ lang.admin.password }} (<a href="#" class="generate_password">{{ lang.admin.generate }}</a>)</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="password" class="form-control" data-pwgen-field="true" data-hibp="true" name="password" placeholder="" autocomplete="new-password" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="password2">{{ lang.admin.password_repeat }}:</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="password" class="form-control" data-pwgen-field="true" name="password2" placeholder="" autocomplete="new-password" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="active" checked> {{ lang.admin.active }}</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="add_item" data-id="add_domain_admin" data-api-url='add/domain-admin' data-api-attr='{}' href="#"><i class="bi bi-plus-lg"></i> {{ lang.admin.add }}</button> | ||||
|             </div> | ||||
| @@ -108,13 +108,13 @@ | ||||
|       <div class="modal-body"> | ||||
|         <form class="form-horizontal" data-cached-form="false" data-id="fido2ChangeFn" role="form" method="post" autocomplete="off"> | ||||
|           <input type="hidden" class="form-control" name="fido2_cid" id="fido2_cid"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-4" for="fido2_fn">{{ lang.fido2.fn }}:</label> | ||||
|             <div class="col-sm-8"> | ||||
|               <input type="text" class="form-control" name="fido2_fn"> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-4 col-sm-8"> | ||||
|               <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-id="fido2ChangeFn" data-item="null" data-api-url='edit/fido2-fn' data-api-attr='{}' href="#">{{ lang.admin.save }}</button> | ||||
|             </div> | ||||
| @@ -134,13 +134,13 @@ | ||||
|       </div> | ||||
|       <div class="modal-body"> | ||||
|         <form class="form-horizontal" data-cached-form="true" data-id="add_oauth2_client" role="form" method="post"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="redirect_uri">{{ lang.admin.oauth2_redirect_uri }}:</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="redirect_uri" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="add_item" data-id="add_oauth2_client" data-api-url='add/oauth2-client' data-api-attr='{}' href="#"><i class="bi bi-plus-lg"></i> {{ lang.admin.add }}</button> | ||||
|             </div> | ||||
| @@ -160,33 +160,33 @@ | ||||
|       </div> | ||||
|       <div class="modal-body"> | ||||
|         <form class="form-horizontal" data-cached-form="true" data-id="add_admin" role="form" method="post" autocomplete="off"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="username">{{ lang.admin.username }}:</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="username" onkeyup="this.value = this.value.toLowerCase();" required> | ||||
|               ↳ <kbd>a-z - _ .</kbd> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="password">{{ lang.admin.password }} (<a href="#" class="generate_password">{{ lang.admin.generate }}</a>):</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="password" class="form-control" data-pwgen-field="true" data-hibp="true" name="password" placeholder="" autocomplete="new-password" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="password2">{{ lang.admin.password_repeat }}:</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="password" class="form-control" data-pwgen-field="true" name="password2" placeholder="" autocomplete="new-password" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="active" checked> {{ lang.admin.active }}</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="add_item" data-id="add_admin" data-api-url='add/admin' data-api-attr='{}' href="#"><i class="bi bi-plus-lg"></i> {{ lang.admin.add }}</button> | ||||
|             </div> | ||||
| @@ -208,20 +208,20 @@ | ||||
|         <form class="form-horizontal" data-cached-form="true" id="test_transport_form" role="form" method="post"> | ||||
|           <input type="hidden" class="form-control" name="transport_id" id="transport_id"> | ||||
|           <input type="hidden" class="form-control" name="transport_type" id="transport_type"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="mail_from">{{ lang.admin.relay_from }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="mail_from" placeholder="relay@example.org"> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="mail_rcpt">{{ lang.admin.relay_rcpt }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="mail_rcpt" placeholder="null@hosted.mailcow.de" value="null@hosted.mailcow.de"> | ||||
|               <p class="text-muted">{{ lang.admin.transport_test_rcpt_info|raw }}</p> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <button class="btn btn-xs-lg d-block d-sm-inline btn-secondary" id="test_transport" href="#">{{ lang.admin.relay_run }}</button> | ||||
|             </div> | ||||
|   | ||||
| @@ -8,22 +8,22 @@ | ||||
|       </div> | ||||
|       <div class="modal-body"> | ||||
|         <form role="form" method="post"> | ||||
|           <div class="form-group"> | ||||
|           <div> | ||||
|             <input type="text" class="form-control" name="key_id" placeholder="{{ lang.tfa.key_id }}" autocomplete="off" required> | ||||
|           </div> | ||||
|           <hr> | ||||
|           <p class="text-muted">{{ lang.tfa.api_register|format(ui_texts.main_name)|raw }}</p> | ||||
|           <div class="form-group"> | ||||
|           <div> | ||||
|             <input type="text" class="form-control" name="yubico_id" placeholder="Yubico API ID" autocomplete="off" required> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div> | ||||
|             <input type="text" class="form-control" name="yubico_key" placeholder="Yubico API Key" autocomplete="off" required> | ||||
|           </div> | ||||
|           <hr> | ||||
|           <div class="form-group"> | ||||
|           <div> | ||||
|             <input type="password" class="form-control" name="confirm_password" placeholder="{{ lang.user.password_now }}" autocomplete="off" required> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div> | ||||
|             <div class="input-group"> | ||||
|               <span class="input-group-text" id="yubi-addon"><img alt="Yubicon Icon" src="/img/yubi.ico"></span> | ||||
|               <input type="text" name="otp_token" class="form-control" placeholder="Touch Yubikey" aria-describedby="yubi-addon"> | ||||
| @@ -46,10 +46,10 @@ | ||||
|       </div> | ||||
|       <div class="modal-body"> | ||||
|         <form role="form" method="post" id="webauthn_reg_form"> | ||||
|           <div class="form-group"> | ||||
|           <div> | ||||
|             <input type="text" class="form-control" name="key_id" placeholder="{{ lang.tfa.key_id }}" autocomplete="off" required> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div> | ||||
|             <input type="password" class="form-control" name="confirm_password" placeholder="{{ lang.user.password_now }}" autocomplete="off" required> | ||||
|           </div> | ||||
|           <hr> | ||||
| @@ -82,10 +82,10 @@ | ||||
|       </div> | ||||
|       <div class="modal-body"> | ||||
|         <form role="form" method="post"> | ||||
|           <div class="form-group"> | ||||
|           <div> | ||||
|             <input type="text" class="form-control" name="key_id" placeholder="{{ lang.tfa.key_id_totp }}" autocomplete="off" required> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div> | ||||
|             <input type="password" class="form-control" name="confirm_password" placeholder="{{ lang.user.password_now }}" autocomplete="off" required> | ||||
|           </div> | ||||
|           <hr> | ||||
| @@ -144,7 +144,7 @@ | ||||
|       <div class="modal-body"> | ||||
|         {% if pending_tfa_method == 'yubi_otp' %} | ||||
|         <form role="form" method="post"> | ||||
|           <div class="form-group"> | ||||
|           <div> | ||||
|             <div class="input-group"> | ||||
|               <span class="input-group-text" id="yubi-addon"><img alt="Yubicon Icon" src="/img/yubi.ico"></span> | ||||
|               <input type="text" name="token" class="form-control" autocomplete="off" placeholder="Touch Yubikey" aria-describedby="yubi-addon"> | ||||
| @@ -156,7 +156,7 @@ | ||||
|         {% endif %} | ||||
|         {% if pending_tfa_method == 'totp' %} | ||||
|         <form role="form" method="post"> | ||||
|           <div class="form-group"> | ||||
|           <div> | ||||
|             <div class="input-group"> | ||||
|               <span class="input-group-text" id="tfa-addon"><i class="bi bi-shield-lock-fill"></i></span> | ||||
|               <input type="number" min="000000" max="999999" name="token" class="form-control" placeholder="123456" autocomplete="one-time-code" aria-describedby="tfa-addon"> | ||||
|   | ||||
| @@ -8,13 +8,13 @@ | ||||
|       </div> | ||||
|       <div class="modal-body"> | ||||
|         <form class="form-horizontal" data-cached-form="true" data-id="add_mailbox" role="form" autocomplete="off"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="local_part">{{ lang.add.mailbox_username }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" pattern="[A-Za-z0-9\.!#$%&'*+/=?^_`{|}~-]+" autocorrect="off" autocapitalize="none" class="form-control" name="local_part" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="domain">{{ lang.add.domain }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <select class="full-width-select" data-live-search="true" id="addSelectDomain" name="domain" required> | ||||
| @@ -24,13 +24,13 @@ | ||||
|               </select> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="name">{{ lang.add.full_name }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="name"> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="addInputQuota">{{ lang.add.quota_mb }} | ||||
|               <br /><span id="quotaBadge" class="badge">max. - MiB</span> | ||||
|             </label> | ||||
| @@ -40,19 +40,19 @@ | ||||
|               <div class="badge fs-5 bg-warning addInputQuotaExhausted" style="display:none;">{{ lang.warning.quota_exceeded_scope }}</div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="password">{{ lang.add.password }} (<a href="#" class="generate_password">{{ lang.add.generate }}</a>)</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="password" data-pwgen-field="true" data-hibp="true" class="form-control" name="password" placeholder="" autocomplete="new-password" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="password2">{{ lang.add.password_repeat }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="password" data-pwgen-field="true" class="form-control" name="password2" placeholder="" autocomplete="new-password" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <select name="active" class="form-control"> | ||||
|                 <option value="1" selected>{{ lang.add.active }}</option> | ||||
| @@ -62,7 +62,7 @@ | ||||
|             </div> | ||||
|           </div> | ||||
|           <hr> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="add_item" data-id="add_mailbox" data-api-url='add/mailbox' data-api-attr='{}' href="#">{{ lang.admin.add }}</button> | ||||
|             </div> | ||||
| @@ -82,50 +82,50 @@ | ||||
|       </div> | ||||
|       <div class="modal-body"> | ||||
|         <form class="form-horizontal" data-cached-form="true" data-id="add_domain" role="form"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="domain">{{ lang.add.domain }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" autocorrect="off" autocapitalize="none" class="form-control" name="domain" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="description">{{ lang.add.description }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="description"> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="aliases">{{ lang.add.max_aliases }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="number" class="form-control" name="aliases" value="400" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="mailboxes">{{ lang.add.max_mailboxes }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="number" class="form-control" name="mailboxes" value="10" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="defquota">{{ lang.add.mailbox_quota_def }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="number" class="form-control" name="defquota" value="3072" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="maxquota">{{ lang.add.mailbox_quota_m }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="number" class="form-control" name="maxquota" value="10240" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="quota">{{ lang.add.domain_quota_m }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="number" class="form-control" name="quota" value="10240" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           {% if not skip_sogo %} | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="gal" checked> {{ lang.edit.gal }}</label> | ||||
| @@ -134,7 +134,7 @@ | ||||
|             </div> | ||||
|           </div> | ||||
|           {% endif %} | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="active" checked> {{ lang.add.active }}</label> | ||||
| @@ -142,7 +142,7 @@ | ||||
|             </div> | ||||
|           </div> | ||||
|           <hr> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="rl_frame">{{ lang.acl.ratelimit }}</label> | ||||
|             <div class="col-sm-7"> | ||||
|               <input name="rl_value" type="number" class="form-control" placeholder="{{ lang.ratelimit.disabled }}"> | ||||
| @@ -154,13 +154,13 @@ | ||||
|             </div> | ||||
|           </div> | ||||
|           <hr> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="dkim_selector">{{ lang.admin.dkim_domains_selector }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input class="form-control" id="dkim_selector" name="dkim_selector" value="dkim"> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="key_size">{{ lang.admin.dkim_key_length }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <select data-style="btn btn-secondary btn-sm" class="form-control" id="key_size" name="key_size"> | ||||
| @@ -170,7 +170,7 @@ | ||||
|             </div> | ||||
|           </div> | ||||
|           <hr> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2">{{ lang.add.backup_mx_options }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
| @@ -185,7 +185,7 @@ | ||||
|             </div> | ||||
|           </div> | ||||
|           <hr> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10 btn-group"> | ||||
|               {% if not skip_sogo %} | ||||
|               <button class="btn btn-xs-lg btn-xs-half d-block d-sm-inline btn-secondary" data-action="add_item" data-id="add_domain" data-api-url='add/domain' data-api-attr='{}' href="#">{{ lang.add.add_domain_only }}</button> | ||||
| @@ -214,13 +214,13 @@ | ||||
|       </div> | ||||
|       <div class="modal-body"> | ||||
|         <form class="form-horizontal" data-cached-form="true" role="form" data-id="add_resource"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="description">{{ lang.add.description }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="description" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="domain">{{ lang.add.domain }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <select data-live-search="true" name="domain" title="{{ lang.add.select }}" required> | ||||
| @@ -230,7 +230,7 @@ | ||||
|               </select> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="domain">{{ lang.add.kind }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <select name="kind" title="{{ lang.add.select }}" required> | ||||
| @@ -240,7 +240,7 @@ | ||||
|               </select> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="multiple_bookings_select">{{ lang.add.multiple_bookings }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <select name="multiple_bookings_select" id="multiple_bookings_select" title="{{ lang.add.select }}" required> | ||||
| @@ -255,14 +255,14 @@ | ||||
|               <input type="hidden" name="multiple_bookings" id="multiple_bookings"> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="active" checked> {{ lang.add.active }}</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="add_item" data-id="add_resource" data-api-url='add/resource' data-api-attr='{}' href="#">{{ lang.admin.add }}</button> | ||||
|             </div> | ||||
| @@ -283,14 +283,14 @@ | ||||
|       <div class="modal-body"> | ||||
|         <form class="form-horizontal" data-cached-form="true" role="form" data-id="add_alias"> | ||||
|           <input type="hidden" value="0" name="active"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="address">{{ lang.add.alias_address }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <textarea autocorrect="off" autocapitalize="none" class="form-control" rows="5" name="address" id="address" required></textarea> | ||||
|               <p>{{ lang.add.alias_address_info|raw }}</p> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="goto">{{ lang.add.target_address }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <textarea id="textarea_alias_goto" autocorrect="off" autocapitalize="none" class="form-control" rows="5" id="goto" name="goto" required></textarea> | ||||
| @@ -313,14 +313,14 @@ | ||||
|               {% endif %} | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="active" checked> {{ lang.add.active }}</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="add_item" data-id="add_alias" data-api-url='add/alias' data-api-attr='{}' href="#">{{ lang.admin.add }}</button> | ||||
|             </div> | ||||
| @@ -341,14 +341,14 @@ | ||||
|       <div class="modal-body"> | ||||
|         <form class="form-horizontal" data-cached-form="true" role="form" data-id="add_alias_domain"> | ||||
|           <input type="hidden" value="0" name="active"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="alias_domain">{{ lang.add.alias_domain }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <textarea autocorrect="off" autocapitalize="none" class="form-control" rows="5" name="alias_domain" id="alias_domain" required></textarea> | ||||
|               <p>{{ lang.add.alias_domain_info|raw }}</p> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="target_domain">{{ lang.add.target_domain }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <select data-live-search="true" name="target_domain" title="{{ lang.add.select }}" required> | ||||
| @@ -358,7 +358,7 @@ | ||||
|               </select> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="active" checked> {{ lang.add.active }}</label> | ||||
| @@ -366,7 +366,7 @@ | ||||
|             </div> | ||||
|           </div> | ||||
|           <hr> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="rl_frame">{{ lang.acl.ratelimit }}</label> | ||||
|             <div class="col-sm-7"> | ||||
|               <input name="rl_value" type="number" class="form-control" placeholder="{{ lang.ratelimit.disabled }}"> | ||||
| @@ -378,13 +378,13 @@ | ||||
|             </div> | ||||
|           </div> | ||||
|           <hr> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="dkim_selector2">{{ lang.admin.dkim_domains_selector }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input class="form-control" id="dkim_selector2" name="dkim_selector" value="dkim"> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="key_size2">{{ lang.admin.dkim_key_length }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <select data-style="btn btn-secondary btn-sm" class="form-control" id="key_size2" name="key_size"> | ||||
| @@ -394,7 +394,7 @@ | ||||
|             </div> | ||||
|           </div> | ||||
|           <hr> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="add_item" data-id="add_alias_domain" data-api-url='add/alias-domain' data-api-attr='{}' href="#">{{ lang.admin.add }}</button> | ||||
|             </div> | ||||
| @@ -415,7 +415,7 @@ | ||||
|       <div class="modal-body"> | ||||
|         <p class="text-muted">{{ lang.add.syncjob_hint }}</p> | ||||
|         <form class="form-horizontal" data-cached-form="true" role="form" data-id="add_syncjob"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="username">{{ lang.add.username }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <select data-live-search="true" name="username" required> | ||||
| @@ -425,32 +425,32 @@ | ||||
|               </select> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="host1">{{ lang.add.hostname }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="host1" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="port1">{{ lang.add.port }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="number" class="form-control" name="port1" min="1" max="65535" value="143" required> | ||||
|               <small class="text-muted">1-65535</small> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="user1">{{ lang.add.username }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="user1" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="password1">{{ lang.add.password }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="password" class="form-control" name="password1" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="enc1">{{ lang.add.enc_method }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <select name="enc1" title="{{ lang.add.select }}" required> | ||||
| @@ -460,110 +460,110 @@ | ||||
|               </select> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="mins_interval">{{ lang.add.mins_interval }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="number" class="form-control" name="mins_interval" min="1" max="43800" value="20" required> | ||||
|               <small class="text-muted">1-43800</small> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="subfolder2">{{ lang.edit.subfolder2|raw }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="subfolder2" value=""> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="maxage">{{ lang.edit.maxage|raw }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="number" class="form-control" name="maxage" min="0" max="32000" value="0"> | ||||
|               <small class="text-muted">0-32000</small> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="maxbytespersecond">{{ lang.edit.maxbytespersecond|raw }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="number" class="form-control" name="maxbytespersecond" min="0" max="125000000" value="0"> | ||||
|               <small class="text-muted">0-125000000</small> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="timeout1">{{ lang.edit.timeout1 }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="number" class="form-control" name="timeout1" min="1" max="32000" value="600"> | ||||
|               <small class="text-muted">1-32000</small> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="timeout2">{{ lang.edit.timeout2 }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="number" class="form-control" name="timeout2" min="1" max="32000" value="600"> | ||||
|               <small class="text-muted">1-32000</small> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="exclude">{{ lang.add.exclude }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="exclude" value="(?i)spam|(?i)junk"> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="custom_params">{{ lang.add.custom_params }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="custom_params" placeholder="--dry --some-param=xy --other-param=yx"> | ||||
|               <small class="text-muted">{{ lang.add.custom_params_hint }}</small> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="delete2duplicates" checked> {{ lang.add.delete2duplicates }} (--delete2duplicates)</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="delete1"> {{ lang.add.delete1 }} (--delete1)</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="delete2"> {{ lang.add.delete2 }} (--delete2)</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="automap" checked> {{ lang.add.automap }} (--automap)</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="skipcrossduplicates"> {{ lang.add.skipcrossduplicates }} (--skipcrossduplicates)</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="subscribeall" checked> {{ lang.add.subscribeall }} (--subscribeall)</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="active" checked> {{ lang.add.active }}</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="add_item" data-id="add_syncjob" data-api-url='add/syncjob' data-api-attr='{}' href="#">{{ lang.admin.add }}</button> | ||||
|             </div> | ||||
| @@ -583,7 +583,7 @@ | ||||
|       </div> | ||||
|       <div class="modal-body"> | ||||
|         <form class="form-horizontal" data-cached-form="true" role="form" data-id="add_filter"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="username">{{ lang.add.username }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <select data-live-search="true" name="username" required> | ||||
| @@ -593,7 +593,7 @@ | ||||
|               </select> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="filter_type">{{ lang.add.sieve_type }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <select id="addFilterType" name="filter_type" required> | ||||
| @@ -602,19 +602,19 @@ | ||||
|               </select> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="script_desc">{{ lang.add.sieve_desc }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" id="script_desc" name="script_desc" required maxlength="255"> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="script_data">Script:</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <textarea autocorrect="off" spellcheck="false" autocapitalize="none" class="form-control textarea-code script_data" rows="20" name="script_data" required></textarea> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <p class="text-muted">{{ lang.add.activate_filter_warn }}</p> | ||||
|               <div class="checkbox"> | ||||
| @@ -622,7 +622,7 @@ | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10 add_filter_btns btn-group"> | ||||
|               <button class="btn btn-xs-lg btn-xs-half d-block d-sm-inline btn-secondary validate_sieve" href="#">{{ lang.add.validate }}</button> | ||||
|               <button class="btn btn-xs-lg btn-xs-half d-block d-sm-inline btn-success add_sieve_script" data-action="add_item" data-id="add_filter" data-api-url='add/filter' data-api-attr='{}' href="#" disabled>{{ lang.admin.add }}</button> | ||||
| @@ -645,7 +645,7 @@ | ||||
|       </div> | ||||
|       <div class="modal-body"> | ||||
|         <form class="form-horizontal" data-cached-form="true" role="form" data-id="add_bcc"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="local_dest">{{ lang.mailbox.bcc_local_dest }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <select id="bcc-local-dest" data-live-search="true" data-size="20" name="local_dest" required> | ||||
| @@ -653,7 +653,7 @@ | ||||
|               </select> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="type">{{ lang.mailbox.bcc_map_type }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <select name="type" required> | ||||
| @@ -662,21 +662,21 @@ | ||||
|               </select> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="bcc_dest">{{ lang.mailbox.bcc_destination }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="bcc_dest"> | ||||
|               <small>{{ lang.add.bcc_dest_format|raw }}</small> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="active" checked> {{ lang.add.active }}</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="add_item" data-id="add_bcc" data-api-url='add/bcc' data-api-attr='{}' href="#">{{ lang.admin.add }}</button> | ||||
|             </div> | ||||
| @@ -696,28 +696,28 @@ | ||||
|       </div> | ||||
|       <div class="modal-body"> | ||||
|         <form class="form-horizontal" data-cached-form="true" role="form" data-id="add_recipient_map"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="recipient_map_old">{{ lang.mailbox.recipient_map_old }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="recipient_map_old"> | ||||
|               <small>{{ lang.mailbox.recipient_map_old_info }}</small> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="recipient_map_new">{{ lang.mailbox.recipient_map_new }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="recipient_map_new"> | ||||
|               <small>{{ lang.mailbox.recipient_map_new_info }}</small> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="active" checked> {{ lang.add.active }}</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="add_item" data-id="add_recipient_map" data-api-url='add/recipient_map' data-api-attr='{}' href="#">{{ lang.admin.add }}</button> | ||||
|             </div> | ||||
| @@ -737,14 +737,14 @@ | ||||
|       </div> | ||||
|       <div class="modal-body"> | ||||
|         <form class="form-horizontal" data-cached-form="true" role="form" data-id="add_tls_policy_map"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="dest">{{ lang.mailbox.tls_map_dest }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="dest"> | ||||
|               <small>{{ lang.mailbox.tls_map_dest_info }}</small> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="policy">{{ lang.mailbox.tls_map_policy }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <select class="full-width-select" name="policy" required> | ||||
| @@ -759,21 +759,21 @@ | ||||
|               </select> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="parameters">{{ lang.mailbox.tls_map_parameters }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="parameters"> | ||||
|               <small>{{ lang.mailbox.tls_map_parameters_info }}</small> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="active" checked> {{ lang.add.active }}</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="add_item" data-id="add_tls_policy_map" data-api-url='add/tls-policy-map' data-api-attr='{}' href="#">{{ lang.admin.add }}</button> | ||||
|             </div> | ||||
|   | ||||
| @@ -7,42 +7,42 @@ | ||||
|       </div> | ||||
|       <div class="modal-body"> | ||||
|         <div id="qid_error" style="display:none" class="alert alert-danger"></div> | ||||
|         <div class="form-group"> | ||||
|         <div> | ||||
|           <label for="qid_detail_symbols"><h4>{{ lang.quarantine.rspamd_result }}:</h4></label> | ||||
|           <p>{{ lang.quarantine.spam_score }}: <span id="qid_detail_score"></span></p> | ||||
|           <hr> | ||||
|           <p id="qid_detail_symbols"></p> | ||||
|         </div> | ||||
|         <div class="form-group"> | ||||
|         <div> | ||||
|           <label for="qid_detail_subj"><h4>{{ lang.quarantine.subj }}:</h4></label> | ||||
|           <p id="qid_detail_subj"></p> | ||||
|         </div> | ||||
|         <div class="form-group"> | ||||
|         <div> | ||||
|           <label for="qid_detail_recipients"><h4>{{ lang.quarantine.recipients }}:</h4></label> | ||||
|           <p id="qid_detail_recipients"></p> | ||||
|         </div> | ||||
|         <div class="form-group"> | ||||
|         <div> | ||||
|           <label for="qid_detail_hfrom"><h4>{{ lang.quarantine.sender_header }}:</h4></label> | ||||
|           <p><span class="mail-address-item" id="qid_detail_hfrom"></span></p> | ||||
|         </div> | ||||
|         <div class="form-group"> | ||||
|         <div> | ||||
|           <label for="qid_detail_efrom"><h4>{{ lang.quarantine.sender }}:</h4></label> | ||||
|           <p><span class="mail-address-item" id="qid_detail_efrom"></span></p> | ||||
|         </div> | ||||
|         <div class="form-group"> | ||||
|         <div> | ||||
|           <label for="qid_detail_fuzzy"><h4>Fuzzy Hashes:</h4></label> | ||||
|           <p id="qid_detail_fuzzy"></p> | ||||
|         </div> | ||||
|         <div class="form-group" id="qTextPlain"> | ||||
|         <div id="qTextPlain"> | ||||
|           <label for="qid_detail_text"><h4>{{ lang.quarantine.text_plain_content }}:</h4></label> | ||||
|           <pre id="qid_detail_text"></pre> | ||||
|         </div> | ||||
|         <div class="form-group" id="qTextHtml"> | ||||
|         <div id="qTextHtml"> | ||||
|           <label for="qid_detail_text_from_html"><h4>{{ lang.quarantine.text_from_html_content }}:</h4></label> | ||||
|           <pre id="qid_detail_text_from_html"></pre> | ||||
|         </div> | ||||
|         {% if acl.quarantine_attachments == 1 %} | ||||
|         <div class="form-group"> | ||||
|         <div> | ||||
|           <label for="qid_detail_atts"><h4>{{ lang.quarantine.atts }}:</h4></label> | ||||
|           <div id="qid_detail_atts">-</div> | ||||
|         </div> | ||||
|   | ||||
| @@ -10,13 +10,13 @@ | ||||
|       <div class="modal-body"> | ||||
|         <form class="form-horizontal" data-cached-form="false" data-id="fido2ChangeFn" role="form" method="post" autocomplete="off"> | ||||
|           <input type="hidden" class="form-control" name="fido2_cid" id="fido2_cid"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-4" for="fido2_fn">{{ lang.fido2.fn }}:</label> | ||||
|             <div class="col-sm-8"> | ||||
|               <input type="text" class="form-control" name="fido2_fn"> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-4 col-sm-8"> | ||||
|               <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-id="fido2ChangeFn" data-item="null" data-api-url='edit/fido2-fn' data-api-attr='{}' href="#">{{ lang.admin.save }}</button> | ||||
|             </div> | ||||
| @@ -37,32 +37,32 @@ | ||||
|       <div class="modal-body"> | ||||
|         <p>{{ lang.add.syncjob_hint }}</p> | ||||
|         <form class="form-horizontal" data-cached-form="true" role="form" data-id="add_syncjob"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="host1">{{ lang.add.hostname }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="host1" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="port1">{{ lang.add.port }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="number" class="form-control" name="port1" min="1" max="65535" value="143" required> | ||||
|               <small class="text-muted">1-65535</small> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="user1">{{ lang.add.username }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="user1" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="password1">{{ lang.add.password }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="password" class="form-control" name="password1" data-hibp="true" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="enc1">{{ lang.add.enc_method }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <select name="enc1" title="{{ lang.add.select }}" required> | ||||
| @@ -72,109 +72,109 @@ | ||||
|               </select> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="mins_interval">{{ lang.add.mins_interval }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="number" class="form-control" name="mins_interval" min="1" max="43800" value="20" required> | ||||
|               <small class="text-muted">1-43800</small> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="subfolder2">{{ lang.edit.subfolder2|raw }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="subfolder2" value=""> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="maxage">{{ lang.edit.maxage|raw }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="number" class="form-control" name="maxage" min="0" max="32000" value="0"> | ||||
|               <small class="text-muted">0-32000</small> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="maxbytespersecond">{{ lang.edit.maxbytespersecond|raw }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="number" class="form-control" name="maxbytespersecond" min="0" max="125000000" value="0"> | ||||
|               <small class="text-muted">0-125000000</small> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="timeout1">{{ lang.edit.timeout1 }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="number" class="form-control" name="timeout1" min="1" max="32000" value="600"> | ||||
|               <small class="text-muted">1-32000</small> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="timeout2">{{ lang.edit.timeout2 }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="number" class="form-control" name="timeout2" min="1" max="32000" value="600"> | ||||
|               <small class="text-muted">1-32000</small> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="exclude">{{ lang.add.exclude }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="exclude" value="(?i)spam|(?i)junk"> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="custom_params">{{ lang.add.custom_params }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="custom_params" placeholder="--delete2folders --otheroption"> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="delete2duplicates" checked> {{ lang.add.delete2duplicates }} (--delete2duplicates)</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="delete1"> {{ lang.add.delete1 }} (--delete1)</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="delete2"> {{ lang.add.delete2 }} (--delete2)</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="automap" checked> {{ lang.add.automap }} (--automap)</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="skipcrossduplicates"> {{ lang.add.skipcrossduplicates }} (--skipcrossduplicates)</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="subscribeall" checked> {{ lang.add.subscribeall }} (--subscribeall)</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="active" checked> {{ lang.add.active }}</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="add_item" data-id="add_syncjob" data-api-url='add/syncjob' data-api-attr='{}' href="#">{{ lang.admin.add }}</button> | ||||
|             </div> | ||||
| @@ -194,26 +194,26 @@ | ||||
|       </div> | ||||
|       <div class="modal-body"> | ||||
|         <form class="form-horizontal" data-cached-form="true" role="form" data-pwgen-length="32" data-id="add_apppasswd"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="app_name">{{ lang.add.app_name }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="text" class="form-control" name="app_name" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="app_passwd">{{ lang.user.password }} (<a href="#" class="generate_password">{{ lang.user.generate }}</a>)</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="password" data-pwgen-field="true" data-hibp="true" class="form-control" name="app_passwd" autocomplete="new-password" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="app_passwd2">{{ lang.user.password_repeat }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <input type="password" data-pwgen-field="true" class="form-control" name="app_passwd2" autocomplete="new-password" required> | ||||
|               <p class="text-muted">{{ lang.user.new_password_description }}</p> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-2" for="protocols">{{ lang.add.app_passwd_protocols }}</label> | ||||
|             <div class="col-sm-10"> | ||||
|               <select class="full-width-select" data-live-search="true" id="protocols" name="protocols" multiple> | ||||
| @@ -226,14 +226,14 @@ | ||||
|               </select> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="active" checked> {{ lang.add.active }}</label> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-2 col-sm-10"> | ||||
|               <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="add_item" data-id="add_apppasswd" data-api-url='add/app-passwd' data-api-attr='{}' href="#">{{ lang.admin.add }}</button> | ||||
|             </div> | ||||
| @@ -270,13 +270,13 @@ | ||||
|       </div> | ||||
|       <div class="modal-body"> | ||||
|         <form class="form-horizontal" data-cached-form="false" data-id="pwchange" role="form" method="post" autocomplete="off"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-3" for="user_new_pass">{{ lang.user.new_password }} (<a href="#" class="generate_password">{{ lang.user.generate }}</a>)</label> | ||||
|             <div class="col-sm-5"> | ||||
|               <input type="password" data-pwgen-field="true" data-hibp="true" class="form-control" name="user_new_pass" autocomplete="new-password" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-3" for="user_new_pass2">{{ lang.user.new_password_repeat }}</label> | ||||
|             <div class="col-sm-5"> | ||||
|               <input type="password" data-pwgen-field="true" class="form-control" name="user_new_pass2" autocomplete="new-password" required> | ||||
| @@ -284,13 +284,13 @@ | ||||
|             </div> | ||||
|           </div> | ||||
|           <hr> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-3" for="user_old_pass">{{ lang.user.password_now }}</label> | ||||
|             <div class="col-sm-5"> | ||||
|               <input type="password" class="form-control" name="user_old_pass" autocomplete="off" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-3 col-sm-9"> | ||||
|               <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-id="pwchange" data-item="null" data-api-url='edit/self' data-api-attr='{}' href="#">{{ lang.user.change_password }}</button> | ||||
|             </div> | ||||
| @@ -306,13 +306,13 @@ | ||||
|     <div class="modal-content"> | ||||
|       <div class="modal-body"> | ||||
|         <form class="form-horizontal" data-cached-form="false" data-id="pwchange" role="form" method="post" autocomplete="off"> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-3" for="user_new_pass">{{ lang.user.new_password }} (<a href="#" class="generate_password">{{ lang.user.generate }}</a>)</label> | ||||
|             <div class="col-sm-5"> | ||||
|               <input type="password" data-pwgen-field="true" data-hibp="true" class="form-control" name="user_new_pass" autocomplete="new-password" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-3" for="user_new_pass2">{{ lang.user.new_password_repeat }}</label> | ||||
|             <div class="col-sm-5"> | ||||
|               <input type="password" data-pwgen-field="true" class="form-control" name="user_new_pass2" autocomplete="new-password" required> | ||||
| @@ -320,13 +320,13 @@ | ||||
|             </div> | ||||
|           </div> | ||||
|           <hr> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <label class="control-label col-sm-3" for="user_old_pass">{{ lang.user.password_now }}</label> | ||||
|             <div class="col-sm-5"> | ||||
|               <input type="password" class="form-control" name="user_old_pass" autocomplete="off" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="offset-sm-3 col-sm-9"> | ||||
|               <button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-id="pwchange" data-item="null" data-api-url='edit/self' data-api-attr='{}' href="#">{{ lang.user.change_password }}</button> | ||||
|             </div> | ||||
|   | ||||
| @@ -11,7 +11,7 @@ | ||||
|       <dd>{{ lang.oauth2.profile_desc }}</dd> | ||||
|     </dl> | ||||
|     <form class="form-horizontal" autocapitalize="none" autocorrect="off" role="form" method="post"> | ||||
|       <div class="form-group"> | ||||
|       <div class="row"> | ||||
|         <div class="col-sm-10 text-center"> | ||||
|           <button class="btn btn-success" name="authorized" type="submit" value="1">{{ lang.oauth2.permit }}</button> | ||||
|           <a href="#" class="btn btn-secondary" onclick="window.history.back()" role="button">{{ lang.oauth2.deny }}</a> | ||||
|   | ||||
| @@ -32,34 +32,34 @@ | ||||
|         <legend id="qtitle" data-hash="{{ hash }}">{{ lang.quarantine.remove }}</legend><hr /> | ||||
|         {% endif %} | ||||
|         <div id="qid_error" style="display:none" class="alert alert-danger"></div> | ||||
|         <div class="form-group"> | ||||
|         <div> | ||||
|           <label for="qid_detail_symbols"><h4>{{ lang.quarantine.rspamd_result }}:</h4></label> | ||||
|           <p>{{ lang.quarantine.spam_score }}: <span id="qid_detail_score"></span></p> | ||||
|           <p id="qid_detail_symbols"></p> | ||||
|         </div> | ||||
|         <div class="form-group"> | ||||
|         <div> | ||||
|           <label for="qid_detail_subj"><h4>{{ lang.quarantine.subj }}:</h4></label> | ||||
|           <p id="qid_detail_subj"></p> | ||||
|         </div> | ||||
|         <div class="form-group"> | ||||
|         <div> | ||||
|           <label for="qid_detail_hfrom"><h4>{{ lang.quarantine.sender_header }}:</h4></label> | ||||
|           <p><span class="mail-address-item" id="qid_detail_hfrom"></span></p> | ||||
|         </div> | ||||
|         <div class="form-group"> | ||||
|         <div> | ||||
|           <label for="qid_detail_efrom"><h4>{{ lang.quarantine.sender }}:</h4></label> | ||||
|           <p><span class="mail-address-item" id="qid_detail_efrom"></span></p> | ||||
|         </div> | ||||
|         <div class="form-group"> | ||||
|         <div> | ||||
|           <label for="qid_detail_recipients"><h4>{{ lang.quarantine.recipients }}:</h4></label> | ||||
|           <p id="qid_detail_recipients"></p> | ||||
|         </div> | ||||
|         <div class="form-group"> | ||||
|         <div> | ||||
|           <label for="qid_detail_fuzzy"><h4>Fuzzy Hashes:</h4></label> | ||||
|           <p id="qid_detail_fuzzy"></p> | ||||
|         </div> | ||||
|         <div id="qactions"> | ||||
|           <form method="post" autofill="off"> | ||||
|             <div class="form-group"> | ||||
|             <div> | ||||
|               {% if action == 'release' %} | ||||
|               <button type="submit" class="btn btn-success" name="quick_release" value="{{ hash }}">{{ lang.quarantine.confirm }}</button> | ||||
|               {% endif %} | ||||
|   | ||||
| @@ -10,60 +10,58 @@ | ||||
|       <div class="col-sm-10"> | ||||
|         <p class="text-muted">{{ lang.user.pushover_info|format(mailcow_cc_username)|raw }}</p> | ||||
|         <p class="text-muted">{{ lang.user.pushover_vars|raw }}: <code>{SUBJECT}</code>, <code>{SENDER}</code></p> | ||||
|         <div class="form-group"> | ||||
|           <div class="row"> | ||||
|             <div class="col-sm-6"> | ||||
|         <div class="row"> | ||||
|           <div class="col-sm-6"> | ||||
|             <div class="form-group"> | ||||
|               <label for="token">API Token/Key (Application)</label> | ||||
|               <input type="text" class="form-control" name="token" maxlength="30" value="{{ pushover_data.token }}" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="col-sm-6"> | ||||
|             <div class="form-group"> | ||||
|               <label for="key">User/Group Key</label> | ||||
|               <input type="text" class="form-control" name="key" maxlength="30" value="{{ pushover_data.key }}" required> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="col-sm-6"> | ||||
|             <div class="form-group"> | ||||
|               <label for="title">{{ lang.user.pushover_title }}</label> | ||||
|               <input type="text" class="form-control" name="title" value="{{ pushover_data.title }}" placeholder="Mail"> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="col-sm-6"> | ||||
|             <div class="form-group"> | ||||
|               <label for="text">{{ lang.user.pushover_text }}</label> | ||||
|               <input type="text" class="form-control" name="text" value="{{ pushover_data.text }}" placeholder="You've got mail 📧"> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="col-sm-12"> | ||||
|             <div class="form-group"> | ||||
|               <label for="text">{{ lang.user.pushover_sender_array|raw }}</label> | ||||
|               <input type="text" class="form-control" name="senders" value="{{ pushover_data.senders }}" placeholder="sender1@example.com, sender2@example.com"> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="col-sm-12"> | ||||
|             <div class="checkbox"> | ||||
|               <label><input type="checkbox" value="1" name="active"{% if pushover_data.active == '1' %} checked{% endif %}> {{ lang.user.active }}</label> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="col-sm-12"> | ||||
|             <legend style="cursor:pointer;margin-top:10px" data-bs-target="#po_advanced" unselectable="on" data-bs-toggle="collapse"> | ||||
|               <i style="font-size:10pt;" class="bi bi-plus-square"></i> {{ lang.user.advanced_settings }} | ||||
|             </legend> | ||||
|             <hr /> | ||||
|           </div> | ||||
|           <div class="col-sm-12"> | ||||
|             <div id="po_advanced" class="collapse"> | ||||
|               <div class="form-group"> | ||||
|                 <label for="token">API Token/Key (Application)</label> | ||||
|                 <input type="text" class="form-control" name="token" maxlength="30" value="{{ pushover_data.token }}" required> | ||||
|               </div> | ||||
|             </div> | ||||
|             <div class="col-sm-6"> | ||||
|               <div class="form-group"> | ||||
|                 <label for="key">User/Group Key</label> | ||||
|                 <input type="text" class="form-control" name="key" maxlength="30" value="{{ pushover_data.key }}" required> | ||||
|               </div> | ||||
|             </div> | ||||
|             <div class="col-sm-6"> | ||||
|               <div class="form-group"> | ||||
|                 <label for="title">{{ lang.user.pushover_title }}</label> | ||||
|                 <input type="text" class="form-control" name="title" value="{{ pushover_data.title }}" placeholder="Mail"> | ||||
|               </div> | ||||
|             </div> | ||||
|             <div class="col-sm-6"> | ||||
|               <div class="form-group"> | ||||
|                 <label for="text">{{ lang.user.pushover_text }}</label> | ||||
|                 <input type="text" class="form-control" name="text" value="{{ pushover_data.text }}" placeholder="You've got mail 📧"> | ||||
|               </div> | ||||
|             </div> | ||||
|             <div class="col-sm-12"> | ||||
|               <div class="form-group"> | ||||
|                 <label for="text">{{ lang.user.pushover_sender_array|raw }}</label> | ||||
|                 <input type="text" class="form-control" name="senders" value="{{ pushover_data.senders }}" placeholder="sender1@example.com, sender2@example.com"> | ||||
|               </div> | ||||
|             </div> | ||||
|             <div class="col-sm-12"> | ||||
|               <div class="checkbox"> | ||||
|                 <label><input type="checkbox" value="1" name="active"{% if pushover_data.active == '1' %} checked{% endif %}> {{ lang.user.active }}</label> | ||||
|               </div> | ||||
|             </div> | ||||
|             <div class="col-sm-12"> | ||||
|               <legend style="cursor:pointer;margin-top:10px" data-bs-target="#po_advanced" unselectable="on" data-bs-toggle="collapse"> | ||||
|                 <i style="font-size:10pt;" class="bi bi-plus-square"></i> {{ lang.user.advanced_settings }} | ||||
|               </legend> | ||||
|               <hr /> | ||||
|             </div> | ||||
|             <div class="col-sm-12"> | ||||
|               <div id="po_advanced" class="collapse"> | ||||
|                 <div class="form-group"> | ||||
|                   <label for="text">{{ lang.user.pushover_sender_regex }}</label> | ||||
|                   <input type="text" class="form-control" name="senders_regex" value="{{ pushover_data.senders_regex }}" placeholder="/(.*@example\.org$|^foo@example\.com$)/i" regex="true"> | ||||
|                   <div class="checkbox"> | ||||
|                     <label><input type="checkbox" value="1" name="evaluate_x_prio"{% if pushover_data.attributes.evaluate_x_prio == '1' %} checked{% endif %}> {{ lang.user.pushover_evaluate_x_prio|raw }}</label> | ||||
|                   </div> | ||||
|                   <div class="checkbox"> | ||||
|                     <label><input type="checkbox" value="1" name="only_x_prio"{% if pushover_data.attributes.only_x_prio == '1' %} checked{% endif %}> {{ lang.user.pushover_only_x_prio|raw }}</label> | ||||
|                   </div> | ||||
|                 <label for="text">{{ lang.user.pushover_sender_regex }}</label> | ||||
|                 <input type="text" class="form-control" name="senders_regex" value="{{ pushover_data.senders_regex }}" placeholder="/(.*@example\.org$|^foo@example\.com$)/i" regex="true"> | ||||
|                 <div class="checkbox"> | ||||
|                   <label><input type="checkbox" value="1" name="evaluate_x_prio"{% if pushover_data.attributes.evaluate_x_prio == '1' %} checked{% endif %}> {{ lang.user.pushover_evaluate_x_prio|raw }}</label> | ||||
|                 </div> | ||||
|                 <div class="checkbox"> | ||||
|                   <label><input type="checkbox" value="1" name="only_x_prio"{% if pushover_data.attributes.only_x_prio == '1' %} checked{% endif %}> {{ lang.user.pushover_only_x_prio|raw }}</label> | ||||
|                 </div> | ||||
|               </div> | ||||
|             </div> | ||||
|   | ||||
| @@ -3,7 +3,7 @@ | ||||
|   <div class="row"> | ||||
|     <div class="col-sm-12"> | ||||
|       <form class="form-horizontal" role="form" data-id="spam_score" method="post"> | ||||
|         <div class="form-group"> | ||||
|         <div class="row"> | ||||
|           <div class="col-lg-8 col-sm-12"> | ||||
|             <div id="spam_score" data-provide="slider" data-acl="{{ acl.spam_score }}"></div> | ||||
|             <input id="spam_score_value" name="spam_score" type="hidden" value="{{ user_spam_score }}"> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user