diff --git a/data/Dockerfiles/dockerapi/Dockerfile b/data/Dockerfiles/dockerapi/Dockerfile index f021b73e..97c3808c 100644 --- a/data/Dockerfiles/dockerapi/Dockerfile +++ b/data/Dockerfiles/dockerapi/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.16 +FROM alpine:3.17 LABEL maintainer "Andre Peters " diff --git a/data/web/inc/functions.mailbox.inc.php b/data/web/inc/functions.mailbox.inc.php index 55c8d6bc..d67fa3e3 100644 --- a/data/web/inc/functions.mailbox.inc.php +++ b/data/web/inc/functions.mailbox.inc.php @@ -1420,11 +1420,11 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { // check attributes $attr = array(); $attr['tags'] = (isset($_data['tags'])) ? $_data['tags'] : array(); - $attr['max_num_aliases_for_domain'] = (isset($_data['max_num_aliases_for_domain'])) ? intval($_data['max_num_aliases_for_domain']) : 0; - $attr['max_num_mboxes_for_domain'] = (isset($_data['max_num_mboxes_for_domain'])) ? intval($_data['max_num_mboxes_for_domain']) : 0; - $attr['def_quota_for_mbox'] = (isset($_data['def_quota_for_mbox'])) ? intval($_data['def_quota_for_mbox']) * 1048576 : 0; - $attr['max_quota_for_mbox'] = (isset($_data['max_quota_for_mbox'])) ? intval($_data['max_quota_for_mbox']) * 1048576 : 0; - $attr['max_quota_for_domain'] = (isset($_data['max_quota_for_domain'])) ? intval($_data['max_quota_for_domain']) * 1048576 : 0; + $attr['max_num_aliases_for_domain'] = (!empty($_data['max_num_aliases_for_domain'])) ? intval($_data['max_num_aliases_for_domain']) : 400; + $attr['max_num_mboxes_for_domain'] = (!empty($_data['max_num_mboxes_for_domain'])) ? intval($_data['max_num_mboxes_for_domain']) : 10; + $attr['def_quota_for_mbox'] = (!empty($_data['def_quota_for_mbox'])) ? intval($_data['def_quota_for_mbox']) * 1048576 : 3072 * 1048576; + $attr['max_quota_for_mbox'] = (!empty($_data['max_quota_for_mbox'])) ? intval($_data['max_quota_for_mbox']) * 1048576 : 10240 * 1048576; + $attr['max_quota_for_domain'] = (!empty($_data['max_quota_for_domain'])) ? intval($_data['max_quota_for_domain']) * 1048576 : 10240 * 1048576; $attr['rl_frame'] = (!empty($_data['rl_frame'])) ? $_data['rl_frame'] : "s"; $attr['rl_value'] = (!empty($_data['rl_value'])) ? $_data['rl_value'] : ""; $attr['active'] = isset($_data['active']) ? intval($_data['active']) : 1; @@ -1435,7 +1435,6 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { $attr['dkim_selector'] = (isset($_data['dkim_selector'])) ? $_data['dkim_selector'] : "dkim"; $attr['key_size'] = isset($_data['key_size']) ? intval($_data['key_size']) : 2048; - // save template $stmt = $pdo->prepare("INSERT INTO `templates` (`type`, `template`, `attributes`) VALUES (:type, :template, :attributes)"); @@ -4756,15 +4755,15 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { ":id" => $id, ":type" => "domain", ":template" => "Default" - )); - } + )); - $_SESSION['return'][] = array( - 'type' => 'success', - 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), - 'msg' => 'template_removed' - ); - return true; + $_SESSION['return'][] = array( + 'type' => 'success', + 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), + 'msg' => array('template_removed', htmlspecialchars($id)) + ); + return true; + } break; case 'alias': if (!is_array($_data['id'])) { diff --git a/data/web/js/build/014-mailcow.js b/data/web/js/build/014-mailcow.js index 13bc2911..66da6076 100644 --- a/data/web/js/build/014-mailcow.js +++ b/data/web/js/build/014-mailcow.js @@ -1,7 +1,7 @@ $(document).ready(function() { // mailcow alert box generator window.mailcow_alert_box = function(message, type) { - msg = $('').text(message).text(); + msg = $('').text(escapeHtml(message)).text(); if (type == 'danger' || type == 'info') { auto_hide = 0; $('#' + localStorage.getItem("add_modal")).modal('show'); diff --git a/data/web/js/site/mailbox.js b/data/web/js/site/mailbox.js index 8c98e922..12c4bb4d 100644 --- a/data/web/js/site/mailbox.js +++ b/data/web/js/site/mailbox.js @@ -441,6 +441,8 @@ jQuery(function($){ url: "/api/v1/get/domain/all", dataSrc: function(json){ $.each(json, function(i, item) { + item.domain_name = escapeHtml(item.domain_name); + item.aliases = item.aliases_in_domain + " / " + item.max_num_aliases_for_domain; item.mailboxes = item.mboxes_in_domain + " / " + item.max_num_mboxes_for_domain; item.quota = item.quota_used_in_domain + "/" + item.max_quota_for_domain + "/" + item.bytes_total; @@ -625,7 +627,6 @@ jQuery(function($){ type: "GET", url: "/api/v1/get/domain/template/all", dataSrc: function(json){ - console.log(json); $.each(json, function (i, item) { item.chkbox = ''; @@ -645,10 +646,18 @@ jQuery(function($){ } item.attributes.rl_value = escapeHtml(item.attributes.rl_value); - item.action = '
' + + + if (item.template.toLowerCase() == "default"){ + item.action = '
' + + ' ' + lang.edit + '' + + '
'; + } + else{ + item.action = ''; + } if (Array.isArray(item.attributes.tags)){ var tags = ''; @@ -688,7 +697,7 @@ jQuery(function($){ defaultContent: '' }, { - title: "Template", + title: lang.template, data: 'template', responsivePriority: 3, defaultContent: '' @@ -1115,11 +1124,17 @@ jQuery(function($){ } - - item.action = ''; + if (item.template.toLowerCase() == "default"){ + item.action = '
' + + ' ' + lang.edit + '' + + '
'; + } + else { + item.action = ''; + } if (Array.isArray(item.attributes.tags)){ var tags = ''; @@ -1159,7 +1174,7 @@ jQuery(function($){ defaultContent: '' }, { - title: "Template", + title: lang.template, data: 'template', responsivePriority: 3, defaultContent: '' @@ -1582,7 +1597,6 @@ jQuery(function($){ type: "GET", url: "/api/v1/get/tls-policy-map/all", dataSrc: function(json){ - console.log(json); if (role !== "admin") return null; $.each(json, function (i, item) { @@ -1817,6 +1831,8 @@ jQuery(function($){ url: "/api/v1/get/alias-domain/all", dataSrc: function(json){ $.each(json, function (i, item) { + item.alias_domain = escapeHtml(item.alias_domain); + item.action = '
' + ' ' + lang.edit + '' + ' ' + lang.remove + '' + @@ -1904,7 +1920,7 @@ jQuery(function($){ } else { item.exclude = '' + escapeHtml(item.exclude) + ''; } - item.server_w_port = escapeHtml(item.user1) + '@' + item.host1 + ':' + item.port1; + item.server_w_port = escapeHtml(item.user1) + '@' + escapeHtml(item.host1) + ':' + escapeHtml(item.port1); item.action = '
' + ' ' + lang.edit + '' + ' ' + lang.remove + '' + @@ -2042,6 +2058,7 @@ jQuery(function($){ } else { item.active = '' + lang.inactive + ''; } + item.script_desc = escapeHtml(item.script_desc); item.script_data = '
' + escapeHtml(item.script_data) + '
' item.filter_type = '
' + item.filter_type.charAt(0).toUpperCase() + item.filter_type.slice(1).toLowerCase() + '
' item.action = '
' + diff --git a/data/web/lang/lang.de-de.json b/data/web/lang/lang.de-de.json index 42cd9c6d..b6229491 100644 --- a/data/web/lang/lang.de-de.json +++ b/data/web/lang/lang.de-de.json @@ -228,6 +228,7 @@ "oauth2_renew_secret": "Neues Client Secret generieren", "oauth2_revoke_tokens": "Alle Client Tokens entfernen", "optional": "Optional", + "options": "Einstellungen", "password": "Passwort", "password_length": "Passwortlänge", "password_policy": "Passwortrichtlinie", @@ -714,6 +715,7 @@ "add_filter": "Filter erstellen", "add_mailbox": "Mailbox hinzufügen", "add_recipient_map_entry": "Empfängerumschreibung hinzufügen", + "add_template": "Vorlage hinzufügen", "add_resource": "Ressource hinzufügen", "add_tls_policy_map": "TLS-Richtlinieneintrag hinzufügen", "address_rewriting": "Adressumschreibung", @@ -755,6 +757,7 @@ "domain": "Domain", "domain_admins": "Domain-Administratoren", "domain_aliases": "Domain-Aliasse", + "domain_templates": "Domainweite Vorlagen", "domain_quota": "Gesamtspeicher", "domain_quota_total": "Domain-Speicherplatz gesamt", "domains": "Domains", @@ -781,6 +784,7 @@ "mailbox_defaults": "Standardeinstellungen", "mailbox_defaults_info": "Steuert die Standardeinstellungen für neue Mailboxen.", "mailbox_defquota": "Standard-Quota", + "mailbox_templates": "Mailboxweite Vorlagen", "mailbox_quota": "Max. Größe einer Mailbox", "mailboxes": "Mailboxen", "max_aliases": "Max. mögliche Aliasse", @@ -810,6 +814,7 @@ "recipient_map_old_info": "Der originale Empfänger muss eine E-Mail-Adresse oder ein Domainname sein.", "recipient_maps": "Empfängerumschreibungen", "relay_all": "Alle Empfänger-Adressen relayen", + "relay_unknown": "Unbekannte Mailboxen relayen", "remove": "Entfernen", "resources": "Ressourcen", "running": "In Ausführung", @@ -836,6 +841,8 @@ "table_size_show_n": "Zeige %s Einträge", "target_address": "Ziel-Adresse", "target_domain": "Ziel-Domain", + "templates": "Vorlagen", + "template": "Vorlage", "tls_enforce_in": "TLS eingehend erzwingen", "tls_enforce_out": "TLS ausgehend erzwingen", "tls_map_dest": "Ziel", @@ -932,16 +939,20 @@ "type": "Typ" }, "queue": { - "delete_queue": "Queue löschen", - "flush_queue": "Queue flushen", - "queue_ays": "Soll die derzeitige Queue wirklich komplett bereinigt werden?", - "queue_command_success": "Queue-Aufgabe erfolgreich ausgeführt", - "queue_deliver_mail": "Ausliefern", - "queue_hold_mail": "Zurückhalten", + "delete": "Queue löschen", + "flush": "Queue flushen", + "info" : "In der Mailqueue befinden sich alle E-Mails, welche auf eine Zustellung warten. Sollte eine E-Mail eine längere Zeit innerhalb der Mailqueue stecken wird diese automatisch vom System gelöscht.
Die Fehlermeldung der jeweiligen Mail gibt aufschluss darüber, warum diese nicht zugestellt werden konnte", + "legend": "Funktionen der Mailqueue Aktionen:", + "ays": "Soll die derzeitige Queue wirklich komplett bereinigt werden?", + "deliver_mail": "Ausliefern", + "deliver_mail_legend": "Versucht eine erneute Zustellung der ausgwählten Mails.", + "hold_mail": "Zurückhalten", + "hold_mail_legend": "Hält die ausgewählten Mails zurück. (Verhindert weitere Zustellversuche)", "queue_manager": "Queue Manager", - "queue_show_message": "Nachricht anzeigen", - "queue_unban": "queue unban", - "queue_unhold_mail": "Freigeben" + "show_message": "Nachricht anzeigen", + "unban": "queue unban", + "unhold_mail": "Freigeben", + "unhold_mail_legend": "Gibt ausgewählte Mails zur Auslieferung frei. (Erfordert vorheriges Zurückhalten)" }, "start": { "help": "Hilfe ein-/ausblenden", @@ -1018,6 +1029,9 @@ "saved_settings": "Regel wurde gespeichert", "settings_map_added": "Regel wurde gespeichert", "settings_map_removed": "Regeln wurden entfernt: %s", + "template_added": "Template %s hinzugefügt", + "template_modified": "Änderungen am Template %s wurden gespeichert", + "template_removed": "Template ID %s wurde gelöscht", "sogo_profile_reset": "ActiveSync-Gerät des Benutzers %s wurde zurückgesetzt", "tls_policy_map_entry_deleted": "TLS-Richtlinie mit der ID %s wurde gelöscht", "tls_policy_map_entry_saved": "TLS-Richtlinieneintrag \"%s\" wurde gespeichert", diff --git a/data/web/lang/lang.en-gb.json b/data/web/lang/lang.en-gb.json index edc696d8..ce6e2cf8 100644 --- a/data/web/lang/lang.en-gb.json +++ b/data/web/lang/lang.en-gb.json @@ -232,6 +232,7 @@ "oauth2_renew_secret": "Generate new client secret", "oauth2_revoke_tokens": "Revoke all client tokens", "optional": "optional", + "options": "Options", "password": "Password", "password_length": "Password length", "password_policy": "Password policy", @@ -943,16 +944,20 @@ "type": "Type" }, "queue": { - "delete_queue": "Delete all", - "flush_queue": "Flush queue", - "queue_ays": "Please confirm you want to delete all items from the current queue.", - "queue_command_success": "Queue command completed successfully", - "queue_deliver_mail": "Deliver", - "queue_hold_mail": "Hold", + "delete": "Delete all", + "flush": "Flush queue", + "info" : "The mail queue contains all e-mails that are waiting for delivery. If an email is stuck in the mail queue for a long time, it is automatically deleted by the system.
The error message of the respective mail gives information about why the mail could not be delivered.", + "legend": "Mail queue actions functions:", + "ays": "Please confirm you want to delete all items from the current queue.", + "deliver_mail": "Deliver", + "deliver_mail_legend": "Attempts to redeliver selected mails.", + "hold_mail": "Hold", + "hold_mail_legend": "Holds the selected mails. (Prevents further delivery attempts)", "queue_manager": "Queue Manager", - "queue_show_message": "Show message", - "queue_unban": "queue unban", - "queue_unhold_mail": "Unhold" + "show_message": "Show message", + "unban": "queue unban", + "unhold_mail": "Unhold", + "unhold_mail_legend": "Releases selected mails for delivery. (Requires prior hold)" }, "ratelimit": { "disabled": "Disabled", @@ -1022,6 +1027,7 @@ "password_policy_saved": "Password policy was saved successfully", "pushover_settings_edited": "Pushover settings successfully set, please verify credentials.", "qlearn_spam": "Message ID %s was learned as spam and deleted", + "queue_command_success": "Queue command completed successfully", "recipient_map_entry_deleted": "Recipient map ID %s has been deleted", "recipient_map_entry_saved": "Recipient map entry \"%s\" has been saved", "relayhost_added": "Map entry %s has been added", @@ -1038,6 +1044,7 @@ "sogo_profile_reset": "SOGo profile for user %s was reset", "template_added": "Added template %s", "template_modified": "Changes to template %s have been saved", + "template_removed": "Template ID %s has been deleted", "tls_policy_map_entry_deleted": "TLS policy map ID %s has been deleted", "tls_policy_map_entry_saved": "TLS policy map entry \"%s\" has been saved", "ui_texts": "Saved changes to UI texts", diff --git a/data/web/templates/admin.twig b/data/web/templates/admin.twig index f3408928..863f87e9 100644 --- a/data/web/templates/admin.twig +++ b/data/web/templates/admin.twig @@ -14,7 +14,7 @@ - {# #} - {# #}