From 4f475348249936b959324eedf7c10f02fced4f2d Mon Sep 17 00:00:00 2001 From: q16marvin Date: Fri, 9 Feb 2024 11:23:09 +0100 Subject: [PATCH 01/13] Update mailbox.js --- data/web/js/site/mailbox.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/data/web/js/site/mailbox.js b/data/web/js/site/mailbox.js index cc316b713..4fa1980af 100644 --- a/data/web/js/site/mailbox.js +++ b/data/web/js/site/mailbox.js @@ -887,7 +887,7 @@ jQuery(function($){ item.quota.value = humanFileSize(item.quota_used) + "/" + item.quota.value; item.max_quota_for_mbox = humanFileSize(item.max_quota_for_mbox); - item.last_mail_login = item.last_imap_login + '/' + item.last_pop3_login + '/' + item.last_smtp_login; + item.last_mail_login = item.last_imap_login + '/' + item.last_pop3_login + '/' + item.last_smtp_login + '/' + item.last_sso_login; /* if (!item.rl) { item.rl = '∞'; @@ -1008,7 +1008,8 @@ jQuery(function($){ res = data.split("/"); return '
IMAP @ ' + unix_time_format(Number(res[0])) + '

' + '
POP3 @ ' + unix_time_format(Number(res[1])) + '

' + - '
SMTP @ ' + unix_time_format(Number(res[2])) + '
'; + '
SMTP @ ' + unix_time_format(Number(res[2])) + '

' + + '
SSO @ ' + unix_time_format(Number(res[3])) + '
'; } }, { From 19deda31bc92b56241286bac4ad1711d7b1eb520 Mon Sep 17 00:00:00 2001 From: q16marvin Date: Fri, 9 Feb 2024 11:23:47 +0100 Subject: [PATCH 02/13] Update functions.mailbox.inc.php --- data/web/inc/functions.mailbox.inc.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/data/web/inc/functions.mailbox.inc.php b/data/web/inc/functions.mailbox.inc.php index 0f48efbd5..5588c1aee 100644 --- a/data/web/inc/functions.mailbox.inc.php +++ b/data/web/inc/functions.mailbox.inc.php @@ -4501,6 +4501,9 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { } else if ($SaslLogs['service'] == 'pop3') { $last_pop3_login = strtotime($SaslLogs['datetime']); + } + else if ($SaslLogs['service'] == 'SSO') { + $last_sso_login = strtotime($SaslLogs['datetime']); } } if (!isset($last_imap_login) || $GLOBALS['SHOW_LAST_LOGIN'] === false) { @@ -4511,10 +4514,14 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { } if (!isset($last_pop3_login) || $GLOBALS['SHOW_LAST_LOGIN'] === false) { $last_pop3_login = 0; + } + if (!isset($last_sso_login) || $GLOBALS['SHOW_LAST_LOGIN'] === false) { + $last_sso_login = 0; } $mailboxdata['last_imap_login'] = $last_imap_login; $mailboxdata['last_smtp_login'] = $last_smtp_login; $mailboxdata['last_pop3_login'] = $last_pop3_login; + $mailboxdata['last_sso_login'] = $last_sso_login; if (!isset($_extra) || $_extra != 'reduced') { $rl = ratelimit('get', 'mailbox', $_data); From bb7fd483f7762a5df55acdd4463b70e0409849fb Mon Sep 17 00:00:00 2001 From: Hassan A Hashim Date: Tue, 20 Aug 2024 15:08:08 +0300 Subject: [PATCH 03/13] Fix: Escape a `'` character in `update.sh` (#6034) --- update.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/update.sh b/update.sh index 1f61ba995..dcc2020eb 100755 --- a/update.sh +++ b/update.sh @@ -404,7 +404,7 @@ while (($#)); do --nightly - Switch your mailcow updates to the unstable (nightly) branch. FOR TESTING PURPOSES ONLY!!!! --prefetch - Only prefetch new images and exit (useful to prepare updates) --skip-start - Do not start mailcow after update - --skip-ping-check - Skip ICMP Check to public DNS resolvers (Use it only if you've blocked any ICMP Connections to your mailcow machine) + --skip-ping-check - Skip ICMP Check to public DNS resolvers (Use it only if you'\''ve blocked any ICMP Connections to your mailcow machine) --stable - Switch your mailcow updates to the stable (master) branch. Default unless you changed it with --nightly. -f|--force - Force update, do not ask questions -d|--dev - Enables Developer Mode (No Checkout of update.sh for tests) From cc5138da13e04e26540e47d27bd145cebd3d981d Mon Sep 17 00:00:00 2001 From: milkmaker Date: Tue, 20 Aug 2024 21:34:04 +0200 Subject: [PATCH 04/13] Translations update from Weblate (#6039) * [Web] Updated lang.fr-fr.json [Web] Updated lang.fr-fr.json Co-authored-by: GeistFighter Co-authored-by: Samuel F <20537389+samuelfranzini@users.noreply.github.com> * [Web] Updated lang.fi-fi.json Co-authored-by: Berttas * [Web] Updated lang.ru-ru.json Co-authored-by: Habetdin <15926758+Habetdin@users.noreply.github.com> * [Web] Updated lang.uk-ua.json Co-authored-by: DRago_Angel * [Web] Updated lang.pt-br.json Co-authored-by: xmacaba --------- Co-authored-by: GeistFighter Co-authored-by: Samuel F <20537389+samuelfranzini@users.noreply.github.com> Co-authored-by: Berttas Co-authored-by: Habetdin <15926758+Habetdin@users.noreply.github.com> Co-authored-by: DRago_Angel Co-authored-by: xmacaba --- data/web/lang/lang.fi-fi.json | 6 ++++- data/web/lang/lang.fr-fr.json | 41 +++++++++++++++++++++++++++++------ data/web/lang/lang.pt-br.json | 3 ++- data/web/lang/lang.ru-ru.json | 3 ++- data/web/lang/lang.uk-ua.json | 29 +++++++++++++++++-------- 5 files changed, 63 insertions(+), 19 deletions(-) diff --git a/data/web/lang/lang.fi-fi.json b/data/web/lang/lang.fi-fi.json index d4a5a08ba..9b3cc8488 100644 --- a/data/web/lang/lang.fi-fi.json +++ b/data/web/lang/lang.fi-fi.json @@ -267,7 +267,11 @@ "upload": "Lataa", "username": "Käyttäjätunnus", "validate_license_now": "Vahvista GUID-tunnus lisenssi palvelinta vastaan", - "yes": "✓" + "yes": "✓", + "allowed_methods": "Kulunvalvonta-salli-menetelmät", + "admins": "Järjestelmänvalvojat", + "admins_ldap": "LDAP-ylläpitäjät", + "advanced_settings": "Lisäasetukset" }, "danger": { "access_denied": "Käyttö estetty tai lomake tiedot eivät kelpaa", diff --git a/data/web/lang/lang.fr-fr.json b/data/web/lang/lang.fr-fr.json index aed9ec567..6a59bbc3d 100644 --- a/data/web/lang/lang.fr-fr.json +++ b/data/web/lang/lang.fr-fr.json @@ -28,7 +28,8 @@ "unlimited_quota": "Quota illimité pour les boîtes de réception", "domain_desc": "Modifier la description du domaine", "domain_relayhost": "Changer le relais pour un domaine", - "mailbox_relayhost": "Changer le relais d’une boîte de réception" + "mailbox_relayhost": "Changer le relais d’une boîte de réception", + "pw_reset": "Autoriser la réinitialisation du mot de passe de l'utilisateur" }, "add": { "activate_filter_warn": "Tous les autres filtres seront désactivés, quand activé est coché.", @@ -343,7 +344,15 @@ "f2b_manage_external": "Gérer Fail2Ban en externe", "transport_test_rcpt_info": "• ; Utilisez null@hosted.mailcow.de pour tester le relais vers une destination étrangère.", "relay_rcpt": "Adresse \"À :\"", - "is_mx_based": "Basé sur MX" + "is_mx_based": "Basé sur MX", + "password_reset_info": "Si aucune adresse de messagerie de récupération n'est fournie, cette fonction ne peut pas être utilisée.", + "password_settings": "Paramètres des mots de passe", + "reset_password_vars": "{{link}} Le lien généré pour la réinitialisation du mot de passe
{{username}} L'adresse de la boîte mail de l'utilisateur qui a demandé la réinitialisation du mot de passe ayant un compte mailcow
{{username2}} L'adresse de la boîte mail de récupération
{{date}} La date à laquelle la demande de réinitialisation du mot de passe a été faite
{{token_lifetime}} La durée de vie du jeton en minutes
{{hostname}} Le nom d'hôte de votre serveur mailcow", + "password_reset_settings": "Paramètres de récupération des mots de passe", + "password_reset_tmpl_html": "Modèle HTML", + "password_reset_tmpl_text": "Modèle en texte", + "restore_template": "Laisser vide pour restaurer le modèle par défaut.", + "admins_ldap": "Si aucune adresse de messagerie de récupération n'est fournie, cette fonction ne peut pas être utilisée." }, "danger": { "access_denied": "Accès refusé ou données de formulaire non valides", @@ -474,7 +483,13 @@ "cors_invalid_method": "Allow-Method specifiée invalide", "cors_invalid_origin": "Allow-Origin spécifiée invalide", "extended_sender_acl_denied": "ACL manquante pour définir les adresses des expéditeurs externes", - "webauthn_username_failed": "L'authentificateur sélectionné appartient à un autre compte" + "webauthn_username_failed": "L'authentificateur sélectionné appartient à un autre compte", + "recovery_email_failed": "Impossible d'envoyer un email de réinitialisation. Veuillez contacter votre administrateur.", + "invalid_reset_token": "Jeton de réinitialisation invalide", + "password_reset_invalid_user": "Boîte mail introuvable ou aucune adresse de récupération n'a été définie", + "password_reset_na": "La réinitialisation des mots de passe est actuellement indisponible. Veuillez contacter votre administrateur.", + "reset_token_limit_exceeded": "Le nombre limite de jetons de réinitialisation a été dépassé. Veuillez réessayer plus tard.", + "to_invalid": "Le destinataire ne doit pas être vide" }, "debug": { "chart_this_server": "Graphique (ce serveur)", @@ -642,7 +657,8 @@ "quota_warning_bcc": "Avertissement sur les quotas BCC", "quota_warning_bcc_info": "Les avertissements seront envoyés en copies séparées aux destinataires suivants. Le sujet sera précédé du nom d'utilisateur correspondant entre parenthèses, par exemple : Avertissement sur les quotas (user@example.com).", "sogo_access_info": "L'authentification unique à partir de l'interface de messagerie reste opérationnelle. Ce paramètre n'affecte pas l'accès à tous les autres services et ne supprime ni ne modifie le profil SOGo existant d'un utilisateur.", - "admin": "Modifier l'administrateur" + "admin": "Modifier l'administrateur", + "password_recovery_email": "Adresse email de récupération" }, "footer": { "cancel": "Annuler", @@ -681,7 +697,14 @@ "mobileconfig_info": "Veuillez vous connecter en tant qu’utilisateur de la boîte de réception pour télécharger le profil de connexion Apple demandé.", "other_logins": "Clé d'authentification", "password": "Mot de passe", - "username": "Nom d'utilisateur" + "username": "Nom d'utilisateur", + "back_to_mailcow": "Revenir sur mailcow", + "forgot_password": "> Mot de passe oublié ?", + "invalid_pass_reset_token": "Le jeton de réinitialisation du mot de passe est invalide ou a expiré.
Veuillez demander un nouveau lien de réinitialisation de mot de passe.", + "new_password": "Nouveau mot de passe", + "new_password_confirm": "Confirmer le nouveau mot de passe", + "reset_password": "Réinitialiser le mot de passe", + "request_reset_password": "Demander le changement du mot de passe" }, "mailbox": { "action": "Action", @@ -1004,7 +1027,9 @@ "template_added": "Modèles ajoutés %s", "template_removed": "Le modèle ayant l'ID %s a été supprimé", "domain_add_dkim_available": "A DKIM key did already exist", - "ip_check_opt_in_modified": "Le contrôle de l'IP a été enregistré avec succès" + "ip_check_opt_in_modified": "Le contrôle de l'IP a été enregistré avec succès", + "password_changed_success": "Le mot de passe a été modifié avec succès", + "recovery_email_sent": "Email de réinitialisation envoyé à %s" }, "tfa": { "api_register": "%s utilise l'API Yubico Cloud. Veuillez obtenir une clé API pour votre clé ici", @@ -1202,7 +1227,9 @@ "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Nom d'utilisateur ou mot de passe incorrect", "value": "Valeur", "allowed_protocols": "Protocoles autorisés", - "mailbox": "Boîte de réception" + "mailbox": "Boîte de réception", + "password_reset_info": "Si aucun email pour la récupération du mot de passe n'est fourni, cette fonction ne peut pas être utilisée.", + "pw_recovery_email": "Email de récupération pour son mot de passe" }, "warning": { "cannot_delete_self": "Impossible de supprimer l’utilisateur connecté", diff --git a/data/web/lang/lang.pt-br.json b/data/web/lang/lang.pt-br.json index 5854cc1f2..45dbf5147 100644 --- a/data/web/lang/lang.pt-br.json +++ b/data/web/lang/lang.pt-br.json @@ -28,7 +28,8 @@ "spam_score": "Pontuação de spam", "syncjobs": "Trabalhos de sincronização", "tls_policy": "Política de TLS", - "unlimited_quota": "Cota ilimitada para mailboxes" + "unlimited_quota": "Cota ilimitada para mailboxes", + "pw_reset": "Permite redefinir a senha do usuário" }, "add": { "activate_filter_warn": "Todos os outros filtros serão desativados quando a opção ativa estiver marcada.", diff --git a/data/web/lang/lang.ru-ru.json b/data/web/lang/lang.ru-ru.json index 21775cb16..4a1092f27 100644 --- a/data/web/lang/lang.ru-ru.json +++ b/data/web/lang/lang.ru-ru.json @@ -28,7 +28,8 @@ "spam_score": "Политика фильтрации спама", "syncjobs": "Задания синхронизации", "tls_policy": "Политика шифрования", - "unlimited_quota": "Неограниченная квота для почтовых ящиков" + "unlimited_quota": "Неограниченная квота для почтовых ящиков", + "pw_reset": "Разрешить сброс пароля пользователей mailcow" }, "add": { "activate_filter_warn": "Активация этого фильтра отключит все остальные фильтры этого типа.", diff --git a/data/web/lang/lang.uk-ua.json b/data/web/lang/lang.uk-ua.json index 5cc704456..f2884cd47 100644 --- a/data/web/lang/lang.uk-ua.json +++ b/data/web/lang/lang.uk-ua.json @@ -28,13 +28,14 @@ "app_passwds": "Паролі додатків", "domain_relayhost": "Змінити relayhost для домену", "login_as": "Увійти як користувач поштової скриньки", - "sogo_profile_reset": "Скинути профіль SOGo" + "sogo_profile_reset": "Скинути профіль SOGo", + "pw_reset": "Скидання паролю користувача" }, "add": { "app_name": "Назва додатка", "app_password": "Додати пароль додатка", "app_passwd_protocols": "Дозволені протоколи для пароля додатка", - "comment_info": "Приватний коментар не видно користувачам, а публічний – відображається поряд із псевдонімом в особистому кабінеті користувача.", + "comment_info": "Приватний коментар не видно користувачам, а публічний – відображається поряд із псевдонімом в особистому кабінеті користувача", "custom_params": "Налаштування користувача", "gal": "GAL - Глобальна адресна книга", "mailbox_quota_m": "Максимальна квота поштового акаунту (MiB)", @@ -77,7 +78,7 @@ "password_repeat": "Підтвердження пароля (повтор)", "post_domain_add": "Після додавання нового домену контейнер SOGo (\"sogo-mailcow\") необхідно перезапустити!

Крім того, слід перевірити конфігурацію DNS доменів. Після затвердження конфігурації DNS перезапустіть контейнер \"acme-mailcow\", щоб автоматично згенерувати сертифікати для вашого нового домену.
Цей крок не є обов'язковим і повторюватиметься кожні 24 години.", "relay_all_info": "Якщо ви вирішите не ретранслювати всіх одержувачів, вам потрібно буде додати (\"сліпу\") поштову адресу для кожного одержувача, якого слід ретранслювати.", - "relay_transport_info": "
Інфо
Ви можете налаштувати власний транспорт для домену. Якщо такої установки немає, то доставка буде виконана на основі MX-записів.", + "relay_transport_info": "
Інфо
Ви можете налаштувати власний транспорт для домену. Якщо такої установки немає, то доставка буде виконана на основі MX-записів.", "relayhost_wrapped_tls_info": "Будь ласка, не використовуйте TLS порти (в основному це 465 порт).
\nВикористовуйте будь-який не порт TLS, який підтримує STARTTLS. А для захисту від downgrate атак - налаштуйте примусову політику TLS.", "syncjob_hint": "Паролі до вашого акаунту будуть збережені на сервері у вигляді простого тексту!", "timeout1": "Тайм-аут для підключення до віддаленого хоста", @@ -299,7 +300,7 @@ "api_allow_from": "Список IP-адрес для доступу до API (розділених комою або новим рядком)", "api_skip_ip_check": "Пропустити перевірку IP для API", "arrival_time": "Время получения (час. пояс сервера)", - "ban_list_info": "Список заблокованих IP-адрес: підмережа (час, що залишився) - [дія].
IP-адреси, що знаходяться в черзі на розблокування, будуть видалені зі списку активних блокувань протягом декількох секунд.
/>Червона мітка означає, що підмережа/хост знаходиться в чорному списку.", + "ban_list_info": "Список заблокованих IP-адрес: підмережа (час, що залишився) - [дія].
IP-адреси, що знаходяться в черзі на розблокування, будуть видалені зі списку активних блокувань протягом декількох секунд.
Червона мітка означає, що підмережа/хост знаходиться в чорному списку.", "credentials_transport_warning": "Попередження: додавання нового запису перезапише облікові дані для всіх записів з таким самим наступним хостом.", "dkim_to_title": "Цільовий домен(и) (DKIM буде перезаписаний)", "duplicate_dkim": "Копіювання DKIM запису", @@ -349,7 +350,13 @@ "queue_unban": "розблокувати", "f2b_manage_external": "Керування Fail2Ban ззовні", "f2b_manage_external_info": "Fail2ban буде підтримувати список заборонених, але не буде активно встановлювати правила для блокування трафіку. Використовуйте згенерований список заборон нижче для зовнішнього блокування трафіку.", - "copy_to_clipboard": "Текст скопійовано в буфер обміну!" + "copy_to_clipboard": "Текст скопійовано в буфер обміну!", + "password_reset_tmpl_text": "Plain-text шаблон", + "password_reset_info": "Якщо електронну адресу для відновлення не надано, ця функція не може бути використана.", + "logo_dark_label": "Темна тема", + "password_reset_settings": "Налаштування відновлення паролів", + "password_reset_tmpl_html": "HTML шаблон", + "logo_normal_label": "Світла тема" }, "danger": { "alias_domain_invalid": "Неприпустимий псевдонім домену: %s", @@ -479,7 +486,8 @@ "template_exists": "Шаблон %s вже існує", "template_id_invalid": "Ідентифікатор шаблону %s недійсний", "template_name_invalid": "Ім'я шаблону невірне", - "img_size_exceeded": "Зображення перевищує максимальний розмір файлу" + "img_size_exceeded": "Зображення перевищує максимальний розмір файлу", + "img_dimensions_exceeded": "Зображення перевищує максимальний розмір" }, "debug": { "chart_this_server": "Діаграма (цей сервер)", @@ -661,7 +669,8 @@ }, "domain_footer_html": "Нижній колонтитул HTML", "domain_footer_plain": "ЗВИЧАЙНИЙ нижній колонтитул", - "custom_attributes": "Користувацькі атрибути" + "custom_attributes": "Користувацькі атрибути", + "domain_footer_skip_replies": "Ігнорувати нижній колонтитул у листах-відповідях" }, "fido2": { "confirm": "Підтвердити", @@ -1068,7 +1077,8 @@ "cors_headers_edited": "Налаштування CORS збережено", "ip_check_opt_in_modified": "Перевірка IP-адреси успішно збережено", "template_removed": "Шаблону із ID %s видалено", - "f2b_banlist_refreshed": "Ідентифікатор списку заборонених успішно оновлено." + "f2b_banlist_refreshed": "Ідентифікатор списку заборонених успішно оновлено.", + "domain_footer_modified": "Зміни в нижньому колонтитулі домену %s збережено" }, "tfa": { "confirm": "Підтвердьте", @@ -1095,7 +1105,8 @@ "set_tfa": "Встановити метод двофакторної перевірки", "u2f_deprecated": "Схоже, ваш ключ був зареєстрований за допомогою застарілого методу U2F. Ми дезактивуємо двофакторну автентифікацію для вас і видалимо ваш ключ.", "waiting_usb_auth": "Очікування пристрою USB...

Будь ласка, натисніть зараз кнопку на USB пристрої.", - "waiting_usb_register": "Очікування USB-пристрою...

Будь ласка, введіть пароль вище та підтвердіть реєстрацію, натиснувши кнопку на USB пристрої." + "waiting_usb_register": "Очікування USB-пристрою...

Будь ласка, введіть пароль вище та підтвердіть реєстрацію, натиснувши кнопку на USB пристрої.", + "authenticators": "Аутентифікатори" }, "user": { "action": "Дії", From c62b467ac4144fb98a1fe39ca90613ec1358cb90 Mon Sep 17 00:00:00 2001 From: FreddleSpl0it Date: Thu, 22 Aug 2024 11:16:01 +0200 Subject: [PATCH 05/13] [PHP-FPM] Use redis as session store --- data/Dockerfiles/phpfpm/docker-entrypoint.sh | 13 +++++++++++-- docker-compose.yml | 4 ++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/data/Dockerfiles/phpfpm/docker-entrypoint.sh b/data/Dockerfiles/phpfpm/docker-entrypoint.sh index 798a25851..20e9a405c 100755 --- a/data/Dockerfiles/phpfpm/docker-entrypoint.sh +++ b/data/Dockerfiles/phpfpm/docker-entrypoint.sh @@ -10,16 +10,25 @@ done # Do not attempt to write to slave if [[ ! -z ${REDIS_SLAVEOF_IP} ]]; then - REDIS_CMDLINE="redis-cli -h ${REDIS_SLAVEOF_IP} -p ${REDIS_SLAVEOF_PORT}" + REDIS_HOST=$REDIS_SLAVEOF_IP + REDIS_PORT=$REDIS_SLAVEOF_PORT else - REDIS_CMDLINE="redis-cli -h redis -p 6379" + REDIS_HOST="redis" + REDIS_PORT="6379" fi +REDIS_CMDLINE="redis-cli -h ${REDIS_HOST} -p ${REDIS_PORT}" until [[ $(${REDIS_CMDLINE} PING) == "PONG" ]]; do echo "Waiting for Redis..." sleep 2 done +# Set redis session store +echo -n ' +session.save_handler = redis +session.save_path = "tcp://'${REDIS_HOST}':'${REDIS_PORT}'" +' > /usr/local/etc/php/conf.d/session_store.ini + # Check mysql_upgrade (master and slave) CONTAINER_ID= until [[ ! -z "${CONTAINER_ID}" ]] && [[ "${CONTAINER_ID}" =~ ^[[:alnum:]]*$ ]]; do diff --git a/docker-compose.yml b/docker-compose.yml index cf0a028ff..19ffcaf4e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -111,7 +111,7 @@ services: - rspamd php-fpm-mailcow: - image: mailcow/phpfpm:1.89 + image: mailcow/phpfpm:1.90 command: "php-fpm -d date.timezone=${TZ} -d expose_php=0" depends_on: - redis-mailcow @@ -552,7 +552,7 @@ services: aliases: - dockerapi - + ##### Will be removed soon ##### solr-mailcow: image: mailcow/solr:1.8.3 From 0066040bdc516dd2d5ffb3f89a97e26af647f17f Mon Sep 17 00:00:00 2001 From: milkmaker Date: Sat, 24 Aug 2024 14:09:28 +0200 Subject: [PATCH 06/13] Translations update from Weblate (#6049) * [Web] Updated lang.cs-cz.json Co-authored-by: Kristian Feldsam * [Web] Updated lang.fr-fr.json Co-authored-by: Samuel F <20537389+samuelfranzini@users.noreply.github.com> --------- Co-authored-by: Kristian Feldsam Co-authored-by: Samuel F <20537389+samuelfranzini@users.noreply.github.com> --- data/web/lang/lang.cs-cz.json | 42 ++++++++++++++++++++++++++++------- data/web/lang/lang.fr-fr.json | 5 +++-- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/data/web/lang/lang.cs-cz.json b/data/web/lang/lang.cs-cz.json index 593f1cdcf..e72fb216a 100644 --- a/data/web/lang/lang.cs-cz.json +++ b/data/web/lang/lang.cs-cz.json @@ -28,7 +28,8 @@ "spam_score": "Skóre spamu", "syncjobs": "Synchronizační úlohy", "tls_policy": "Pravidla TLS", - "unlimited_quota": "Neomezené kvóty pro mailové schránky" + "unlimited_quota": "Neomezené kvóty pro mailové schránky", + "pw_reset": "Povolit obnovení hesla uživatele mailcow" }, "add": { "activate_filter_warn": "Pokud je zaškrtlá volba \"Aktivní\", budou všechny ostatní filtry deaktivovány.", @@ -346,7 +347,14 @@ "f2b_ban_time_increment": "Délka banu je prodlužována s každým dalším banem", "f2b_max_ban_time": "Maximální délka banu (s)", "cors_settings": "Nastavení CORS", - "queue_unban": "zrušit ban" + "queue_unban": "zrušit ban", + "password_reset_info": "Pokud není zadán žádný e-mail pro obnovení, nelze tuto funkci použít.", + "password_reset_settings": "Nastavení obnovení hesla", + "password_settings": "Nastavení hesel", + "password_reset_tmpl_html": "HTML šablona", + "password_reset_tmpl_text": "Textová šablona", + "reset_password_vars": "{{link}} Vygenerovaný odkaz pro obnovení hesla
{{username}} Název mailboxu uživatele, který požádal o resetování hesla.
{{username2}} Název schránky pro obnovení
{{date}} Datum podání žádosti o obnovení hesla
{{token_lifetime}} Délka životnosti tokenu v minutách
{{hostname}} Název serveru mailcow", + "restore_template": "Ponechte prázdné pro obnovení výchozí šablony." }, "danger": { "access_denied": "Přístup odepřen nebo jsou neplatná data ve formuláři", @@ -475,7 +483,10 @@ "webauthn_publickey_failed": "Pro vybraný ověřovací prostředek nebyl uložen žádný veřejný klíč", "webauthn_username_failed": "Zvolený ověřovací prostředek patří k jinému účtu", "extended_sender_acl_denied": "chybějící ACL pro nastavení externích adres odesílatele", - "demo_mode_enabled": "Demo režim je zapnutý" + "demo_mode_enabled": "Demo režim je zapnutý", + "recovery_email_failed": "Nepodařilo se odeslat e-mail pro obnovení. Obraťte se prosím na svého správce.", + "password_reset_invalid_user": "Mailbox nebyl nalezen nebo není nastaven žádný e-mail pro obnovu", + "password_reset_na": "Obnovení hesla není v současné době k dispozici. Obraťte se prosím na svého správce." }, "datatables": { "emptyTable": "Tabulka neobsahuje žádná data", @@ -672,12 +683,17 @@ "auth_user": "{= auth_user =} - Ověřené uživatelské jméno zadané MTA", "from_user": "{= from_user =} - uživatelská část odesílatele, např. pro \"moo@mailcow.tld\" vrátí \"moo\"", "from_domain": "{= from_domain =} - Doména odesílatele", - "from_addr": "{= from_addr =} - E-mailová adresa odesílatele" + "from_addr": "{= from_addr =} - E-mailová adresa odesílatele", + "custom": "{= foo =} - Pokud má schránka vlastní atribut „foo“ s hodnotou „bar“, vrátí „bar“" }, "domain_footer": "Patička pro celou doménu", "domain_footer_html": "HTML text", "domain_footer_plain": "Prostý text", - "pushover_sound": "Zvukové upozornění" + "pushover_sound": "Zvukové upozornění", + "custom_attributes": "Vlastní atributy", + "footer_exclude": "Vyloučit ze zápatí", + "domain_footer_skip_replies": "Ignorovat patičku u odpovědí na e-maily", + "password_recovery_email": "E-mail pro obnovu hesla" }, "fido2": { "confirm": "Potvrdit", @@ -733,7 +749,14 @@ "mobileconfig_info": "Ke stažení profilového souboru se přihlaste jako uživatel schránky.", "other_logins": "Přihlášení klíčem", "password": "Heslo", - "username": "Uživatelské jméno" + "username": "Uživatelské jméno", + "back_to_mailcow": "Zpět do mailcow", + "forgot_password": "> Zapomněli jste heslo?", + "invalid_pass_reset_token": "Token pro obnovení hesla je neplatný nebo jeho platnost vypršela.
Prosím, vyžádejte si nový odkaz pro obnovení hesla.", + "new_password": "Nové heslo", + "new_password_confirm": "Ověření nového hesla", + "reset_password": "Obnovit heslo", + "request_reset_password": "Požádat o změnu hesla" }, "mailbox": { "action": "Akce", @@ -1081,7 +1104,8 @@ "verified_webauthn_login": "WebAuthn přihlášení ověřeno", "verified_yotp_login": "Yubico OTP přihlášení ověřeno", "cors_headers_edited": "Nastavení CORS byla uložena", - "domain_footer_modified": "Změny patičky domény %s byly uloženy" + "domain_footer_modified": "Změny patičky domény %s byly uloženy", + "recovery_email_sent": "E-mail k obnovení byl odeslán na adresu %s" }, "tfa": { "api_register": "%s používá Yubico Cloud API. Prosím získejte API klíč pro své Yubico ZDE", @@ -1268,7 +1292,9 @@ "with_app_password": "s heslem aplikace", "year": "rok", "years": "let", - "pushover_sound": "Zvukové upozornění" + "pushover_sound": "Zvukové upozornění", + "password_reset_info": "Pokud není zadán e-mail pro obnovení hesla, nelze tuto funkci použít.", + "pw_recovery_email": "E-mail pro obnovení hesla" }, "warning": { "cannot_delete_self": "Nelze smazat právě přihlášeného uživatele", diff --git a/data/web/lang/lang.fr-fr.json b/data/web/lang/lang.fr-fr.json index 6a59bbc3d..d87632c68 100644 --- a/data/web/lang/lang.fr-fr.json +++ b/data/web/lang/lang.fr-fr.json @@ -656,7 +656,7 @@ "none_inherit": "Aucun / Héritage", "quota_warning_bcc": "Avertissement sur les quotas BCC", "quota_warning_bcc_info": "Les avertissements seront envoyés en copies séparées aux destinataires suivants. Le sujet sera précédé du nom d'utilisateur correspondant entre parenthèses, par exemple : Avertissement sur les quotas (user@example.com).", - "sogo_access_info": "L'authentification unique à partir de l'interface de messagerie reste opérationnelle. Ce paramètre n'affecte pas l'accès à tous les autres services et ne supprime ni ne modifie le profil SOGo existant d'un utilisateur.", + "sogo_access_info": "L'authentification unique à partir de l'interface de messagerie reste opérationnelle. Ce paramètre n'affecte pas l'accès à tous les autres services et ne supprime ni, ne modifie le profil SOGo existant d'un utilisateur.", "admin": "Modifier l'administrateur", "password_recovery_email": "Adresse email de récupération" }, @@ -1261,7 +1261,8 @@ "lengthMenu": "Afficher les entrées _MENU_", "loadingRecords": "Chargement…", "processing": "Veuillez patienter…", - "collapse_all": "Tout réduire" + "collapse_all": "Tout réduire", + "info": "Affichage de _START_ de _END_ sur _TOTAL_ entrées" }, "ratelimit": { "disabled": "Désactivé" From 7203735532dae24da8c9e454618cdd161156347c Mon Sep 17 00:00:00 2001 From: milkmaker Date: Thu, 29 Aug 2024 20:27:23 +0200 Subject: [PATCH 07/13] [Web] Updated lang.it-it.json (#6053) Co-authored-by: Stefano --- data/web/lang/lang.it-it.json | 84 ++++++++++++++++++++++++++--------- 1 file changed, 63 insertions(+), 21 deletions(-) diff --git a/data/web/lang/lang.it-it.json b/data/web/lang/lang.it-it.json index f65278402..f73f938bf 100644 --- a/data/web/lang/lang.it-it.json +++ b/data/web/lang/lang.it-it.json @@ -28,7 +28,8 @@ "spam_score": "Punteggio SPAM", "syncjobs": "Processi di sync", "tls_policy": "Politica TLS", - "unlimited_quota": "Spazio illimitato per le caselle di posta" + "unlimited_quota": "Spazio illimitato per le caselle di posta", + "pw_reset": "Permettere di reimpostare la password dell'utente mailcow" }, "add": { "activate_filter_warn": "Tutti gli altri filtri saranno disattivati, quando è attivo.", @@ -116,7 +117,7 @@ "activate_api": "Attiva API", "activate_send": "Attiva bottone di invio", "active": "Attiva", - "active_rspamd_settings_map": "Active settings map", + "active_rspamd_settings_map": "Mappa delle impostazioni attive", "add": "Aggiungi", "add_admin": "Aggiungi amministratore", "add_domain_admin": "Aggiungi amministratore di dominio", @@ -124,7 +125,7 @@ "add_relayhost": "Add sender-dependent transport", "add_relayhost_hint": "Tieni presente che i dati di autenticazione, se presenti, verranno archiviati come testo semplice.", "add_row": "Aggiungi riga", - "add_settings_rule": "Add settings rule", + "add_settings_rule": "Aggiungi regola delle impostazioni", "add_transport": "Aggiungi transport", "add_transports_hint": "Tieni presente che i dati di autenticazione, se presenti, verranno archiviati come testo semplice.", "additional_rows": " righe aggiuntive inserite", @@ -134,7 +135,7 @@ "admins": "Amministratori", "admins_ldap": "Amministratori LDAP", "advanced_settings": "Impostazioni avanzate", - "api_allow_from": "Allow API access from these IPs/CIDR network notations", + "api_allow_from": "Consenti l'accesso API da questi indirizzi IP/notazione di rete CIDR", "api_info": "Questa API è in modifica. La documentazione può essere trovata su /api", "api_key": "Chiave API", "api_skip_ip_check": "Salta il controllo dell'IP per l'API", @@ -156,7 +157,7 @@ "dkim_domains_selector": "Selettore", "dkim_domains_wo_keys": "Seleziona i domini senza chiavi", "dkim_from": "Da", - "dkim_from_title": "Source domain to copy data from", + "dkim_from_title": "Dominio di origine da cui copiare i dati", "dkim_key_length": "Lunghezza chiave DKIM (bits)", "dkim_key_missing": "Chiave mancante", "dkim_key_unused": "Chiave non usata", @@ -182,8 +183,8 @@ "f2b_list_info": "Un host oppure una rete in blacklist, avrà sempre un peso maggiore rispetto ad una in whitelist. L'aggiornamento della lista richiede alcuni secondi per la sua entrata in azione.", "f2b_max_attempts": "Tentativi massimi", "f2b_max_ban_time": "Tempo massimo di blocco (s)", - "f2b_netban_ipv4": "IPv4 subnet size to apply ban on (8-32)", - "f2b_netban_ipv6": "IPv6 subnet size to apply ban on (8-128)", + "f2b_netban_ipv4": "Dimensione della subnet IPv4 su cui applicare il blocco (8-32)", + "f2b_netban_ipv6": "Dimensione della subnet IPv6 su cui applicare il blocco (8-128)", "f2b_parameters": "Parametri Fail2ban", "f2b_regex_info": "Log presi in considerazione: SOGo, Postfix, Dovecot, PHP-FPM.", "f2b_retry_window": "Retry window (s) for max. attempts", @@ -219,16 +220,16 @@ "merged_vars_hint": "Greyed out rows were merged from vars.(local.)inc.php and cannot be modified.", "message": "Messaggio", "message_size": "Dimensione mesaggio", - "nexthop": "Next hop", + "nexthop": "Prossimo hop", "no": "✕", "no_active_bans": "Nessun ban attivo", "no_new_rows": "Nessuna ulteriore riga disponibile", "no_record": "Nessun risultato", "oauth2_client_id": "ID cliente", - "oauth2_client_secret": "Client secret", + "oauth2_client_secret": "Chiave segreta del client", "oauth2_info": "The OAuth2 implementation supports the grant type \"Authorization Code\" and issues refresh tokens.
\r\nThe server also automatically issues new refresh tokens, after a refresh token has been used.

\r\n• The default scope is profile. Only mailbox users can be authenticated against OAuth2. If the scope parameter is omitted, it falls back to profile.
\r\n• The state parameter is required to be sent by the client as part of the authorize request.

\r\nPaths for requests to the OAuth2 API:
\r\n
    \r\n
  • Authorization endpoint: /oauth/authorize
  • \r\n
  • Token endpoint: /oauth/token
  • \r\n
  • Resource page: /oauth/profile
  • \r\n
\r\nRegenerating the client secret will not expire existing authorization codes, but they will fail to renew their token.

\r\nRevoking client tokens will cause immediate termination of all active sessions. All clients need to re-authenticate.", "oauth2_redirect_uri": "URI di reindirizzamento", - "oauth2_renew_secret": "Generate new client secret", + "oauth2_renew_secret": "Genera una nuova chiave segreta per il client", "oauth2_revoke_tokens": "Revoca tutti i token del client", "optional": "facoltativo", "password": "Password", @@ -269,7 +270,7 @@ "recipients": "Destinatari", "refresh": "Aggiorna", "regen_api_key": "Rinnova la chiave delle API", - "regex_maps": "Regex maps", + "regex_maps": "Mappe Regex", "relay_from": "\"Da:\" indirizzi", "relay_rcpt": "\"A:\" indirizzi", "relay_run": "Esegui test", @@ -286,7 +287,7 @@ "rsetting_no_selection": "Seleziona una regola", "rsetting_none": "Nessuna regola presente", "rsettings_insert_preset": "Insert example preset \"%s\"", - "rsettings_preset_1": "Disable all but DKIM and rate limit for authenticated users", + "rsettings_preset_1": "Disattivare tutto tranne DKIM e il limite di velocità per gli utenti autenticati", "rsettings_preset_2": "I postmaster vogliono lo spam", "rsettings_preset_3": "Consenti solo mittenti specifici per una casella di posta (ad esempio: utilizzo solo come casella di posta interna)", "rspamd_com_settings": "A setting name will be auto-generated, please see the example presets below. For more details see Rspamd docs", @@ -341,7 +342,18 @@ "rsettings_preset_4": "Disattivare Rspamd per un dominio", "options": "Opzioni", "cors_settings": "Impostazioni CORS", - "copy_to_clipboard": "Testo copiato negli appunti!" + "copy_to_clipboard": "Testo copiato negli appunti!", + "f2b_manage_external": "Gestione esterna di Fail2Ban", + "password_reset_info": "Se non viene fornita alcuna e-mail di recupero, questa funzione non può essere utilizzata.", + "password_reset_tmpl_text": "Template testuale", + "logo_dark_label": "Invertito per la modalità scura", + "ip_check": "Controllo IP", + "password_reset_settings": "Impostazioni per il recupero della password", + "password_reset_tmpl_html": "Template HTML", + "password_settings": "Impostazioni della password", + "queue_unban": "sblocca", + "restore_template": "Lasciare vuoto per ripristinare il modello predefinito.", + "logo_normal_label": "Normale" }, "danger": { "access_denied": "Accesso negato o form di login non corretto", @@ -466,7 +478,13 @@ "template_exists": "Il template %s esiste già", "template_id_invalid": "Il template con ID %s non è valido", "img_dimensions_exceeded": "L'immagine supera la dimensione massima consentita", - "img_size_exceeded": "L'immagine supera la dimensione massima del file" + "img_size_exceeded": "L'immagine supera la dimensione massima del file", + "extended_sender_acl_denied": "Autorizzazioni ACL mancanti per configurare indirizzi esterni come mittente", + "invalid_reset_token": "Token di reset non valido", + "password_reset_invalid_user": "La casella di posta elettronica non è stata trovata o non è stata impostata un'e-mail di recupero", + "password_reset_na": "Il recupero della password non è attualmente disponibile. Contattare l'amministratore.", + "recovery_email_failed": "Impossibile inviare un'e-mail di recupero. Contattare l'amministratore.", + "to_invalid": "Il destinatario non deve essere vuoto" }, "debug": { "chart_this_server": "Grafico (questo server)", @@ -503,7 +521,11 @@ "memory": "Memoria", "timezone": "Fuso orario", "no_update_available": "Il sistema è aggiornato all'ultima versione", - "update_failed": "Impossibile verificare la presenza di un aggiornamento" + "update_failed": "Impossibile verificare la presenza di un aggiornamento", + "architecture": "Architettura", + "error_show_ip": "Impossibile risolvere gli indirizzi IP pubblici", + "show_ip": "Mostra IP pubblico", + "wip": "Attualmente in lavorazione" }, "diagnostics": { "cname_from_a": "Valore letto dal record A/AAAA. Questo è supportato finché il record punta alla risorsa corretta.", @@ -632,7 +654,11 @@ "last_modified": "Ultima modifica", "pushover_sound": "Suono", "custom_attributes": "Attributi personalizzati", - "domain_footer_skip_replies": "Ignora il piè di pagina nelle e-mail di risposta" + "domain_footer_skip_replies": "Ignora il piè di pagina nelle e-mail di risposta", + "domain_footer_html": "Piè di pagina HTML", + "domain_footer_plain": "Piè di pagina PLAIN", + "footer_exclude": "Escludi dal piè di pagina", + "password_recovery_email": "E-mail di recupero password" }, "fido2": { "confirm": "Conferma", @@ -688,7 +714,13 @@ "mobileconfig_info": "Please login as mailbox user to download the requested Apple connection profile.", "other_logins": "Key login", "password": "Password", - "username": "Nome utente" + "username": "Nome utente", + "request_reset_password": "Richiesta di modifica della password", + "back_to_mailcow": "Torna a mailcow", + "forgot_password": "> Password dimenticata?", + "new_password": "Nuova password", + "new_password_confirm": "Conferma la nuova password", + "reset_password": "Ripristino della password" }, "mailbox": { "action": "Azione", @@ -939,7 +971,9 @@ "show_message": "Mostra messaggio", "unhold_mail": "Sblocca", "hold_mail_legend": "Blocca le mail selezionate. (Previene ulteriori tentativi di consegna)", - "legend": "Funzioni delle azioni della coda di posta:" + "legend": "Funzioni delle azioni della coda di posta:", + "unban": "Coda di sblocco", + "unhold_mail_legend": "Rilascia le mail selezionate per la consegna. (Richiede una prenotazione preventiva)" }, "start": { "help": "Mostra/Nascondi pannello di aiuto", @@ -1028,7 +1062,12 @@ "template_added": "Aggiunto template %s", "template_modified": "Le modifiche al template %s sono state salvate", "template_removed": "Il template con ID %s è stato cancellato", - "f2b_banlist_refreshed": "L'ID della lista blocchi è stato aggiornato con successo." + "f2b_banlist_refreshed": "L'ID della lista blocchi è stato aggiornato con successo.", + "domain_footer_modified": "Le modifiche al piè di pagina del dominio %s sono state salvate", + "cors_headers_edited": "Le impostazioni CORS sono state salvate", + "ip_check_opt_in_modified": "Il controllo dell'indirizzo IP è stato salvato con successo", + "password_changed_success": "La password è stata modificata con successo", + "recovery_email_sent": "Email di recupero inviata a %s" }, "tfa": { "api_register": "%s usa le API Yubico Cloud. Richiedi una chiave API qui", @@ -1220,7 +1259,9 @@ "direct_protocol_access": "Questo utente della mailbox ha accesso diretto ed esterno ai seguenti protocolli e applicazioni. Questa impostazione è controllata dal tuo amministratore. Le password delle applicazioni possono essere create per garantire l'accesso ai singoli protocolli e applicazioni.
Il pulsante \"Accedi alla webmail\" fornisce un singolo accesso a SOGo ed è sempre disponibile.", "pushover_sound": "Suono", "attribute": "Attributo", - "value": "Valore" + "value": "Valore", + "password_reset_info": "Se non viene fornita alcuna e-mail per il recupero della password, questa funzione non può essere utilizzata.", + "pw_recovery_email": "Email di recupero password" }, "warning": { "cannot_delete_self": "Cannot delete logged in user", @@ -1264,6 +1305,7 @@ "aria": { "sortAscending": ": attivare l'ordinamento crescente delle colonne", "sortDescending": ": attivare l'ordinamento decrescente delle colonne" - } + }, + "decimal": "." } } From af0c61b90adcdf3564efd8e30fe7659a74a2ddd9 Mon Sep 17 00:00:00 2001 From: milkmaker Date: Sun, 1 Sep 2024 00:19:08 +0000 Subject: [PATCH 08/13] update postscreen_access.cidr --- data/conf/postfix/postscreen_access.cidr | 44 ++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/data/conf/postfix/postscreen_access.cidr b/data/conf/postfix/postscreen_access.cidr index 78ffc3a89..f77d4e9ce 100644 --- a/data/conf/postfix/postscreen_access.cidr +++ b/data/conf/postfix/postscreen_access.cidr @@ -1,6 +1,6 @@ -# Whitelist generated by Postwhite v3.4 on Thu Aug 1 00:16:45 UTC 2024 +# Whitelist generated by Postwhite v3.4 on Sun Sep 1 00:19:07 UTC 2024 # https://github.com/stevejenkins/postwhite/ -# 1954 total rules +# 1994 total rules 2a00:1450:4000::/36 permit 2a01:111:f400::/48 permit 2a01:111:f403:8000::/50 permit @@ -19,6 +19,8 @@ 8.20.114.31 permit 8.25.194.0/23 permit 8.25.196.0/23 permit +8.39.54.0/23 permit +8.40.222.0/23 permit 10.162.0.0/16 permit 12.130.86.238 permit 13.110.208.0/21 permit @@ -200,6 +202,7 @@ 52.96.91.34 permit 52.96.111.82 permit 52.96.172.98 permit +52.96.214.50 permit 52.96.222.194 permit 52.96.222.226 permit 52.96.223.2 permit @@ -324,6 +327,7 @@ 65.110.161.77 permit 65.123.29.213 permit 65.123.29.220 permit +65.154.166.0/24 permit 65.212.180.36 permit 66.102.0.0/20 permit 66.119.150.192/26 permit @@ -1283,6 +1287,9 @@ 117.120.16.0/21 permit 119.42.242.52/31 permit 119.42.242.156 permit +121.244.91.48 permit +121.244.91.52 permit +122.15.156.182 permit 123.126.78.64/29 permit 124.108.96.24/31 permit 124.108.96.28/31 permit @@ -1338,7 +1345,18 @@ 134.170.141.64/26 permit 134.170.143.0/24 permit 134.170.174.0/24 permit +135.84.80.0/24 permit +135.84.81.0/24 permit +135.84.82.0/24 permit +135.84.83.0/24 permit 135.84.216.0/22 permit +136.143.160.0/24 permit +136.143.161.0/24 permit +136.143.178.49 permit +136.143.182.0/23 permit +136.143.184.0/24 permit +136.143.188.0/24 permit +136.143.190.0/23 permit 136.147.128.0/20 permit 136.147.135.0/24 permit 136.147.176.0/20 permit @@ -1353,6 +1371,7 @@ 139.138.46.219 permit 139.138.57.55 permit 139.138.58.119 permit +139.167.79.86 permit 139.180.17.0/24 permit 141.148.159.229 permit 141.193.32.0/23 permit @@ -1452,7 +1471,9 @@ 163.114.132.120 permit 163.114.134.16 permit 163.114.135.16 permit +164.152.23.32 permit 164.177.132.168/30 permit +165.173.128.0/24 permit 166.78.68.0/22 permit 166.78.68.221 permit 166.78.69.169 permit @@ -1480,9 +1501,16 @@ 168.245.12.252 permit 168.245.46.9 permit 168.245.127.231 permit +169.148.129.0/24 permit +169.148.131.0/24 permit +169.148.142.10 permit +169.148.144.0/25 permit +169.148.144.10 permit 170.10.68.0/22 permit 170.10.128.0/24 permit 170.10.129.0/24 permit +170.10.132.56/29 permit +170.10.132.64/29 permit 170.10.133.0/24 permit 172.217.0.0/19 permit 172.217.32.0/20 permit @@ -1634,7 +1662,15 @@ 199.16.156.0/22 permit 199.33.145.1 permit 199.33.145.32 permit +199.34.22.36 permit 199.59.148.0/22 permit +199.67.80.2 permit +199.67.80.20 permit +199.67.82.2 permit +199.67.82.20 permit +199.67.84.0/24 permit +199.67.86.0/24 permit +199.67.88.0/24 permit 199.101.161.130 permit 199.101.162.0/25 permit 199.122.120.0/21 permit @@ -1691,6 +1727,8 @@ 204.92.114.187 permit 204.92.114.203 permit 204.92.114.204/31 permit +204.141.32.0/23 permit +204.141.42.0/23 permit 204.220.160.0/20 permit 204.232.168.0/24 permit 205.139.110.0/24 permit @@ -1942,6 +1980,8 @@ 2603:1030:20e:3::23c permit 2603:1030:b:3::152 permit 2603:1030:c02:8::14 permit +2607:13c0:0001:0000:0000:0000:0000:7000/116 permit +2607:13c0:0002:0000:0000:0000:0000:1000/116 permit 2607:f8b0:4000::/36 permit 2620:109:c003:104::/64 permit 2620:109:c003:104::215 permit From ae3653a925189825b44566f10a3b823b9b5b9ab8 Mon Sep 17 00:00:00 2001 From: FreddleSpl0it Date: Mon, 2 Sep 2024 10:22:51 +0200 Subject: [PATCH 09/13] [SOGo] vacation auto reply date shifting #5394 --- data/Dockerfiles/sogo/docker-entrypoint.sh | 2 ++ docker-compose.yml | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/data/Dockerfiles/sogo/docker-entrypoint.sh b/data/Dockerfiles/sogo/docker-entrypoint.sh index 2ff602a3c..4e20e960e 100755 --- a/data/Dockerfiles/sogo/docker-entrypoint.sh +++ b/data/Dockerfiles/sogo/docker-entrypoint.sh @@ -10,6 +10,8 @@ if [[ ! -z ${REDIS_SLAVEOF_IP} ]]; then cp /etc/syslog-ng/syslog-ng-redis_slave.conf /etc/syslog-ng/syslog-ng.conf fi +echo "$TZ" > /etc/timezone + # Run hooks for file in /hooks/*; do if [ -x "${file}" ]; then diff --git a/docker-compose.yml b/docker-compose.yml index cf0a028ff..6ec97c9ad 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -176,7 +176,7 @@ services: - phpfpm sogo-mailcow: - image: mailcow/sogo:1.125 + image: mailcow/sogo:1.126 environment: - DBNAME=${DBNAME} - DBUSER=${DBUSER} @@ -552,7 +552,7 @@ services: aliases: - dockerapi - + ##### Will be removed soon ##### solr-mailcow: image: mailcow/solr:1.8.3 From 710cec996cc60219dcb152b2459e1beffe722130 Mon Sep 17 00:00:00 2001 From: Finn Hoffhenke <26007800+Finnlife@users.noreply.github.com> Date: Mon, 2 Sep 2024 15:40:29 +0200 Subject: [PATCH 10/13] feat: Added check for newer version tags on remote (#6054) --- update.sh | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/update.sh b/update.sh index dcc2020eb..fe8aee72f 100755 --- a/update.sh +++ b/update.sh @@ -360,6 +360,21 @@ while (($#)); do exit 3 fi ;; + --check-tags) + echo "Checking remote tags for updates..." + LATEST_TAG_REV=$(git ls-remote --exit-code --quiet --tags origin | tail -1 | cut -f1) + if [ "$?" -ne 0 ]; then + echo "A problem occurred while trying to fetch the latest tag from github." + exit 99 + fi + if [[ -z $(git log HEAD --pretty=format:"%H" | grep "${LATEST_TAG_REV}") ]]; then + echo -e "New tag is available.\nThe changes can be found here: https://github.com/mailcow/mailcow-dockerized/releases/latest" + exit 0 + else + echo "No updates available." + exit 3 + fi + ;; --ours) MERGE_STRATEGY=ours ;; @@ -396,9 +411,10 @@ while (($#)); do DEV=y ;; --help|-h) - echo './update.sh [-c|--check, --ours, --gc, --nightly, --prefetch, --skip-start, --skip-ping-check, --stable, -f|--force, -d|--dev, -h|--help] + echo './update.sh [-c|--check, --check-tags, --ours, --gc, --nightly, --prefetch, --skip-start, --skip-ping-check, --stable, -f|--force, -d|--dev, -h|--help] -c|--check - Check for updates and exit (exit codes => 0: update available, 3: no updates) + --check-tags - Check for newer tags and exit (exit codes => 0: newer tag available, 3: no newer tag) --ours - Use merge strategy option "ours" to solve conflicts in favor of non-mailcow code (local changes over remote changes), not recommended! --gc - Run garbage collector to delete old image tags --nightly - Switch your mailcow updates to the unstable (nightly) branch. FOR TESTING PURPOSES ONLY!!!! From 8b2d67169bb09f8fb57a7dcc67982c4c5d16647f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 3 Sep 2024 19:42:10 +0200 Subject: [PATCH 11/13] chore(deps): update peter-evans/create-pull-request action to v7 (#6059) Signed-off-by: milkmaker Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/update_postscreen_access_list.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update_postscreen_access_list.yml b/.github/workflows/update_postscreen_access_list.yml index ddfa7ac86..3d79e801b 100644 --- a/.github/workflows/update_postscreen_access_list.yml +++ b/.github/workflows/update_postscreen_access_list.yml @@ -22,7 +22,7 @@ jobs: bash helper-scripts/update_postscreen_whitelist.sh - name: Create Pull Request - uses: peter-evans/create-pull-request@v6 + uses: peter-evans/create-pull-request@v7 with: token: ${{ secrets.mailcow_action_Update_postscreen_access_cidr_pat }} commit-message: update postscreen_access.cidr From bb6f4058416b60ac0cb3e808740056de4a7cbc92 Mon Sep 17 00:00:00 2001 From: Niklas Meyer Date: Wed, 4 Sep 2024 14:42:30 +0200 Subject: [PATCH 12/13] compose: added clamd as depends_on to rspamd (#6062) --- docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yml b/docker-compose.yml index cf0a028ff..6023a9072 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -84,6 +84,7 @@ services: stop_grace_period: 30s depends_on: - dovecot-mailcow + - clamd-mailcow environment: - TZ=${TZ} - IPV4_NETWORK=${IPV4_NETWORK:-172.22.1} From 29d8cfe2bab1ac2afe59ee98fa75115fb3d55c9f Mon Sep 17 00:00:00 2001 From: FreddleSpl0it Date: Thu, 5 Sep 2024 14:02:04 +0200 Subject: [PATCH 13/13] [Web] Set min-width and text-align for last login badges --- data/web/js/site/mailbox.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/data/web/js/site/mailbox.js b/data/web/js/site/mailbox.js index 2ec2f9fa4..af2862a37 100644 --- a/data/web/js/site/mailbox.js +++ b/data/web/js/site/mailbox.js @@ -1013,10 +1013,10 @@ jQuery(function($){ responsivePriority: 7, render: function (data, type) { res = data.split("/"); - return '
IMAP @ ' + unix_time_format(Number(res[0])) + '

' + - '
POP3 @ ' + unix_time_format(Number(res[1])) + '

' + - '
SMTP @ ' + unix_time_format(Number(res[2])) + '

' + - '
SSO @ ' + unix_time_format(Number(res[3])) + '
'; + return '
IMAP @ ' + unix_time_format(Number(res[0])) + '

' + + '
POP3 @ ' + unix_time_format(Number(res[1])) + '

' + + '
SMTP @ ' + unix_time_format(Number(res[2])) + '

' + + '
SSO @ ' + unix_time_format(Number(res[3])) + '
'; } }, { @@ -2355,7 +2355,7 @@ jQuery(function($){ else $(tab).find(".table_collapse_option").hide(); } - + function filterByDomain(json, column, table){ var tableId = $(table.table().container()).attr('id'); // Create the `select` element @@ -2378,12 +2378,12 @@ jQuery(function($){ } }); }); - + // get unique domain list domains = domains.filter(function(value, index, array) { return array.indexOf(value) === index; }); - + // add domains to select domains.forEach(function(domain) { select.append($(''));