From 2eafd894126d2b8646d0c9d6a407e202682bea75 Mon Sep 17 00:00:00 2001 From: Kristian Feldsam Date: Fri, 26 Nov 2021 23:21:14 +0100 Subject: [PATCH 01/72] [web] apple config app passwords enhancements + translations Signed-off-by: Kristian Feldsam --- data/web/lang/lang.cs-cz.json | 24 +++++++++++++++------ data/web/lang/lang.de-de.json | 2 +- data/web/lang/lang.en-gb.json | 2 +- data/web/lang/lang.it-it.json | 2 +- data/web/lang/lang.ro-ro.json | 2 +- data/web/lang/lang.sk-sk.json | 25 +++++++++++++++------- data/web/lang/lang.uk-ua.json | 2 +- data/web/lang/lang.zh-cn.json | 2 +- data/web/lang/lang.zh-tw.json | 2 +- data/web/templates/modals/user.twig | 12 +++++------ data/web/templates/user/tab-user-auth.twig | 6 +++--- data/web/user.php | 6 ++++-- 12 files changed, 53 insertions(+), 34 deletions(-) diff --git a/data/web/lang/lang.cs-cz.json b/data/web/lang/lang.cs-cz.json index 5e119fbd..b1b03c42 100644 --- a/data/web/lang/lang.cs-cz.json +++ b/data/web/lang/lang.cs-cz.json @@ -41,6 +41,7 @@ "alias_domain": "Doménový alias", "alias_domain_info": "Platné názvy domén (oddělené čárkami).", "app_name": "Název aplikace", + "app_passwd_protocols": "Povolené protokoly pro hesla aplikací", "app_password": "Přidat heslo aplikace", "automap": "Pokusit se automaticky mapovat složky (\"Sent items\", \"Sent\" => \"Sent\" atd.)", "backup_mx_options": "Možnosti záložního MX", @@ -493,6 +494,7 @@ "optional": "Tento záznam je volitelný." }, "edit": { + "acl": "ACL (Oprávnění)", "active": "Aktivní", "admin": "Upravit administrátora", "advanced_settings": "Pokročilá nastavení", @@ -502,6 +504,7 @@ "allowed_protocols": "Povolené protokoly", "app_name": "Název aplikace", "app_passwd": "Heslo aplikace", + "app_passwd_protocols": "Povolené protokoly pro hesla aplikací", "automap": "Pokusit se automaticky mapovat složky (\"Sent items\", \"Sent\" => \"Sent\" atd.)", "backup_mx_options": "Možnosti záložního MX", "bcc_dest_format": "Cíl kopie musí být jedna platná email adresa. Pokud potřebujete posílat kopie na více adres, vytvořte Alias a použijte jej zde.", @@ -585,6 +588,8 @@ "sieve_desc": "Krátký popis", "sieve_type": "Typ filtru", "skipcrossduplicates": "Přeskočit duplicitní zprávy (\"první přijde, první mele\")", + "sogo_access": "Udělit přímý přihlašovací přístup do služby SOGo", + "sogo_access_info": "Jednotné přihlášení (SSO) z mail UI zůstává funkční. Toto nastavení neovlivňuje přístup ke všem ostatním službám ani neodstraňuje či nemění stávající profil uživatele SOGo.", "sogo_visible": "Alias dostupný v SOGo", "sogo_visible_info": "Tato volba určuje objekty, jež lze zobrazit v SOGo (sdílené nebo nesdílené aliasy, jež ukazuje alespoň na jednu schránku).", "spam_alias": "Vytvořit nebo změnit dočasné aliasy", @@ -1022,13 +1027,16 @@ "alias_valid_until": "Platný do", "aliases_also_send_as": "Smí odesílat také jako uživatel", "aliases_send_as_all": "Nekontrolovat přístup odesílatele pro následující doménu(y) a jejich aliasy domény:", + "allowed_protocols": "Povolené protokoly", "app_hint": "Hesla aplikací jsou alternativní heslo pro přihlášení k IMAP, SMTP, CalDAV, CardDAV a EAS. Uživatelské jméno zůstává stejné.
SOGo však nelze s heslem aplikace použít.", "app_name": "Název aplikace", "app_passwds": "Hesla aplikací", "apple_connection_profile": "Profil připojení Apple", "apple_connection_profile_complete": "Tento profil obsahuje parametry připojení k IMAP, SMTP, CalDAV (kalendáře) a CardDAV (kontakty) pro zařízení Apple.", "apple_connection_profile_mailonly": "Tento profil obsahuje parametry připojení k IMAP a SMTP pro zařízení Apple.", + "apple_connection_profile_with_app_password": "Nové heslo aplikace se vygeneruje a přidá do profilu, takže při nastavování zařízení není třeba zadávat žádné heslo. Soubor nesdílejte, protože poskytuje plný přístup k vaší poštovní schránce.", "change_password": "Změnit heslo", + "change_password_hint_app_passwords": "Váš účet má %d hesel aplikací, která nebudou změněna. Chcete-li je spravovat, přejděte na kartu Hesla aplikací.", "clear_recent_successful_connections": "Vymazat nedávné úspěšné přihlášení", "client_configuration": "Zobrazit průvodce nastavením e-mailových klientů a smartphonů", "create_app_passwd": "Vytvořit heslo aplikace", @@ -1039,6 +1047,7 @@ "delete_ays": "Potvrďte odstranění.", "direct_aliases": "Přímé aliasy", "direct_aliases_desc": "Na přímé aliasy se uplatňuje filtr spamu a nastavení pravidel TLS", + "direct_protocol_access": "Tento uživatel mailové schránky má přímý externí přístup k následujícím protokolům a aplikacím. Toto nastavení je řízeno správcem. Pro udělení přístupu k jednotlivým protokolům a aplikacím lze vytvořit hesla aplikací.
Tlačítko \" Přihlaste se do webmailu\" zajišťuje jednotné přihlášení k SOGo a je vždy k dispozici.", "eas_reset": "Smazat mezipaměť zařízení ActiveSync", "eas_reset_help": "Obnovení mezipaměti zařízení pomůže zpravidla obnovit poškozený profil služby ActiveSync.
Upozornění: Všechna data budou opětovně stažena!", "eas_reset_now": "Smazat", @@ -1132,15 +1141,15 @@ "spamfilter_yellow": "Žlutá: tato zpráva může být spam, bude označena jako spam a přesunuta do složky nevyžádané pošty", "status": "Stav", "sync_jobs": "Synchronizační úlohy", + "syncjob_EXIT_AUTHENTICATION_FAILURE": "Problém s autentifikací", + "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Chybné uživatelské jméno nebo heslo", + "syncjob_EXIT_CONNECTION_FAILURE": "Problém se spojením", + "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Nelze se připojit ke vzdálenému serveru", + "syncjob_EXIT_OVERQUOTA": "Cílová schránka je plná", + "syncjob_EXIT_TLS_FAILURE": "Problém se šifrovaným spojením", + "syncjob_EX_OK": "Úspěch", "syncjob_check_log": "Zkontrolujte záznam", "syncjob_last_run_result": "Výsledek posledního spuštění", - "syncjob_EX_OK": "Úspěch", - "syncjob_EXIT_CONNECTION_FAILURE": "Problém se spojením", - "syncjob_EXIT_TLS_FAILURE": "Problém se šifrovaným spojením", - "syncjob_EXIT_AUTHENTICATION_FAILURE": "Problém s autentifikací", - "syncjob_EXIT_OVERQUOTA": "Cílová schránka je plná", - "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Nelze se připojit ke vzdálenému serveru", - "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Chybné uživatelské jméno nebo heslo", "tag_handling": "Zacházení s označkovanou poštou", "tag_help_example": "Příklad e-mailové adresy se značkou: me+Facebook@example.org", "tag_help_explain": "V podsložce: v doručené poště bude vytvořena nová podsložka pojmenovaná po značce zprávy (\"INBOX / Facebook\").
\r\nV předmětu: název značky bude přidáván k předmětu mailu, například: \"[Facebook] Moje zprávy\".", @@ -1160,6 +1169,7 @@ "week": "týden", "weekly": "Každý týden", "weeks": "týdny", + "with_app_password": "s heslem aplikace", "year": "rok", "years": "let" }, diff --git a/data/web/lang/lang.de-de.json b/data/web/lang/lang.de-de.json index 8ff1cf06..c93da77a 100644 --- a/data/web/lang/lang.de-de.json +++ b/data/web/lang/lang.de-de.json @@ -1110,7 +1110,7 @@ "apple_connection_profile_mailonly": "Dieses Verbindungsprofil beinhaltet IMAP- und SMTP-Konfigurationen für ein Apple-Gerät.", "apple_connection_profile_with_app_password": "Es wird ein neues App-Passwort erzeugt und in das Profil eingefügt, damit bei der Einrichtung kein Passwort eingegeben werden muss. Geben Sie das Profil nicht weiter, da es einen vollständigen Zugriff auf Ihr Postfach ermöglicht.", "change_password": "Passwort ändern", - "change_password_hint_app_passwords": "Ihre Mailbox hat {{number_of_app_passwords}} App-Passwörter, die nicht geändert werden. Um diese zu verwalten, gehen Sie bitte zum App-Passwörter-Tab.", + "change_password_hint_app_passwords": "Ihre Mailbox hat %d App-Passwörter, die nicht geändert werden. Um diese zu verwalten, gehen Sie bitte zum App-Passwörter-Tab.", "clear_recent_successful_connections": "Alle erfolgreichen Verbindungen bereinigen", "client_configuration": "Konfigurationsanleitungen für E-Mail-Programme und Smartphones anzeigen", "create_app_passwd": "Erstelle App-Passwort", diff --git a/data/web/lang/lang.en-gb.json b/data/web/lang/lang.en-gb.json index bfac011e..0037b484 100644 --- a/data/web/lang/lang.en-gb.json +++ b/data/web/lang/lang.en-gb.json @@ -1117,7 +1117,7 @@ "apple_connection_profile_mailonly": "This connection profile includes IMAP and SMTP configuration parameters for an Apple device.", "apple_connection_profile_with_app_password": "A new app password is generated and added to the profile so that no password needs to be entered when setting up your device. Please do not share the file as it grants full access to your mailbox.", "change_password": "Change password", - "change_password_hint_app_passwords": "Your account has {{number_of_app_passwords}} app passwords that will not be changed. To manage these, go to the App passwords tab.", + "change_password_hint_app_passwords": "Your account has %d app passwords that will not be changed. To manage these, go to the App passwords tab.", "clear_recent_successful_connections": "Clear seen successful connections", "client_configuration": "Show configuration guides for email clients and smartphones", "create_app_passwd": "Create app password", diff --git a/data/web/lang/lang.it-it.json b/data/web/lang/lang.it-it.json index d8d6978c..b415982e 100644 --- a/data/web/lang/lang.it-it.json +++ b/data/web/lang/lang.it-it.json @@ -1192,7 +1192,7 @@ "weeks": "settimane", "year": "anno", "years": "anni", - "change_password_hint_app_passwords": "Il tuo account ha {{number_of_app_passwords}} password delle app che non verranno modificate. Per gestirle, vai alla scheda App passwords.", + "change_password_hint_app_passwords": "Il tuo account ha %d password delle app che non verranno modificate. Per gestirle, vai alla scheda App passwords.", "syncjob_check_log": "Controlla i log", "syncjob_last_run_result": "Risultato dell'ultima esecuzione", "open_logs": "Apri i log", diff --git a/data/web/lang/lang.ro-ro.json b/data/web/lang/lang.ro-ro.json index 8e6e1d45..f4b0fdc0 100644 --- a/data/web/lang/lang.ro-ro.json +++ b/data/web/lang/lang.ro-ro.json @@ -1038,7 +1038,7 @@ "apple_connection_profile_mailonly": "Acest profil de conexiune include parametrii de configurare IMAP și SMTP pentru dispozitivele Apple.", "apple_connection_profile_with_app_password": "O nouă parolă pentru aplicație este generată și adăugată la profil, astfel încât să nu fie necesară introducerea unei parole la configurarea dispozitivului. Vă rugăm să nu partajați fișierul, deoarece oferă acces deplin la căsuța dvs. poștală.", "change_password": "Schimbă parola", - "change_password_hint_app_passwords": "Contul dvs. are {{number_of_app_passwords}} parole de aplicație care nu vor fi modificate. Pentru a le gestiona, accesați secțiunea Parole aplicație.", + "change_password_hint_app_passwords": "Contul dvs. are %d parole de aplicație care nu vor fi modificate. Pentru a le gestiona, accesați secțiunea Parole aplicație.", "clear_recent_successful_connections": "Ștergeți conexiunile reușite văzute", "client_configuration": "Afișează ghidurile de configurare pentru clienții de email și smartphone-uri", "create_app_passwd": "Crează parola aplicației", diff --git a/data/web/lang/lang.sk-sk.json b/data/web/lang/lang.sk-sk.json index 2b93650f..406b14f7 100644 --- a/data/web/lang/lang.sk-sk.json +++ b/data/web/lang/lang.sk-sk.json @@ -41,6 +41,7 @@ "alias_domain": "Alias doména", "alias_domain_info": "Len platné mená domén (oddelené čiarkou).", "app_name": "Meno aplikácie", + "app_passwd_protocols": "Povolené protokoly pre heslá aplikácií", "app_password": "Pridať heslo aplikácie", "automap": "Skúsiť automaticky mapovať priečinky (\"Sent items\", \"Sent\" => \"Sent\" atd.)", "backup_mx_options": "Možnosti preposielania", @@ -505,6 +506,7 @@ "allowed_protocols": "Povolené protokoly", "app_name": "Meno aplikácie", "app_passwd": "Heslo aplikácie", + "app_passwd_protocols": "Povolené protokoly pre heslá aplikácií", "automap": "Skúsiť automapovať priečinky (\"Sent items\", \"Sent\" => \"Sent\" atd.)", "backup_mx_options": "Možnosti preposielania", "bcc_dest_format": "Cieľ kópie musí byť jedna platná emailová adresa. Pokiaľ potrebujete posielať kópie na viac adries, vytvorte Alias a použite ho tu.", @@ -589,6 +591,8 @@ "sieve_desc": "Krátky popis", "sieve_type": "Typ filtru", "skipcrossduplicates": "Preskočiť duplikované správy naprieč priečinkami (akceptuje sa prvý nález)", + "sogo_access": "Udeliť priamy prístup k prihláseniu do služby SOGo", + "sogo_access_info": "Jednotné prihlásenie (SSO) z mail UI zostáva funkčné. Toto nastavenie nemá vplyv na prístup k všetkým ostatným službám, ani neodstraňuje alebo nemení existujúci profil používateľa SOGo.", "sogo_visible": "Alias je viditeľný v SOGo", "sogo_visible_info": "Táto voľba ovplyvňuje len objekty, ktoré dokážu byť zobrazené v SOGo (zdieľané alebo nezdieľané alias adresy ukazujúc na minimálne jednu lokálnu mailovú schránku). Ak je skrytý, alias nebude prezentovaný ako voliteľný odosielateľ v SOGo.", "spam_alias": "Vytvoriť alebo zmeniť časovo limitované alias adresy", @@ -1031,13 +1035,16 @@ "alias_valid_until": "Platné do", "aliases_also_send_as": "Môže odosielať ako používateľ", "aliases_send_as_all": "Nekontrolovať prístup odosielateľa pre nasledujúcu doménu/y a jej alias domény", + "allowed_protocols": "Povolené protokoly", "app_hint": "Heslá aplikácií sú alternatívne heslá pre vaše IMAP, SMTP, CalDAV, CardDAV a EAS prihlásenie. Používateľské meno zostáva nezmenené.
SOGo nie je momentálne podporovaný.", "app_name": "Meno aplikácie", "app_passwds": "Heslá aplikácií", "apple_connection_profile": "Apple konfiguračný profil", "apple_connection_profile_complete": "Tento profil zahŕňa IMAP a SMTP parametre, ako aj CalDAV (kalendáre) a CardDAV (kontakty) pre zariadenia Apple.", "apple_connection_profile_mailonly": "Tento profil zahŕňa IMAP a SMTP konfiguračné parametre pre zariadenia Apple.", + "apple_connection_profile_with_app_password": "Nové heslo aplikácie sa vygeneruje a pridá do profilu, takže pri nastavovaní zariadenia nie je potrebné zadávať žiadne heslo. Súbor nezdieľajte, pretože poskytuje úplný prístup k vašej poštovej schránke.", "change_password": "Zmeniť heslo", + "change_password_hint_app_passwords": "Váš účet má %d hesiel aplikácií, ktoré nebudú zmenené. Ak ich chcete spravovať, prejdite na kartu Heslá aplikácií.", "clear_recent_successful_connections": "Vymazať nedávne úspešné prihlásenia", "client_configuration": "Zobraziť konfiguračné pokyny pre emailových klientov a smartfóny", "create_app_passwd": "Vytvoriť heslo aplikácie", @@ -1048,6 +1055,7 @@ "delete_ays": "Potvrďte zmazanie.", "direct_aliases": "Priame alias adresy", "direct_aliases_desc": "Priame aliasy sú ovplyvnené spam filtrom a nastavením TLS pravidiel.", + "direct_protocol_access": "Tento používateľ mailovej schránky má priamy, externý prístup k nasledujúcim protokolom a aplikáciám. Toto nastavenie má pod kontrolou Váš správca. Na udelenie prístupu k jednotlivým protokolom a aplikáciám je možné vytvoriť heslá aplikácií.
Tlačidlo \" Prihláste sa do webmailu\" poskytuje jednotné prihlásenie do systému SOGo a je vždy k dispozícii.", "eas_reset": "Resetovať medzipamäť u ActiveSync zariadení", "eas_reset_help": "Vo väčšine prípadov, reset medzipamäte ActiveSync pomôže opravit nefunkčný profil.
Pozor: Všetky potrebné dáta budú opäť stiahnuté!", "eas_reset_now": "Reset ActiveSync", @@ -1141,15 +1149,15 @@ "spamfilter_yellow": "Žltá: Táto správa môže byť spam, bude označená ako spam a presunutá do priečinku nevyžiadanej pošty", "status": "Status", "sync_jobs": "Synchronizačné úlohy", + "syncjob_EXIT_AUTHENTICATION_FAILURE": "Problém s autentifikáciou", + "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Chybné uživateľské meno alebo heslo", + "syncjob_EXIT_CONNECTION_FAILURE": "Problém so spojením", + "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Nedá sa pripojiť k vzdialenému serveru", + "syncjob_EXIT_OVERQUOTA": "Cieľová schránka je plná", + "syncjob_EXIT_TLS_FAILURE": "Problém so šifrovaným spojením", + "syncjob_EX_OK": "Úspech", "syncjob_check_log": "Skontrolujte záznam", "syncjob_last_run_result": "Výsledok posledného spustenia", - "syncjob_EX_OK": "Úspech", - "syncjob_EXIT_CONNECTION_FAILURE": "Problém so spojením", - "syncjob_EXIT_TLS_FAILURE": "Problém so šifrovaným spojením", - "syncjob_EXIT_AUTHENTICATION_FAILURE": "Problém s autentifikáciou", - "syncjob_EXIT_OVERQUOTA": "Cieľová schránka je plná", - "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Nedá sa pripojiť k vzdialenému serveru", - "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Chybné uživateľské meno alebo heslo", "tag_handling": "Zaobchádzanie s označenou poštou", "tag_help_example": "Príklad tagu e-mailovej adresy: me+Facebook@example.org", "tag_help_explain": "V podadresári: nový podadresár s menom tag-u bude vytvorený nižšie INBOX (\"INBOX/Facebook\").
\r\nIn subject: meno štítka bude pridané pred predmet pošty, napríklad: \"[Facebook] My News\".", @@ -1169,10 +1177,11 @@ "week": "týždeň", "weekly": "Týždenne", "weeks": "týždne", + "with_app_password": "s heslom aplikácie", "year": "rok", "years": "rokov", "apple_connection_profile_with_app_password": "Nové heslo aplikácie sa vygeneruje a pridá do profilu, takže pri nastavovaní zariadenia nie je potrebné zadávať žiadne heslo. Súbor nezdieľajte, pretože poskytuje úplný prístup k vašej mail schránke.", - "change_password_hint_app_passwords": "Vaše konto má {{number_of_app_passwords}} hesiel aplikácií, ktoré nebudú zmenené. Ak ich chcete spravovať, prejdite na kartu Heslá aplikácií.", + "change_password_hint_app_passwords": "Vaše konto má %d hesiel aplikácií, ktoré nebudú zmenené. Ak ich chcete spravovať, prejdite na kartu Heslá aplikácií.", "direct_protocol_access": "Tento používateľ mailovej schránky má priamy, externý prístup k nasledujúcim protokolom a aplikáciám. Toto nastavenie kontroluje administrátor. Na udelenie prístupu k jednotlivým protokolom a aplikáciám je možné vytvoriť heslá aplikácií.
Tlačidlo \"Prihlásenie do webmailu\" poskytuje jednotné prihlásenie do systému SOGo a je vždy k dispozícii." }, "warning": { diff --git a/data/web/lang/lang.uk-ua.json b/data/web/lang/lang.uk-ua.json index 0a5c71b8..e7a8a415 100644 --- a/data/web/lang/lang.uk-ua.json +++ b/data/web/lang/lang.uk-ua.json @@ -1037,7 +1037,7 @@ "apple_connection_profile_complete": "Цей профіль включає налаштування IMAP та SMTP, а також CalDAV (календарів) та CardDAV (контактів) для пристрою Apple.", "apple_connection_profile_mailonly": "Цей профіль включає лише налаштування IMAP та SMTP для пристрою Apple.", "change_password": "Змінити пароль", - "change_password_hint_app_passwords": "Ваш обліковий запис містить {{number_of_app_passwords}} паролів додатків, які не змінюватимуться. Щоб керувати ними, перейдіть на вкладку \"Паролі додатків\".", + "change_password_hint_app_passwords": "Ваш обліковий запис містить %d паролів додатків, які не змінюватимуться. Щоб керувати ними, перейдіть на вкладку \"Паролі додатків\".", "clear_recent_successful_connections": "Очистити історію успішних підключень", "create_app_passwd": "Створити новий пароль", "create_syncjob": "Створити нове завдання синхронізації", diff --git a/data/web/lang/lang.zh-cn.json b/data/web/lang/lang.zh-cn.json index e57ea2a7..e0712958 100644 --- a/data/web/lang/lang.zh-cn.json +++ b/data/web/lang/lang.zh-cn.json @@ -1042,7 +1042,7 @@ "apple_connection_profile_mailonly": "此连接描述文件包括提供给 Apple 设备的 IMAP 和 SMTP 配置参数。", "apple_connection_profile_with_app_password": "一个新的应用程序密码将会被生成并添加到该配置文件中,因此在设备设置时不需要输入密码。请不要随意分享该文件,因为它包含你的邮箱的完全访问权限。", "change_password": "更改密码", - "change_password_hint_app_passwords": "你的账户有 {{number_of_app_passwords}} 个应用密码,这些密码将不会被更改。如果需要管理这些密码,请访问应用密码标签。", + "change_password_hint_app_passwords": "你的账户有 %d 个应用密码,这些密码将不会被更改。如果需要管理这些密码,请访问应用密码标签。", "clear_recent_successful_connections": "清除成功匹配的连接", "client_configuration": "显示邮箱客户端和智能手机的配置指南", "create_app_passwd": "添加应用密码", diff --git a/data/web/lang/lang.zh-tw.json b/data/web/lang/lang.zh-tw.json index 916188db..eca24482 100644 --- a/data/web/lang/lang.zh-tw.json +++ b/data/web/lang/lang.zh-tw.json @@ -1036,7 +1036,7 @@ "apple_connection_profile_mailonly": "此連接描述檔案包括提供給 Apple 裝置的 IMAP 和 SMTP 組態參數。", "apple_connection_profile_with_app_password": "應用程式密碼已產生並加入到連接描述檔案中,因此裝置在設定時不需要輸入密碼。請勿分享這個檔案,因為它擁有存取信箱的所有權限。", "change_password": "更改密碼", - "change_password_hint_app_passwords": "你的帳號有 {{number_of_app_passwords}} 個應用程式密碼不會被更動。要管理這些密碼,請至應用程式密碼分頁。", + "change_password_hint_app_passwords": "你的帳號有 %d 個應用程式密碼不會被更動。要管理這些密碼,請至應用程式密碼分頁。", "clear_recent_successful_connections": "中斷成功的連線", "client_configuration": "顯示電子信箱程式和智慧型手機的設定指南", "create_app_passwd": "新增應用程式密碼", diff --git a/data/web/templates/modals/user.twig b/data/web/templates/modals/user.twig index 8c96397f..20846a6f 100644 --- a/data/web/templates/modals/user.twig +++ b/data/web/templates/modals/user.twig @@ -285,15 +285,13 @@
+ {% if number_of_app_passwords > 0 %} +
+ {{ lang.user.change_password_hint_app_passwords|format(number_of_app_passwords) }} +
+ {% endif %}
- {% if number_of_app_passwords > 0 %} -
-
- {{ lang.user.change_password_hint_app_passwords | replace({'{{number_of_app_passwords}}': number_of_app_passwords}) }} -
-
- {% endif %}
diff --git a/data/web/templates/user/tab-user-auth.twig b/data/web/templates/user/tab-user-auth.twig index 646c7910..a1e2e2c2 100644 --- a/data/web/templates/user/tab-user-auth.twig +++ b/data/web/templates/user/tab-user-auth.twig @@ -129,13 +129,13 @@
-
{{ lang.user.apple_connection_profile }}
{{ lang.user.with_app_password }}:
+
{{ lang.user.apple_connection_profile }}
{{ lang.user.with_app_password }}:

{{ lang.user.email }} IMAP, SMTP

-

{{ lang.user.apple_connection_profile_mailonly }} {{ lang.user.apple_connection_profile_with_app_password }}

+

{{ lang.user.apple_connection_profile_mailonly }}
{{ lang.user.apple_connection_profile_with_app_password }}

{% if not skip_sogo %}

{{ lang.user.email_and_dav }} IMAP, SMTP, Cal/CardDAV

-

{{ lang.user.apple_connection_profile_complete }} {{ lang.user.apple_connection_profile_with_app_password }}

+

{{ lang.user.apple_connection_profile_complete }}
{{ lang.user.apple_connection_profile_with_app_password }}

{% endif %}
diff --git a/data/web/user.php b/data/web/user.php index 5fddff6e..19aafddd 100644 --- a/data/web/user.php +++ b/data/web/user.php @@ -62,16 +62,18 @@ elseif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == ' $user_domains = array_merge($user_domains, $user_alias_domains); } - $template = 'user.twig'; + // get number of app passwords $number_of_app_passwords = 0; foreach (app_passwd("get") as $app_password) { $app_password = app_passwd("details", $app_password['id']); if ($app_password['active']) { - ++$number_of_app_passwords; + $number_of_app_passwords++; } } + + $template = 'user.twig'; $template_data = [ 'acl' => $_SESSION['acl'], 'acl_json' => json_encode($_SESSION['acl']), From f295b8cd91f9d691ad93c53191e6319282dcae55 Mon Sep 17 00:00:00 2001 From: FreddleSpl0it Date: Mon, 8 May 2023 12:55:38 +0200 Subject: [PATCH 02/72] [Rspamd] add domain wide footer --- data/conf/rspamd/lua/rspamd.local.lua | 120 +++++++++++++++++++++++++ data/web/edit.php | 2 + data/web/inc/functions.mailbox.inc.php | 73 +++++++++++++++ data/web/json_api.php | 27 +++--- data/web/lang/lang.de-de.json | 5 ++ data/web/lang/lang.en-gb.json | 5 ++ data/web/templates/edit/domain.twig | 28 ++++++ 7 files changed, 248 insertions(+), 12 deletions(-) diff --git a/data/conf/rspamd/lua/rspamd.local.lua b/data/conf/rspamd/lua/rspamd.local.lua index 6318bd23..3d471600 100644 --- a/data/conf/rspamd/lua/rspamd.local.lua +++ b/data/conf/rspamd/lua/rspamd.local.lua @@ -499,3 +499,123 @@ rspamd_config:register_symbol({ end end }) + +rspamd_config:register_symbol({ + name = 'MOO_FOOTER', + type = 'prefilter', + callback = function(task) + local lua_mime = require "lua_mime" + local rspamd_logger = require "rspamd_logger" + local rspamd_redis = require "rspamd_redis" + local ucl = require "ucl" + local redis_params = rspamd_parse_redis_server('footer') + local envfrom = task:get_from(1) + local uname = task:get_user() + if not envfrom or not uname then + return false + end + local uname = uname:lower() + local env_from_domain = envfrom[1].domain:lower() -- get smtp from domain in lower case + + local function newline(task) + local t = task:get_newlines_type() + + if t == 'cr' then + return '\r' + elseif t == 'lf' then + return '\n' + end + + return '\r\n' + end + local function redis_cb_footer(err, data) + if err or type(data) ~= 'string' then + rspamd_logger.infox(rspamd_config, "domain wide footer request for user %s returned invalid or empty data (\"%s\") or error (\"%s\")", uname, data, err) + else + -- parse json string + local parser = ucl.parser() + local res,err = parser:parse_string(data) + if not res then + rspamd_logger.infox(rspamd_config, "parsing domain wide footer for user %s returned invalid or empty data (\"%s\") or error (\"%s\")", uname, data, err) + else + local footer = parser:get_object() + + if footer and type(footer) == "table" and (footer.html or footer.plain) then + rspamd_logger.infox(rspamd_config, "found domain wide footer for user %s: html=%s, plain=%s", uname, footer.html, footer.plain) + + -- add footer + local out = {} + local rewrite = lua_mime.add_text_footer(task, footer.html, footer.plain) or {} + + local seen_cte + local newline_s = newline(task) + + local function rewrite_ct_cb(name, hdr) + if rewrite.need_rewrite_ct then + if name:lower() == 'content-type' then + local nct = string.format('%s: %s/%s; charset=utf-8', + 'Content-Type', rewrite.new_ct.type, rewrite.new_ct.subtype) + out[#out + 1] = nct + return + elseif name:lower() == 'content-transfer-encoding' then + out[#out + 1] = string.format('%s: %s', + 'Content-Transfer-Encoding', 'quoted-printable') + seen_cte = true + return + end + end + out[#out + 1] = hdr.raw:gsub('\r?\n?$', '') + end + + task:headers_foreach(rewrite_ct_cb, {full = true}) + + if not seen_cte and rewrite.need_rewrite_ct then + out[#out + 1] = string.format('%s: %s', 'Content-Transfer-Encoding', 'quoted-printable') + end + + -- End of headers + out[#out + 1] = newline_s + + if rewrite.out then + for _,o in ipairs(rewrite.out) do + out[#out + 1] = o + end + else + out[#out + 1] = task:get_rawbody() + end + local out_parts = {} + for _,o in ipairs(out) do + if type(o) ~= 'table' then + out_parts[#out_parts + 1] = o + out_parts[#out_parts + 1] = newline_s + else + out_parts[#out_parts + 1] = o[1] + if o[2] then + out_parts[#out_parts + 1] = newline_s + end + end + end + task:set_message(out_parts) + else + rspamd_logger.infox(rspamd_config, "domain wide footer request for user %s returned invalid or empty data (\"%s\")", uname, data) + end + end + end + end + + local redis_ret_footer = rspamd_redis_make_request(task, + redis_params, -- connect params + env_from_domain, -- hash key + false, -- is write + redis_cb_footer, --callback + 'HGET', -- command + {"DOMAIN_WIDE_FOOTER", env_from_domain} -- arguments + ) + if not redis_ret_footer then + rspamd_logger.infox(rspamd_config, "cannot make request to load footer for domain") + end + + return true + end, + priority = 1 +}) diff --git a/data/web/edit.php b/data/web/edit.php index 09db796d..7655b3c3 100644 --- a/data/web/edit.php +++ b/data/web/edit.php @@ -47,6 +47,7 @@ if (isset($_SESSION['mailcow_cc_role'])) { $quota_notification_bcc = quota_notification_bcc('get', $domain); $rl = ratelimit('get', 'domain', $domain); $rlyhosts = relayhost('get'); + $domain_footer = mailbox('get', 'domain_wide_footer', $domain); $template = 'edit/domain.twig'; $template_data = [ 'acl' => $_SESSION['acl'], @@ -56,6 +57,7 @@ if (isset($_SESSION['mailcow_cc_role'])) { 'rlyhosts' => $rlyhosts, 'dkim' => dkim('details', $domain), 'domain_details' => $result, + 'domain_footer' => $domain_footer, ]; } } diff --git a/data/web/inc/functions.mailbox.inc.php b/data/web/inc/functions.mailbox.inc.php index 4e036b99..dace3e8a 100644 --- a/data/web/inc/functions.mailbox.inc.php +++ b/data/web/inc/functions.mailbox.inc.php @@ -3320,6 +3320,45 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { ); } break; + case 'domain_wide_footer': + $domain = idn_to_ascii(strtolower(trim($_data['domain'])), 0, INTL_IDNA_VARIANT_UTS46); + if (!is_valid_domain_name($domain)) { + $_SESSION['return'][] = array( + 'type' => 'danger', + 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), + 'msg' => 'domain_invalid' + ); + return false; + } + if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) { + $_SESSION['return'][] = array( + 'type' => 'danger', + 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), + 'msg' => 'access_denied' + ); + return false; + } + + $footers = array(); + $footers['html'] = isset($_data['footer_html']) ? $_data['footer_html'] : ''; + $footers['plain'] = isset($_data['footer_plain']) ? $_data['footer_plain'] : ''; + try { + $redis->hSet('DOMAIN_WIDE_FOOTER', $domain, json_encode($footers)); + } + catch (RedisException $e) { + $_SESSION['return'][] = array( + 'type' => 'danger', + 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), + 'msg' => array('redis_error', $e) + ); + return false; + } + $_SESSION['return'][] = array( + 'type' => 'success', + 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), + 'msg' => array('domain_footer_modified', htmlspecialchars($domain)) + ); + break; } break; case 'get': @@ -4399,6 +4438,40 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { } return $resourcedata; break; + case 'domain_wide_footer': + $domain = idn_to_ascii(strtolower(trim($_data)), 0, INTL_IDNA_VARIANT_UTS46); + if (!is_valid_domain_name($domain)) { + $_SESSION['return'][] = array( + 'type' => 'danger', + 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), + 'msg' => 'domain_invalid' + ); + return false; + } + if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) { + $_SESSION['return'][] = array( + 'type' => 'danger', + 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), + 'msg' => 'access_denied' + ); + return false; + } + + try { + $footers = $redis->hGet('DOMAIN_WIDE_FOOTER', $domain); + $footers = json_decode($footers, true); + } + catch (RedisException $e) { + $_SESSION['return'][] = array( + 'type' => 'danger', + 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), + 'msg' => array('redis_error', $e) + ); + return false; + } + + return $footers; + break; } break; case 'delete': diff --git a/data/web/json_api.php b/data/web/json_api.php index ec028fe4..e21219c5 100644 --- a/data/web/json_api.php +++ b/data/web/json_api.php @@ -288,18 +288,18 @@ if (isset($_GET['query'])) { case "domain-admin": process_add_return(domain_admin('add', $attr)); break; - case "sso": - switch ($object) { - case "domain-admin": - $data = domain_admin_sso('issue', $attr); - if($data) { - echo json_encode($data); - exit(0); - } - process_add_return($data); - break; - } - break; + case "sso": + switch ($object) { + case "domain-admin": + $data = domain_admin_sso('issue', $attr); + if($data) { + echo json_encode($data); + exit(0); + } + process_add_return($data); + break; + } + break; case "admin": process_add_return(admin('add', $attr)); break; @@ -1867,6 +1867,9 @@ if (isset($_GET['query'])) { case "quota_notification_bcc": process_edit_return(quota_notification_bcc('edit', $attr)); break; + case "domain-wide-footer": + process_edit_return(mailbox('edit', 'domain_wide_footer', $attr)); + break; case "mailq": process_edit_return(mailq('edit', array_merge(array('qid' => $items), $attr))); break; diff --git a/data/web/lang/lang.de-de.json b/data/web/lang/lang.de-de.json index 6b280bbb..f1378500 100644 --- a/data/web/lang/lang.de-de.json +++ b/data/web/lang/lang.de-de.json @@ -576,6 +576,10 @@ "disable_login": "Login verbieten (Mails werden weiterhin angenommen)", "domain": "Domain bearbeiten", "domain_admin": "Domain-Administrator bearbeiten", + "domain_footer": "Domain wide footer", + "domain_footer_html": "HTML footer", + "domain_footer_info": "Domain wide footer werden allen E-Mails hinzugefügt, die von der angegebenen Domain gesendet werden.", + "domain_footer_plain": "PLAIN footer", "domain_quota": "Domain Speicherplatz gesamt (MiB)", "domains": "Domains", "dont_check_sender_acl": "Absender für Domain %s u. Alias-Domain nicht prüfen", @@ -1011,6 +1015,7 @@ "domain_admin_added": "Domain-Administrator %s wurde angelegt", "domain_admin_modified": "Änderungen an Domain-Administrator %s wurden gespeichert", "domain_admin_removed": "Domain-Administrator %s wurde entfernt", + "domain_footer_modified": "Änderungen an Domain Footer %s wurden gespeichert", "domain_modified": "Änderungen an Domain %s wurden gespeichert", "domain_removed": "Domain %s wurde entfernt", "dovecot_restart_success": "Dovecot wurde erfolgreich neu gestartet", diff --git a/data/web/lang/lang.en-gb.json b/data/web/lang/lang.en-gb.json index e53fe896..30be210c 100644 --- a/data/web/lang/lang.en-gb.json +++ b/data/web/lang/lang.en-gb.json @@ -576,6 +576,10 @@ "disable_login": "Disallow login (incoming mail is still accepted)", "domain": "Edit domain", "domain_admin": "Edit domain administrator", + "domain_footer": "Domain wide footer", + "domain_footer_html": "HTML footer", + "domain_footer_info": "Domain wide footers will be added to all emails sent from the specified domain.", + "domain_footer_plain": "PLAIN footer", "domain_quota": "Domain quota", "domains": "Domains", "dont_check_sender_acl": "Disable sender check for domain %s (+ alias domains)", @@ -1018,6 +1022,7 @@ "domain_admin_added": "Domain administrator %s has been added", "domain_admin_modified": "Changes to domain administrator %s have been saved", "domain_admin_removed": "Domain administrator %s has been removed", + "domain_footer_modified": "Changes to domain footer %s have been saved", "domain_modified": "Changes to domain %s have been saved", "domain_removed": "Domain %s has been removed", "dovecot_restart_success": "Dovecot was restarted successfully", diff --git a/data/web/templates/edit/domain.twig b/data/web/templates/edit/domain.twig index 0c424887..16c1a966 100644 --- a/data/web/templates/edit/domain.twig +++ b/data/web/templates/edit/domain.twig @@ -7,6 +7,7 @@ +
@@ -229,6 +230,33 @@
+
+
+
+

{{ lang.edit.domain_footer }}

+

{{ lang.edit.domain_footer_info|raw }}

+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+
+
{% else %} {{ parent() }} From d8fd023cdbe35c72e5201aeb5d3e0d2acb312e13 Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 24 Jul 2023 17:39:41 +0200 Subject: [PATCH 03/72] Update rebuild_backup_image.yml --- .github/workflows/rebuild_backup_image.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/rebuild_backup_image.yml b/.github/workflows/rebuild_backup_image.yml index 21c218a8..226dbdfc 100644 --- a/.github/workflows/rebuild_backup_image.yml +++ b/.github/workflows/rebuild_backup_image.yml @@ -29,6 +29,7 @@ jobs: uses: docker/build-push-action@v4 with: context: . + platforms: linux/amd64,linux/arm64 file: data/Dockerfiles/backup/Dockerfile push: true tags: mailcow/backup:latest From 5bf29e6ac1ecf365828ef8e7bf13833b0ec4fc63 Mon Sep 17 00:00:00 2001 From: Habetdin <15926758+Habetdin@users.noreply.github.com> Date: Sat, 5 Aug 2023 00:25:19 +0300 Subject: [PATCH 04/72] [Postfix] fix extra.cf updating --- data/Dockerfiles/postfix/postfix.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/Dockerfiles/postfix/postfix.sh b/data/Dockerfiles/postfix/postfix.sh index f981bff6..b3098d3a 100755 --- a/data/Dockerfiles/postfix/postfix.sh +++ b/data/Dockerfiles/postfix/postfix.sh @@ -486,7 +486,7 @@ fi # Append user overrides echo -e "\n# User Overrides" >> /opt/postfix/conf/main.cf touch /opt/postfix/conf/extra.cf -sed -i '/myhostname/d' /opt/postfix/conf/extra.cf +sed -i '/\$myhostname/! { /myhostname/d }' /opt/postfix/conf/extra.cf echo -e "myhostname = ${MAILCOW_HOSTNAME}\n$(cat /opt/postfix/conf/extra.cf)" > /opt/postfix/conf/extra.cf cat /opt/postfix/conf/extra.cf >> /opt/postfix/conf/main.cf From 533bd36572dc0e6476425717499f1c2248160ec4 Mon Sep 17 00:00:00 2001 From: Michael Stilkerich Date: Sat, 5 Aug 2023 20:58:34 +0200 Subject: [PATCH 05/72] Fix CPU load of dockerapi container Previously the handle_pubsub_messages() loop was executing every 10ms when there was no message available. Now reading from the redis network socket will block (the coroutine) for up to 30s before it returns when no message is available. Using channel.listen() would be even better, but it lacks the ignore_subscribe_messages option and I could not figure out how to filter the returned messages. --- data/Dockerfiles/dockerapi/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/Dockerfiles/dockerapi/main.py b/data/Dockerfiles/dockerapi/main.py index 59d1a8ad..453a059d 100644 --- a/data/Dockerfiles/dockerapi/main.py +++ b/data/Dockerfiles/dockerapi/main.py @@ -198,8 +198,8 @@ async def handle_pubsub_messages(channel: aioredis.client.PubSub): while True: try: - async with async_timeout.timeout(1): - message = await channel.get_message(ignore_subscribe_messages=True) + async with async_timeout.timeout(60): + message = await channel.get_message(ignore_subscribe_messages=True, timeout=30) if message is not None: # Parse message data_json = json.loads(message['data'].decode('utf-8')) From 340ef866d20439cef748dea95fb59b3a7f409418 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 6 Aug 2023 16:39:26 +0200 Subject: [PATCH 06/72] Update thollander/actions-comment-pull-request action to v2.4.1 (#5377) Signed-off-by: milkmaker Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/check_prs_if_on_staging.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check_prs_if_on_staging.yml b/.github/workflows/check_prs_if_on_staging.yml index bb0d0938..93cd5e32 100644 --- a/.github/workflows/check_prs_if_on_staging.yml +++ b/.github/workflows/check_prs_if_on_staging.yml @@ -10,7 +10,7 @@ jobs: if: github.event.pull_request.base.ref != 'staging' #check if the target branch is not staging steps: - name: Send message - uses: thollander/actions-comment-pull-request@v2.4.0 + uses: thollander/actions-comment-pull-request@v2.4.1 with: GITHUB_TOKEN: ${{ secrets.CHECKIFPRISSTAGING_ACTION_PAT }} message: | From e468c59dfcdba37e57bec54bd5789eb709006da8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 06:46:07 +0200 Subject: [PATCH 07/72] Update thollander/actions-comment-pull-request action to v2.4.2 (#5379) Signed-off-by: milkmaker Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/check_prs_if_on_staging.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check_prs_if_on_staging.yml b/.github/workflows/check_prs_if_on_staging.yml index 93cd5e32..c28454f6 100644 --- a/.github/workflows/check_prs_if_on_staging.yml +++ b/.github/workflows/check_prs_if_on_staging.yml @@ -10,7 +10,7 @@ jobs: if: github.event.pull_request.base.ref != 'staging' #check if the target branch is not staging steps: - name: Send message - uses: thollander/actions-comment-pull-request@v2.4.1 + uses: thollander/actions-comment-pull-request@v2.4.2 with: GITHUB_TOKEN: ${{ secrets.CHECKIFPRISSTAGING_ACTION_PAT }} message: | From 025fd0331038422327a29e699ed9252db2187eb4 Mon Sep 17 00:00:00 2001 From: FreddleSpl0it Date: Mon, 7 Aug 2023 14:26:30 +0200 Subject: [PATCH 08/72] [Rspamd] remove X-Moo-Tag header if unnecessary --- data/conf/rspamd/lua/rspamd.local.lua | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/data/conf/rspamd/lua/rspamd.local.lua b/data/conf/rspamd/lua/rspamd.local.lua index 5b08dc93..b29a2446 100644 --- a/data/conf/rspamd/lua/rspamd.local.lua +++ b/data/conf/rspamd/lua/rspamd.local.lua @@ -221,6 +221,16 @@ rspamd_config:register_symbol({ local tagged_rcpt = task:get_symbol("TAGGED_RCPT") local mailcow_domain = task:get_symbol("RCPT_MAILCOW_DOMAIN") + local function remove_moo_tag() + local moo_tag_header = task:get_header('X-Moo-Tag', false) + if moo_tag_header then + task:set_milter_reply({ + remove_headers = {['X-Moo-Tag'] = 0}, + }) + end + return true + end + if tagged_rcpt and tagged_rcpt[1].options and mailcow_domain then local tag = tagged_rcpt[1].options[1] rspamd_logger.infox("found tag: %s", tag) @@ -229,6 +239,7 @@ rspamd_config:register_symbol({ if action ~= 'no action' and action ~= 'greylist' then rspamd_logger.infox("skipping tag handler for action: %s", action) + remove_moo_tag() return true end @@ -243,6 +254,7 @@ rspamd_config:register_symbol({ local function tag_callback_subfolder(err, data) if err or type(data) ~= 'string' then rspamd_logger.infox(rspamd_config, "subfolder tag handler for rcpt %s returned invalid or empty data (\"%s\") or error (\"%s\")", body, data, err) + remove_moo_tag() else rspamd_logger.infox("Add X-Moo-Tag header") task:set_milter_reply({ @@ -261,6 +273,7 @@ rspamd_config:register_symbol({ ) if not redis_ret_subfolder then rspamd_logger.infox(rspamd_config, "cannot make request to load tag handler for rcpt") + remove_moo_tag() end else @@ -268,7 +281,10 @@ rspamd_config:register_symbol({ local sbj = task:get_header('Subject') new_sbj = '=?UTF-8?B?' .. tostring(util.encode_base64('[' .. tag .. '] ' .. sbj)) .. '?=' task:set_milter_reply({ - remove_headers = {['Subject'] = 1}, + remove_headers = { + ['Subject'] = 1, + ['X-Moo-Tag'] = 0 + }, add_headers = {['Subject'] = new_sbj} }) end @@ -284,6 +300,7 @@ rspamd_config:register_symbol({ ) if not redis_ret_subject then rspamd_logger.infox(rspamd_config, "cannot make request to load tag handler for rcpt") + remove_moo_tag() end end @@ -295,6 +312,7 @@ rspamd_config:register_symbol({ if #rcpt_split == 2 then if rcpt_split[1] == 'postmaster' then rspamd_logger.infox(rspamd_config, "not expanding postmaster alias") + remove_moo_tag() else rspamd_http.request({ task=task, @@ -307,7 +325,8 @@ rspamd_config:register_symbol({ end end end - + else + remove_moo_tag() end end, priority = 19 From 1db899027197cec65ce98b34b2a31cd1fb5679da Mon Sep 17 00:00:00 2001 From: DerLinkman Date: Thu, 10 Aug 2023 13:51:40 +0200 Subject: [PATCH 09/72] Fixed Branch checkout in generate_config.sh --- generate_config.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generate_config.sh b/generate_config.sh index d09dae9e..12749605 100755 --- a/generate_config.sh +++ b/generate_config.sh @@ -189,7 +189,7 @@ if [[ ${SKIP_BRANCH} != y ]]; then done git fetch --all - git checkout -f $git_branch + git checkout -f $MAILCOW_BRANCH elif [[ ${SKIP_BRANCH} == y ]]; then echo -e "\033[33mEnabled Dev Mode.\033[0m" From 930473a980051ef1931ae5c4f57bedb24d56745e Mon Sep 17 00:00:00 2001 From: Michael Stilkerich Date: Sat, 12 Aug 2023 07:20:56 +0200 Subject: [PATCH 10/72] Set asyncio timeout to 0 for yielding --- data/Dockerfiles/dockerapi/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/Dockerfiles/dockerapi/main.py b/data/Dockerfiles/dockerapi/main.py index 453a059d..f9f02b63 100644 --- a/data/Dockerfiles/dockerapi/main.py +++ b/data/Dockerfiles/dockerapi/main.py @@ -244,7 +244,7 @@ async def handle_pubsub_messages(channel: aioredis.client.PubSub): else: dockerapi.logger.error("Unknwon PubSub recieved - %s" % json.dumps(data_json)) - await asyncio.sleep(0.01) + await asyncio.sleep(0.0) except asyncio.TimeoutError: pass From 1a2f145b288583fd0e4caf517c4e0c9960b52a03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20Fr=C3=B6hle?= Date: Sat, 12 Aug 2023 16:45:09 +0200 Subject: [PATCH 11/72] Update site.conf: server_names_hash_bucket_size 128 --- data/conf/nginx/site.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data/conf/nginx/site.conf b/data/conf/nginx/site.conf index 1b46d2b9..fb40de87 100644 --- a/data/conf/nginx/site.conf +++ b/data/conf/nginx/site.conf @@ -1,5 +1,6 @@ proxy_cache_path /tmp levels=1:2 keys_zone=sogo:10m inactive=24h max_size=1g; -server_names_hash_bucket_size 64; +server_names_hash_max_size 512; +server_names_hash_bucket_size 128; map $http_x_forwarded_proto $client_req_scheme { default $scheme; From 095d59c01b8e0e8c52777a978f618ec511e5128a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20Fr=C3=B6hle?= Date: Sat, 12 Aug 2023 16:46:02 +0200 Subject: [PATCH 12/72] Update listen_ssl.template deprecated http2 on listener --- data/conf/nginx/templates/listen_ssl.template | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/data/conf/nginx/templates/listen_ssl.template b/data/conf/nginx/templates/listen_ssl.template index 93ec80c6..40c402d0 100644 --- a/data/conf/nginx/templates/listen_ssl.template +++ b/data/conf/nginx/templates/listen_ssl.template @@ -1,2 +1,3 @@ -listen ${HTTPS_PORT} ssl http2; -listen [::]:${HTTPS_PORT} ssl http2; +listen ${HTTPS_PORT} ssl; +listen [::]:${HTTPS_PORT} ssl; +http2 on; From 2c52753adb28517d54e579fc1973ccacc5b4d5fb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Aug 2023 15:21:07 +0000 Subject: [PATCH 13/72] Update dependency nextcloud/server to v27.0.2 Signed-off-by: milkmaker --- helper-scripts/nextcloud.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helper-scripts/nextcloud.sh b/helper-scripts/nextcloud.sh index 1b08a554..6d7c7953 100755 --- a/helper-scripts/nextcloud.sh +++ b/helper-scripts/nextcloud.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash # renovate: datasource=github-releases depName=nextcloud/server versioning=semver extractVersion=^v(?.*)$ -NEXTCLOUD_VERSION=27.0.1 +NEXTCLOUD_VERSION=27.0.2 echo -ne "Checking prerequisites..." sleep 1 From 30e241babe1c0d28bc27ddb9043b545f2782b36f Mon Sep 17 00:00:00 2001 From: milkmaker Date: Sat, 19 Aug 2023 21:47:23 +0200 Subject: [PATCH 14/72] Translations update from Weblate (#5390) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Web] Updated lang.de-de.json Co-authored-by: Peter Co-authored-by: milkmaker * [Web] Updated lang.es-es.json Co-authored-by: Marco Truffat Co-authored-by: milkmaker * [Web] Updated lang.hu-hu.json [Web] Updated lang.hu-hu.json [Web] Updated lang.hu-hu.json Co-authored-by: 0xAndrewBlack <0xandrewblack@gmail.com> Co-authored-by: Kántor Attila Co-authored-by: Mihály Szilágyi Co-authored-by: milkmaker * [Web] Updated lang.ro-ro.json Co-authored-by: Vlad M Co-authored-by: milkmaker * [Web] Updated lang.ru-ru.json Co-authored-by: Oleksii Kruhlenko Co-authored-by: milkmaker * [Web] Updated lang.gr-gr.json [Web] Added lang.gr-gr.json Co-authored-by: Nik Beaver Co-authored-by: Peter Co-authored-by: milkmaker * [Web] Updated lang.fr-fr.json Co-authored-by: Adrien Kara Co-authored-by: milkmaker * [Web] Updated lang.en-gb.json Co-authored-by: Philipp E Co-authored-by: milkmaker * [Web] Updated lang.ca-es.json Co-authored-by: Marco Truffat Co-authored-by: milkmaker * [Web] Updated lang.it-it.json Co-authored-by: Michele Caputo Co-authored-by: milkmaker * [Web] Updated lang.uk-ua.json Co-authored-by: Oleksii Kruhlenko Co-authored-by: milkmaker * [Web] Updated lang.si-si.json [Web] Updated lang.si-si.json [Web] Updated lang.si-si.json [Web] Added lang.si-si.json Co-authored-by: Peter Co-authored-by: gomiunik Co-authored-by: milkmaker * Add Greek + Slovenian --------- Co-authored-by: Peter Co-authored-by: Marco Truffat Co-authored-by: 0xAndrewBlack <0xandrewblack@gmail.com> Co-authored-by: Kántor Attila Co-authored-by: Mihály Szilágyi Co-authored-by: Vlad M Co-authored-by: Oleksii Kruhlenko Co-authored-by: Nik Beaver Co-authored-by: Adrien Kara Co-authored-by: Philipp E Co-authored-by: Michele Caputo Co-authored-by: gomiunik --- data/web/inc/vars.inc.php | 2 + data/web/lang/lang.ca-es.json | 24 ++- data/web/lang/lang.de-de.json | 6 +- data/web/lang/lang.en-gb.json | 2 +- data/web/lang/lang.es-es.json | 16 +- data/web/lang/lang.fr-fr.json | 3 +- data/web/lang/lang.gr-gr.json | 20 ++ data/web/lang/lang.hu-hu.json | 17 +- data/web/lang/lang.it-it.json | 7 +- data/web/lang/lang.ro-ro.json | 30 ++- data/web/lang/lang.ru-ru.json | 32 ++- data/web/lang/lang.si-si.json | 396 ++++++++++++++++++++++++++++++++++ data/web/lang/lang.uk-ua.json | 105 ++++++++- 13 files changed, 625 insertions(+), 35 deletions(-) create mode 100644 data/web/lang/lang.gr-gr.json create mode 100644 data/web/lang/lang.si-si.json diff --git a/data/web/inc/vars.inc.php b/data/web/inc/vars.inc.php index 5e6d72e7..3f726934 100644 --- a/data/web/inc/vars.inc.php +++ b/data/web/inc/vars.inc.php @@ -90,6 +90,7 @@ $AVAILABLE_LANGUAGES = array( 'es-es' => 'Español (Spanish)', 'fi-fi' => 'Suomi (Finish)', 'fr-fr' => 'Français (French)', + 'gr-gr' => 'Ελληνικά (Greek)', 'hu-hu' => 'Magyar (Hungarian)', 'it-it' => 'Italiano (Italian)', 'ko-kr' => '한국어 (Korean)', @@ -99,6 +100,7 @@ $AVAILABLE_LANGUAGES = array( 'pt-pt' => 'Português (Portuguese)', 'ro-ro' => 'Română (Romanian)', 'ru-ru' => 'Pусский (Russian)', + 'si-si' => 'Slovenščina (Slovenian)', 'sk-sk' => 'Slovenčina (Slovak)', 'sv-se' => 'Svenska (Swedish)', 'tr-tr' => 'Türkçe (Turkish)', diff --git a/data/web/lang/lang.ca-es.json b/data/web/lang/lang.ca-es.json index 26a30afd..877b46cd 100644 --- a/data/web/lang/lang.ca-es.json +++ b/data/web/lang/lang.ca-es.json @@ -3,7 +3,23 @@ "bcc_maps": "BCC maps", "filters": "Filtres", "recipient_maps": "Recipient maps", - "syncjobs": "Feines de sincronització" + "syncjobs": "Feines de sincronització", + "quarantine_category": "Canvia la categoria de les notificacions de quarantena", + "quarantine_notification": "Canvia les notificacions de quarantena", + "sogo_profile_reset": "Restableix el prefil SOGo", + "alias_domains": "Afegir àlies de domini", + "app_passwds": "Gestiona les contrasenyes de les aplicacions", + "domain_desc": "Canvia la descripció del domini", + "eas_reset": "Restableix els dispositius EAS", + "login_as": "Inicia sessió com a usuari de la bústia de correu", + "prohibited": "Prohibit per ACL", + "protocol_access": "Canvia el protocol d'accés", + "quarantine": "Accions de quarantena", + "quarantine_attachments": "Fitxers adjunts en quarantena", + "spam_alias": "Àlies temporals", + "spam_score": "Puntuació de correu brossa", + "tls_policy": "Política TLS", + "unlimited_quota": "Quota ilimitada per bústies de correo" }, "add": { "activate_filter_warn": "All other filters will be deactivated, when active is checked.", @@ -55,7 +71,9 @@ "target_domain": "Domini destí:", "username": "Username", "validate": "Validar", - "validation_success": "Validated successfully" + "validation_success": "Validated successfully", + "app_name": "Nom de l'aplicació", + "app_password": "Afegir contrasenya a l'aplicació" }, "admin": { "access": "Accés", @@ -259,7 +277,7 @@ }, "footer": { "cancel": "Cancel·lar", - "confirm_delete": "Confirma l'esborrat ", + "confirm_delete": "Confirma l'esborrat", "delete_now": "Esborrar ara", "delete_these_items": "Si et plau confirma els canvis al objecte amb id:", "loading": "Si et plau espera ...", diff --git a/data/web/lang/lang.de-de.json b/data/web/lang/lang.de-de.json index d6f79dc5..43d2b6c5 100644 --- a/data/web/lang/lang.de-de.json +++ b/data/web/lang/lang.de-de.json @@ -343,7 +343,9 @@ "api_read_only": "Schreibgeschützter Zugriff", "api_read_write": "Lese-Schreib-Zugriff", "oauth2_apps": "OAuth2 Apps", - "queue_unban": "entsperren" + "queue_unban": "entsperren", + "allowed_methods": "Access-Control-Allow-Methods", + "allowed_origins": "Access-Control-Allow-Origin" }, "danger": { "access_denied": "Zugriff verweigert oder unvollständige/ungültige Daten", @@ -482,7 +484,7 @@ "info": "_START_ bis _END_ von _TOTAL_ Einträgen", "infoEmpty": "0 bis 0 von 0 Einträgen", "infoFiltered": "(gefiltert von _MAX_ Einträgen)", - "infoPostFix": "", + "infoPostFix": "datatables.infoPostFix", "thousands": ".", "lengthMenu": "_MENU_ Einträge anzeigen", "loadingRecords": "Wird geladen...", diff --git a/data/web/lang/lang.en-gb.json b/data/web/lang/lang.en-gb.json index 28ff19b8..a4d06da3 100644 --- a/data/web/lang/lang.en-gb.json +++ b/data/web/lang/lang.en-gb.json @@ -484,7 +484,7 @@ "info": "Showing _START_ to _END_ of _TOTAL_ entries", "infoEmpty": "Showing 0 to 0 of 0 entries", "infoFiltered": "(filtered from _MAX_ total entries)", - "infoPostFix": "", + "infoPostFix": "datatables.infoPostFix", "thousands": ",", "lengthMenu": "Show _MENU_ entries", "loadingRecords": "Loading...", diff --git a/data/web/lang/lang.es-es.json b/data/web/lang/lang.es-es.json index e56e6bdd..78580ccc 100644 --- a/data/web/lang/lang.es-es.json +++ b/data/web/lang/lang.es-es.json @@ -20,7 +20,9 @@ "tls_policy": "Póliza de TLS", "unlimited_quota": "Cuota ilimitada para buzones", "app_passwds": "Gestionar las contraseñas de aplicaciones", - "domain_desc": "Cambiar descripción del dominio" + "domain_desc": "Cambiar descripción del dominio", + "protocol_access": "Cambiar protocolo de acceso", + "quarantine_category": "Cambiar categoría de las notificaciones de cuarentena" }, "add": { "activate_filter_warn": "Todos los demás filtros se desactivarán cuando este filtro se active.", @@ -85,7 +87,13 @@ "timeout2": "Tiempo de espera para la conexión al host local", "username": "Usuario", "validate": "Validar", - "validation_success": "Validado exitosamente" + "validation_success": "Validado exitosamente", + "inactive": "Inactivo", + "app_name": "Nombre de la App", + "app_password": "Añadir contraseña para la app", + "public_comment": "Comentarios públicos", + "disable_login": "Desactivar login (el correo entrante seguirá activo)", + "comment_info": "Los comentarios privados no son visibles al usuario, mientras que los comentarios públicos aparecerán sobre la información general del usuario" }, "admin": { "access": "Acceso", @@ -114,7 +122,7 @@ "app_name": "Nombre de la app", "apps_name": "Nombre \"mailcow Apps\"", "arrival_time": "Tiempo de llegada (hora del servidor)", - "ban_list_info": "La lista de IPs bloqueadas sigue a continuación: red (tiempo de prohibición restante) - [acciones].
Las IPs en cola para ser desbloquadas se eliminarán de la lista de bloqueos en unos pocos segundos.
Las etiquetas rojas indican bloqueos permanentes permanentes mediante la inclusión en una lista negra.", + "ban_list_info": "Lista de IPs bloqueadas: red (tiempo de prohibición restante) - [acciones].
Las IPs en cola para ser desbloqueadas se eliminarán de la lista de bloqueos en unos pocos segundos.
Las etiquetas rojas indican bloqueos permanentes mediante la inclusión en la lista negra.", "change_logo": "Cambiar logo", "configuration": "Configuración", "credentials_transport_warning": "Advertencia: al agregar una nueva entrada de ruta de transporte se actualizarán las credenciales para todas las entradas con una columna de \"siguiente destino\" coincidente.", @@ -432,7 +440,7 @@ }, "header": { "administration": "Administración", - "debug": "Información del sistema", + "debug": "Información", "email": "E-Mail", "mailcow_config": "Configuración", "quarantine": "Cuarentena", diff --git a/data/web/lang/lang.fr-fr.json b/data/web/lang/lang.fr-fr.json index 0bc0ba02..48420550 100644 --- a/data/web/lang/lang.fr-fr.json +++ b/data/web/lang/lang.fr-fr.json @@ -1096,7 +1096,8 @@ "weeks": "semaines", "months": "mois", "year": "année", - "years": "années" + "years": "années", + "with_app_password": "avec le mot de passe de l'application" }, "warning": { "cannot_delete_self": "Impossible de supprimer l’utilisateur connecté", diff --git a/data/web/lang/lang.gr-gr.json b/data/web/lang/lang.gr-gr.json new file mode 100644 index 00000000..df9127ae --- /dev/null +++ b/data/web/lang/lang.gr-gr.json @@ -0,0 +1,20 @@ +{ + "user": { + "verify": "Επαλήθευση", + "week": "εβδομάδα", + "weekly": "Εβδομαδιαία", + "weeks": "Εβδομάδες", + "with_app_password": "με κωδικό εφαρμογής", + "year": "χρόνος", + "years": "χρόνια" + }, + "warning": { + "cannot_delete_self": "Αδυναμία διαγραφής συνδεδεμένου χρήστη", + "dovecot_restart_failed": "Απέτυχε η επανεκκίνηση του Dovecot, παρακαλώ ελέγξτε τα αρχεία καταγραφής.", + "no_active_admin": "Αδυναμία απενεργοποίησης του τελευταίου ενεργού διαχειριστή", + "domain_added_sogo_failed": "Προστέθηκε το όνομα χώρου αλλά απέτυχε η επανεκκίνηση του SOGo.", + "hash_not_found": "Η κατακερματισμένη τιμή (hash value) δεν βρέθηκε ή έχει είδη διαγραφεί.", + "ip_invalid": "Παραλείφθηκε μη έγκυρη διεύθυνση IP: %s", + "is_not_primary_alias": "Παραλείφθηκε μη πρωτεύον ψευδώνυμο %s" + } +} diff --git a/data/web/lang/lang.hu-hu.json b/data/web/lang/lang.hu-hu.json index f04cf9c5..327f0752 100644 --- a/data/web/lang/lang.hu-hu.json +++ b/data/web/lang/lang.hu-hu.json @@ -18,7 +18,11 @@ "transport_dest_format": "Szintaxis: pelda.hu, .pelda.hu, *, fiok@pelda.hu (több érték esetén vesszővel elválasztva)", "upload": "Feltöltés", "username": "Felhasználónév", - "verify": "Ellenőrzés" + "verify": "Ellenőrzés", + "activate_api": "API aktiválása", + "activate_send": "Küldés gomb aktiválása", + "add": "Hozzáad", + "active": "Aktív" }, "edit": { "active": "Aktív", @@ -385,9 +389,18 @@ "acl": { "delimiter_action": "Elhatárolás", "alias_domains": "Alias domainek hozzáadása", - "app_passwds": "Alkalmazás jelszavak kezelése" + "app_passwds": "Alkalmazás jelszavak kezelése", + "domain_desc": "Domain leírás módosítása", + "filters": "Szűrők", + "login_as": "Bejelentkezés mint", + "quarantine": "Karantén műveletek", + "bcc_maps": "BCC címek" }, "diagnostics": { "dns_records": "DNS bejegyzések" + }, + "add": { + "username": "Felhasználónév", + "validation_success": "Sikeres ellenőrzés" } } diff --git a/data/web/lang/lang.it-it.json b/data/web/lang/lang.it-it.json index 0d5b3f25..84f6e266 100644 --- a/data/web/lang/lang.it-it.json +++ b/data/web/lang/lang.it-it.json @@ -134,10 +134,10 @@ "admins_ldap": "Amministratori LDAP", "advanced_settings": "Impostazioni avanzate", "api_allow_from": "Allow API access from these IPs/CIDR network notations", - "api_info": "The API is a work in progress. The documentation can be found at /api", + "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", - "app_links": "App links", + "app_links": "Link dell'app", "app_name": "Nome dell'app", "apps_name": "Nome \"mailcow Apps\"", "arrival_time": "Ora di arrivo (ora del server)", @@ -338,7 +338,8 @@ "oauth2_apps": "App OAuth2", "oauth2_add_client": "Aggiungere il client OAuth2", "rsettings_preset_4": "Disattivare Rspamd per un dominio", - "options": "Opzioni" + "options": "Opzioni", + "cors_settings": "Impostazioni CORS" }, "danger": { "access_denied": "Accesso negato o form di login non corretto", diff --git a/data/web/lang/lang.ro-ro.json b/data/web/lang/lang.ro-ro.json index e6315db0..62585058 100644 --- a/data/web/lang/lang.ro-ro.json +++ b/data/web/lang/lang.ro-ro.json @@ -106,7 +106,8 @@ "timeout2": "Timeout pentru conectarea la gazda locală", "username": "Nume de utilizator", "validate": "Validează", - "validation_success": "Validat cu succes" + "validation_success": "Validat cu succes", + "tags": "Etichete" }, "admin": { "access": "Acces", @@ -334,7 +335,15 @@ "username": "Nume de utilizator", "validate_license_now": "Validează GUID cu serverul de licență", "verify": "Verifică", - "yes": "✓" + "yes": "✓", + "cors_settings": "Setări CORS", + "f2b_ban_time_increment": "Timpul de blocare creşte cu fiecare blocare", + "f2b_max_ban_time": "Max. timp de blocare (s)", + "ip_check": "Verificaţie IP", + "ip_check_disabled": "Verificarea IP este dezactivată. Puteţi activa la
Sistem > Configuraţie > Opţiuni > Personalizează", + "ip_check_opt_in": "Alegeţi să folosiţi servicile ipv4.mailcow.email şi ipv6.mailcow.email să rezolvaţi addrese IP externale.", + "options": "Opţiuni", + "queue_unban": "retractează interzicere" }, "danger": { "access_denied": "Accesul a fost respins sau datele formularului sunt invalide", @@ -453,7 +462,16 @@ "username_invalid": "Numele de utilizator %s nu poate fi utilizat", "validity_missing": "Atribuie o perioadă de valabilitate", "value_missing": "Furnizează toate valorile", - "yotp_verification_failed": "Verificarea Yubico OTP a eșuat: %s" + "yotp_verification_failed": "Verificarea Yubico OTP a eșuat: %s", + "cors_invalid_method": "Aveţi specificaţi 'Allow-Method' invalid", + "webauthn_authenticator_failed": "Authentificator selectat nu a fost găsit", + "webauthn_publickey_failed": "Nici-o cheie publică a fost salvată pentru authenticatorul selectat", + "webauthn_username_failed": "Authenticatorul selectat aparţine la alt cont", + "demo_mode_enabled": "Mod de demonstraţie este activ", + "extended_sender_acl_denied": "lipseşte ACL pentru setarea adrese externe", + "template_exists": "Şablon %s deja există", + "template_id_invalid": "Şablon ID %s este invalid", + "template_name_invalid": "Nume de şablon este invalid" }, "debug": { "chart_this_server": "Grafic (acest server)", @@ -641,7 +659,7 @@ "header": { "administration": "Configurație și detalii", "apps": "Aplicații", - "debug": "Informații Sistem", + "debug": "Informaţie", "email": "E-Mail", "mailcow_config": "Configurație", "quarantine": "Carantină", @@ -1187,5 +1205,9 @@ "quota_exceeded_scope": "Cota de spațiu a domeniului depășită: Numai căsuțe poștale nelimitate pot fi create pe acest domeniu.", "session_token": "Token formular invalid: Nepotrivire token", "session_ua": "Token formular invalid: Eroare validare utilizator-agent" + }, + "datatables": { + "expand_all": "Expandează tot", + "decimal": "," } } diff --git a/data/web/lang/lang.ru-ru.json b/data/web/lang/lang.ru-ru.json index bad64184..0783710c 100644 --- a/data/web/lang/lang.ru-ru.json +++ b/data/web/lang/lang.ru-ru.json @@ -338,7 +338,13 @@ "yes": "✓", "queue_unban": "разблокировать", "f2b_ban_time_increment": "Время бана увеличивается с каждым баном", - "f2b_max_ban_time": "Максимальное время блокировки" + "f2b_max_ban_time": "Максимальное время блокировки", + "allowed_origins": "Access-Control-Allow-Origin", + "cors_settings": "Настройки CORS", + "allowed_methods": "Access-Control-Allow-Methods", + "ip_check": "Проверить IP", + "ip_check_disabled": "Проверка IP отключена. Вы можете включить его в разделе
Система > Конфигурация > Параметры > Настроить.", + "ip_check_opt_in": "Согласие на использование сторонних служб ipv4.mailcow.email и ipv6.mailcow.email для разрешения внешних IP-адресов." }, "danger": { "access_denied": "Доступ запрещён, или указаны неверные данные", @@ -457,7 +463,10 @@ "username_invalid": "Имя пользователя %s нельзя использовать", "validity_missing": "Пожалуйста, назначьте срок действия", "value_missing": "Пожалуйста заполните все поля", - "yotp_verification_failed": "Ошибка валидации Yubico OTP: %s" + "yotp_verification_failed": "Ошибка валидации Yubico OTP: %s", + "cors_invalid_method": "Указан недопустимый метод разрешения", + "demo_mode_enabled": "Демонстрационный режим включен", + "cors_invalid_origin": "Указан неверный Allow-Origin" }, "debug": { "chart_this_server": "Диаграмма (текущий сервер)", @@ -542,7 +551,7 @@ "inactive": "Неактивный", "kind": "Тип", "last_modified": "Последние изменения", - "lookup_mx": "Назначение на основе резовинга MX записи по регулярному выражению (.*\\.example\\.com$ для маршрутизации всей почты через этот хост, если MX заканчивающийся на example.com)", + "lookup_mx": "Назначение на основе резолвинга MX записи по регулярному выражению (.*\\.example\\.com$ для маршрутизации всей почты через этот хост, если MX заканчивающийся на example.com)", "mailbox": "Изменение почтового аккаунта", "mailbox_quota_def": "Квота по умолчанию", "mailbox_relayhost_info": "Применяется только к почтовому ящику и личным псевдонимам, вне зависимости от настроек маршрутизации на уровне домена.", @@ -607,7 +616,9 @@ "title": "Изменение объекта", "unchanged_if_empty": "Если без изменений - оставьте пустым", "username": "Имя пользователя", - "validate_save": "Подтвердить и сохранить" + "validate_save": "Подтвердить и сохранить", + "sogo_access_info": "Единый вход из интерфейса почты продолжает работать. Эта настройка не влияет на доступ ко всем другим службам, а также не удаляет или изменяет существующий профиль пользователя SOGo.", + "app_passwd_protocols": "Разрешенные протоколы для пароля приложения" }, "fido2": { "confirm": "Подтвердить", @@ -987,7 +998,8 @@ "verified_fido2_login": "Авторизация FIDO2 пройдена", "verified_totp_login": "Авторизация TOTP пройдена", "verified_webauthn_login": "Авторизация WebAuthn пройдена", - "verified_yotp_login": "Авторизация Yubico OTP пройдена" + "verified_yotp_login": "Авторизация Yubico OTP пройдена", + "cors_headers_edited": "Настройки CORS сохранены" }, "tfa": { "api_register": "%s использует Yubico Cloud API. Пожалуйста, получите ключ API для вашего ключа здесь", @@ -1169,7 +1181,12 @@ "weekly": "Раз в неделю", "weeks": "недели", "year": "год", - "years": "лет" + "years": "лет", + "allowed_protocols": "Разрешенные протоколы", + "apple_connection_profile_with_app_password": "Новый пароль приложения генерируется и добавляется в профиль, поэтому при настройке устройства не требуется вводить пароль. Не предоставляйте доступ к файлу, поскольку он предоставляет полный доступ к вашему почтовому ящику.", + "direct_protocol_access": "Этот пользователь почтового ящика имеет прямой, внешний доступ к следующим протоколам и приложениям. Эта настройка контролируется вашим администратором. Для предоставления доступа к отдельным протоколам и приложениям могут быть созданы пароли приложений.
Кнопка \"Вход в веб-почту\" обеспечивает единый вход в SOGo и всегда доступна.", + "with_app_password": "с паролем приложения", + "change_password_hint_app_passwords": "В вашей учетной записи есть {{number_of_app_passwords}} паролей приложений, которые не будут изменены. Чтобы управлять ими, перейдите на вкладку \"Пароли приложений\"." }, "warning": { "cannot_delete_self": "Вы не можете удалить сами себя", @@ -1183,5 +1200,8 @@ "quota_exceeded_scope": "Квота домена превышена: могут быть созданы только почтовые ящики без лимита.", "session_token": "Неверный токен формы: несоответствие токена", "session_ua": "Неверный токен формы: ошибка проверки User-Agent" + }, + "datatables": { + "infoPostFix": "datatables.infoPostFix" } } diff --git a/data/web/lang/lang.si-si.json b/data/web/lang/lang.si-si.json new file mode 100644 index 00000000..7c3ddbfd --- /dev/null +++ b/data/web/lang/lang.si-si.json @@ -0,0 +1,396 @@ +{ + "acl": { + "app_passwds": "Upravljaj gesla aplikacij", + "bcc_maps": "Preslikave SKP (BCC)", + "delimiter_action": "Dejanje ločila", + "domain_relayhost": "Spremeni gostitelja relay za domeno", + "eas_reset": "Ponastavi EAS naprave", + "filters": "Filtri", + "login_as": "Prijavi se kot uporabnik poštnega predala", + "mailbox_relayhost": "Spremeni gostitelja relay za poštni predal", + "prohibited": "Prepovedano z ACL", + "protocol_access": "Spremeni dostop do protokola", + "pushover": "Pushover", + "quarantine": "Dejanja karantene", + "quarantine_attachments": "Priponke v karanteno", + "quarantine_notification": "Spremeni obvestila o karanteni", + "ratelimit": "Omejitev pošiljanja", + "recipient_maps": "Preslikave prejemnikov", + "smtp_ip_access": "Spremeni dovoljene gostitelje za SMTP", + "sogo_access": "Dovoli upravljanje SOGo dostopov", + "sogo_profile_reset": "Ponastavi SOGo profil", + "spam_alias": "Začasni aliasi", + "spam_policy": "Blacklist/Whitelist", + "spam_score": "Ocena neželene pošte", + "tls_policy": "Politika TLS", + "unlimited_quota": "Neomejena kvota za poštne predale", + "alias_domains": "Dodaj alias domene", + "domain_desc": "Spremeni opis domene", + "extend_sender_acl": "Dovoli razširitev pošiljateljevega ACL z zunanjimi e-poštnimi naslovi", + "quarantine_category": "Spremeni kategorijo obvestil o karanteni", + "syncjobs": "Opravila sinhronizacije" + }, + "add": { + "active": "Aktivno", + "add": "Dodaj", + "add_domain_only": "Dodaj samo domeno", + "add_domain_restart": "Dodaj domeno in ponovno zaženi SOGo", + "alias_address": "Alias naslov/i", + "alias_domain": "Alias domena", + "alias_domain_info": "Samo veljavne domene (ločene z vejico).", + "app_name": "Ime aplikacije", + "app_password": "Dodaj geslo aplikacije", + "app_passwd_protocols": "Dovoljeni protokoli za geslo aplikacije", + "automap": "Poskusi samodejno preslikati mape (\"Sent items\", \"Sent\" => \"Poslano\" ipd.)", + "backup_mx_options": "Možnosti posredovanja (relay)", + "comment_info": "Zasebni komentarji niso vidni uporabnikom, javni komentarji pa so prikazani kot tooltip, ko se z miško postavimo nad uporabnika v pregledu", + "custom_params": "Parametri po meri", + "custom_params_hint": "Pravilno: --param=xy, napačno: --param xy", + "delete1": "Izbriši na viru, ko je končano", + "delete2": "Izbriši sporočila na cilju, ki niso na viru", + "delete2duplicates": "Izbriši dvojnike na cilju", + "description": "Opis", + "destination": "Cilj", + "domain": "Domena", + "domain_matches_hostname": "Domena %s se ujema z nazivom gostitelja (hostname)", + "domain_quota_m": "Kvota za celotno domeno (MiB)", + "enc_method": "Metoda kriptiranja", + "exclude": "Izključi objekte (regex)", + "full_name": "Polno ime", + "gal": "Globalni seznam stikov (GAL)", + "generate": "generiraj", + "goto_ham": "Prepoznaj kot ham", + "goto_null": "Odstrani e-poštno sporočilo brez obvestila", + "goto_spam": "Prepoznaj kot spam", + "hostname": "Gostitelj", + "inactive": "Neaktivno", + "kind": "Tip", + "mailbox_quota_def": "Privzeta kvota za poštni predal", + "mailbox_username": "Uporabniško ime (levi del e-poštnega naslova)", + "max_aliases": "Največje število dovoljenih aliasov", + "max_mailboxes": "Največje dovoljeno število poštnih predalov", + "mins_interval": "Interval preverjanja (minute)", + "multiple_bookings": "Več rezervacij", + "nexthop": "Naslednji korak", + "password_repeat": "Potrditev gesla (ponovi)", + "port": "Vrata (port)", + "private_comment": "Zasebni komentar", + "public_comment": "Javni komentar", + "quota_mb": "Kvota (MiB)", + "relay_all": "Posreduj vse prejemnike (relay)", + "relay_all_info": "↪ Če izberete da ne posredujete vse prejemnike, morate ustvariti (\"slepi\") poštni predal za vsakega prejemnika, za katerega želite posredovati e-pošto.", + "relay_domain": "Posreduj to domeno (relay)", + "relay_unknown_only": "Posreduj samo neobstoječe poštne predale. V obstoječe poštne predale bo e-pošta dostavljena lokalno.", + "relayhost_wrapped_tls_info": "Prosim ne uporabljajte TLS-wrapped vrata (večinoma uporabljeno na vratih 465).
\nUporabite katera koli non-wrapped vrata in ustvarite STARTTLS. TLS politika za obvezno uporabo TLS se lahko ustvari pod \"Preslikave TLS politik\"", + "select": "Prosim izberite...", + "select_domain": "Prosim najprej izberite domeno", + "sieve_desc": "Kratek opis", + "sieve_type": "Vrsta filtra", + "skipcrossduplicates": "Preskoči podvojena sporočila po mapah (prvi pride, prvi melje)", + "subscribeall": "Prijavi vse mape", + "syncjob": "Dodaj opravilo sinhronizacije", + "tags": "Oznake", + "target_address": "Goto naslov", + "target_address_info": "Polni e-poštni naslov/i (ločeni z vejico).", + "target_domain": "Ciljna domena", + "timeout1": "Časovna omejitev za povezavo do oddaljenega gostitelja", + "username": "Uporabniško ime", + "validate": "Preveri", + "validation_success": "Uspešno preverjeno", + "activate_filter_warn": "Ko je aktivni izbran, bodo vsi ostali filtri deaktivirani.", + "alias_address_info": "Polni email naslov/i oziroma @example.com za zajem vseh sporočil domene (ločeno z vejico), samo domene mailcow.", + "bcc_dest_format": "BCC naslov mora biti en veljaven e-poštni naslov.
Če morate poslati kopijo na več naslov, ustvarite alias in ga uporabite tukaj.", + "disable_login": "Prepovej vpis (vhodna e-pošta je še vedno sprejeta)", + "gal_info": "GAL vsebuje vse objekte domene in ga uporabniki ne morejo urejati. Informacija o zasedenosti v SOGo ni na voljo, če je onemogočena! Ponovno zaženi SOGo za uveljavitev sprememb.", + "mailbox_quota_m": "Najvišja kvota na poštni predal (MiB)", + "password": "Geslo", + "post_domain_add": "SOGo container \"sogo-mailcow\" mora biti ponovno zagnan po dodajanju nove domene!

Dodatno se mora preveriti DNS konfiguracija domene. Ko je DNS konfiguracija domene odobrena, ponovno zaženite \"acme-mailcow\" za samodejno generiranje certifikatov za novo domeno (autoconfig.<domain>, autodiscover.<domain>).
Ta korak je opcijski in se ponovno poskuša vsakih 24 ur.", + "relay_transport_info": "
Info
Definirate lahko preslikave transportov za cilj po meri za to domeno. Če ni nastavljena, se ustvari MX poizvedba.", + "syncjob_hint": "Pozor! Gesla se morajo shraniti v plain-text!", + "timeout2": "Časovna omejitev za povezavo do lokalnega gostitelja" + }, + "admin": { + "access": "Dostop", + "action": "Dejanje", + "activate_api": "Aktiviraj API", + "activate_send": "Aktiviraj gumb \"Pošlji\"", + "active": "Aktivno", + "active_rspamd_settings_map": "Aktivna preslikava nastavitev", + "add": "Dodaj", + "add_domain_admin": "Dodaj skrbnika domene", + "add_forwarding_host": "Dodaj gostitelja za posredovanje", + "add_relayhost": "Dodaj transport odvisen od pošiljatelja", + "add_row": "Dodaj vrstico", + "add_settings_rule": "Dodaj pravilo nastavitev", + "add_transport": "Dodaj transport", + "add_transports_hint": "Prosimo zavedajte se, da se podatki za avtentikacijo, če obstajajo, shranijo v plain text.", + "additional_rows": " nove vrstice so bile dodane", + "admin_details": "Uredi podrobnosti skrbnika", + "admin_domains": "Dodeljene domene", + "admins": "Skrbniki", + "admins_ldap": "LDAP skrbniki", + "advanced_settings": "Napredne nastavitve", + "api_info": "API je v razvoju. Dokumentacija je na voljo na naslovu /api", + "api_key": "API ključ", + "api_read_only": "Dostop samo za branje", + "api_read_write": "Dostop za branje in urejanje", + "api_skip_ip_check": "Preskoči preverjanje IP za API", + "app_links": "Povezave aplikacij", + "app_name": "Ime aplikacije", + "arrival_time": "Čas prispetja (strežniški čas)", + "authed_user": "Prij. uporabnik", + "ays": "Ste prepričani, da želite nadaljevati?", + "change_logo": "Zamenjaj logotip", + "configuration": "Konfiguracija", + "convert_html_to_text": "Pretvori HTML v golo besedilo", + "credentials_transport_warning": "Opozorilo: Dodajanje nove preslikave transporta bo posodobilo poverilnice za vse vnose, ki imajo enako vrednost v stolpcu naslednji skok.", + "customer_id": "ID stranke", + "customize": "Prilagodi", + "destination": "Cilj", + "dkim_add_key": "Dodaj ARC/DKIM ključ", + "dkim_domains_selector": "Izbira", + "dkim_domains_wo_keys": "Izberi domene z manjkajočimi ključi", + "dkim_from": "Od", + "dkim_from_title": "Izvorna domena od katere prekopiram podatke", + "dkim_key_missing": "Manjka ključ", + "dkim_key_unused": "Ključ ni v rabi", + "dkim_key_valid": "Veljaven ključ", + "dkim_keys": "ARC/DKIM ključi", + "dkim_overwrite_key": "Prepiši obstoječi DKIM ključ", + "dkim_private_key": "Zasebni ključ", + "dkim_to": "Za", + "domain": "Domena", + "domain_admin": "Skrbnik domene", + "domain_admins": "Skrbniki domene", + "domain_s": "Domena/e", + "duplicate": "Podvoji", + "duplicate_dkim": "Podvoji DKIM zapis", + "edit": "Uredi", + "empty": "Ni rezultatov", + "excludes": "Izključuje te prejemnike", + "f2b_ban_time": "Čas blokade (s)", + "f2b_ban_time_increment": "Čas blokade se poveča z vsako blokado", + "f2b_blacklist": "Mreže/gostitelji na blacklisti", + "f2b_filter": "Regex filtri", + "f2b_max_attempts": "Največ poskusov", + "f2b_max_ban_time": "Maksimalno trajanje blokade (s)", + "f2b_netban_ipv4": "velikost subneta IPv4 za blokiranje (8-32)", + "f2b_netban_ipv6": "Velikost subneta IPv6 za blokiranje (8-128)", + "f2b_parameters": "Fail2ban parametri", + "f2b_regex_info": "Upoštevajo se dnevniki SOGo, Postfix, Dovecot, PHP-FPM.", + "f2b_retry_window": "Upoštevan čas (s) za največ poskusov", + "f2b_whitelist": "Mreže/gostitelji na whitelisti", + "filter_table": "Filtriraj tabelo", + "from": "Od", + "generate": "ustvari", + "guid": "GUID - enolični ID instance", + "guid_and_license": "GUID & licenca", + "hash_remove_info": "Odstranitev hasha za omejitev (če obstaja) bo povsem ponastavilo njen števec.
\n Vsak hash je prikazan z individualno barvo.", + "help_text": "Zamenjaj tekst za pomoč pod masko za prijavo (HTML je dovoljen)", + "host": "Gostitelj", + "html": "HTML", + "import": "Uvozi", + "import_private_key": "Uvozi zasebni ključ", + "in_use_by": "V uporabi", + "inactive": "Neaktivno", + "include_exclude": "Vključi/Izključi", + "include_exclude_info": "Privzeto - če ni izbire - so vključeni vsi poštni predali", + "includes": "Vključi te prejemnike", + "ip_check": "Kontrola IP", + "ip_check_disabled": "Kontrola IP je onemogočena. Lahko jo omogočite pod
Sistem > Konfiguracija > Možnosti > Prilagodi", + "ip_check_opt_in": "Opt-in za uporabo zunanje storitve ipv4.mailcow.email in ipv6.mailcow.email za razreševanje zunanjih IP.", + "is_mx_based": "Glede na MX", + "last_applied": "Nazadnje aplicirano", + "link": "Povezava", + "loading": "Prosim počakajte...", + "login_time": "Čas prijave", + "logo_info": "Vaša slika bo pomanjšana na velikost 40px za zgornjo navigacijo in največjo velikost 250px za začetno stran. Zelo priporočena je uporaba grafike brez izgube kakovosti ob spremembi velikosti.", + "message": "Sporočilo", + "message_size": "Velikost sporočila", + "nexthop": "Naslednji skok", + "no": "✕", + "no_active_bans": "Ni aktivnih blokad", + "no_new_rows": "Ni dodatnih vrstic", + "no_record": "Ni zapisa", + "oauth2_apps": "OAuth2 aplikacije", + "oauth2_add_client": "Dodaj OAuth2 klienta", + "oauth2_client_id": "ID klienta", + "oauth2_client_secret": "Skrivnost (secret)", + "oauth2_redirect_uri": "URI za preusmeritev", + "oauth2_renew_secret": "Generiraj nov client secret", + "oauth2_revoke_tokens": "Zavrni vse tokene klientov", + "optional": "opcijsko", + "options": "Možnosti", + "password": "Geslo", + "password_length": "Dolžina gesla", + "password_policy": "Politika gesel", + "password_policy_chars": "Mora vsebovati vsaj eno črko", + "password_policy_length": "Minimalna dolžina gesla je %d", + "password_policy_lowerupper": "Mora vsebovati male in velike črke", + "password_policy_numbers": "Mora vsebovati vsaj eno številko", + "password_policy_special_chars": "Mora vsebovati posebne znake", + "password_repeat": "Potrditev gesla (ponovite)", + "priority": "Prioriteta", + "private_key": "Zasebni ključ", + "quarantine": "Karantena", + "quarantine_bcc": "Pošlji kopijo vseh obvestil (BCC) temu prejemniku:
Pustite prazno za izklop te funkcije. Nepodpisana, nepreverjena pošta. Uporabljalo naj bi se samo za interno dostavo.", + "quarantine_exclude_domains": "Izključi domene in alias-domene", + "quarantine_max_age": "Maksimalna starost v dnevnih
Vrednost mora biti večja ali enaka 1 dnevu", + "quarantine_max_score": "Opusti obvestilo, če je ocena spama večja od te vrednosti:
Privzeto 9999.0", + "quarantine_max_size": "Največja velikost v MiB (Večji elementi so zavrženi):
0 ne pomeni neomejeno.", + "quarantine_notification_html": "Predloga sporočila za obvestilo:
Pustite prazno za obnovitev privzete predloge.", + "quarantine_notification_sender": "Pošiljatelj obvestila", + "quarantine_notification_subject": "Naslov obvestila", + "quarantine_release_format": "Oblika sproščenih elementov", + "quarantine_release_format_att": "Kot priponka", + "quarantine_release_format_raw": "Nespremenjen original", + "quarantine_retention_size": "Število zadržanj na poštni predal:
0 pomeni neaktivno,", + "quota_notification_sender": "Pošiljatelj obvestila", + "quota_notification_subject": "Predmet obvestila", + "quota_notifications": "Obvestila o omejitvi", + "quota_notifications_info": "Obvestila o omejitvi so poslana uporabnikom enkrat, ko presežejo 80% in enkrat ko presežejo 95% zasedenosti.", + "queue_unban": "odblokiraj", + "r_active": "Aktivne omejitve", + "r_inactive": "Neaktivne omejitve", + "rate_name": "Ime omejitve", + "recipients": "Prejemniki", + "refresh": "Osveži", + "regen_api_key": "Ponovno generiraj API ključ", + "regex_maps": "Regex preslikave", + "relay_from": "\"Od:\" naslov", + "relay_rcpt": "\"Za:\" naslov", + "relay_run": "Izvedi test", + "relayhosts": "Transporti glede na pošiljatelja", + "remove": "Odstrani", + "remove_row": "Odstrani vrstico", + "reset_default": "Ponastavi na privzeto", + "reset_limit": "Odstrani hash", + "routing": "Routing", + "rsetting_add_rule": "Dodaj pravilo", + "rsetting_content": "Vsebina pravila", + "rsetting_desc": "Kratek opis", + "rsetting_no_selection": "Prosim izberite pravilo", + "rsetting_none": "Ni pravil na voljo", + "rsettings_insert_preset": "Vstavi prednastavljen primer \"%s\"", + "rsettings_preset_1": "Onemogoči vse razen DKIM in omejitve za prijavljene uporabnike", + "rsettings_preset_2": "Postmasterji želijo spam", + "rsettings_preset_3": "Dovoli samo specifične pošiljatelje za poštni predal (npr. uporaba samo kot interni poštni predal)", + "rsettings_preset_4": "Onemogoči Rspamd za domeno", + "rspamd_com_settings": "Ime nastavitve bo samodejno generirano. Prosim oglejte si primere nastavitev spodaj. Za več informacij si oglejte dokumentacijo Rspamd", + "rspamd_global_filters": "Globalne preslikave filtrov", + "rspamd_global_filters_agree": "Previden bom!", + "rspamd_global_filters_info": "Globalne preslikave filtrov vsebujejo različne vrste globalnih blacklist in whitelist.", + "add_admin": "Dodaj skrbnika", + "add_relayhost_hint": "Prosimo zavedajte se, da se podatki za avtentikacijo, če obstajajo, shranijo v plain text.", + "admin": "Skrbnik", + "api_allow_from": "Dovoli API dostop s teh IP naslovov / CIDR mrežnih zapisov", + "apps_name": "Ime aplikacije v mailcow", + "ban_list_info": "Oglejte si seznam blokiranih IP naslovov spodaj: network (remaining ban time) - [actions].
. IPji v vrsti za odstranitev blokade bodo odstranjeni iz aktivnega seznama blokad v nekaj sekundah.
Rdeče oznake prikazujejo trajne blokade z blacklisto.", + "dkim_key_length": "Dolžina DKIM ključa (v bitih)", + "dkim_to_title": "Ciljne domene bodo prepisane", + "f2b_list_info": "Gostitelj ali omrežje na blacklisti bo vedno prevladal zapis na whitelisti. Apliciranje sprememb seznama traja nekaj sekund.", + "forwarding_hosts": "Gostitelji za posredovanje", + "forwarding_hosts_add_hint": "Lahko vpišete IPv4/IPv6 naslove, mreže v CIDR obliki, imena gostiteljev (kateri se prevedejo v IP naslove) ali imena domen (katera se prevedejo v IP naslove glede na poizvedbo po SPF zapisih, v primeru manjkajočih zapisov pa MX zapisih).", + "forwarding_hosts_hint": "Dohodna sporočila so brezpogojno sprejeta od katerih koli gostiteljev v tem seznamu. Ti gostitelji se ne bodo preverjali po DNSBL seznamih in ne bodo dodani v greyliste. Prejeti spam s teh gostiteljev ni nikoli zavrnjen, opcijsko pa se lahko premakne v mapo neželene pošte. Najpogostejša uporaba za to je navedba poštnih strežnikov, iz katerih ste nastavili pravilo za posredovanje pošte na vaš mailcow strežnik.", + "license_info": "Licenca ni zahtevana, a pomaga pri nadaljnjem razvoju.
Registrirajte svoj GUID tukaj ali Kupite podporo za svojo namestitev Mailcow.", + "lookup_mx": "Cilj je regular expression za ujemanje MX zapisov (.*\\.google\\.com za usmeritev vse pošte na MX, ki se konča z google.com, preko tega skoka)", + "main_name": "Naziv \"mailcow UI\"", + "merged_vars_hint": "Sive vrstice so združene iz vars.(local.)inc.php in jih ni mogoče spremeniti.", + "oauth2_info": "OAuth2 implementacija omogoča grant vrste \"Authorization code\" in izdaja refresh tokene.
\nStrežnik prav tako izda nove refresh tokene, ko je bil refresh token uporabljen

\n• Privzeti obseg je profile. Samo uporabniki poštnih predalov se lahko prijavijo s pomočjo OAuth2. Če parameter obsega ni vnesen, se nastavi na profile.
\n• Parameter state mora biti poslan s strani klienta kot del zahtevka za avtorizacijo .

\nPoti za OAuth2 API:
\n
    \n
  • Endpoint za avtorizacijo: /oauth/authorize
  • \n
  • Endpoint za tokene: /oauth/token
  • \n
  • Stran vira: /oauth/profile
  • \n
\nPonovno generiranje client secret ne bo razveljavilo obstoječih avtorizacijskih kod, ne bodo pa mogle obnoviti svoje tokene.

\nZavrnitev client tokenov bo povzročilo tekojčno prekinitev aktivnih sej. Vsi klienti se bodo morali ponovno prijaviti.", + "quarantine_redirect": "Preusmeri vsa obvestila k temu prejemniku:
Pustite prazno, da onemogočite. Nepodpisana, nepreverjena pošta. Uporabljalo bi se naj samo za interno dostavo.", + "quota_notification_html": "Predloga sporočila za obvestilo:
Pustite prazno za obnovitev privzete predloge.", + "quota_notifications_vars": "{{percent}} pomeni trenutna omejitev uporabnika
{{username}} je ime poštnega predala", + "r_info": "Sivi/onemogočeni elementi v seznamu aktivnih omejitev niso znane kot veljavne omejitve za mailcow in ne morejo biti premaknjene. Neznane omejitve bodo kljub temu nastavljene po vrstnem redu pojavitve.
Nove elemente lahko dodate v inc/vars.local.inc.php da jih lahko vklopite ali izklopite.", + "relayhosts_hint": "Določite transporte glede na pošiljatelja, da jih lahko izberete v konfiguraciji domene.
\nTransportni servis je vedno \"smtp:\" in bo poskušal s TLS ko bo na voljo. Wrapped TLS (SMTPS) ni podprto. Upošteva se uporabnikova politika odhodnega TLS.
\nVpliva na izbrane domene vključno z alias domenami.", + "transport_dest_format": "Regex ali sintaksa: example.org, .example.org, *, box@example.org (več vrednosti ločite z vejico)", + "transport_test_rcpt_info": "• Uporabite null@hosted.mailcow.de za testiranje relaya na drugo destinacijo.", + "rspamd_global_filters_regex": "Njihovi nazivi pojasnijo njihov namen. Vsa vsebina mora imeti veljaven regular expression v obliki \"/pattern/options\" (npr. /.+@domain\\.tld/i).
\nČeprav se v vsaki vrstici regexa izvedejo osnovni pregledi, je lahko funkcionalnost programa Rspamd motena, če sintaksa ni pravilna.
\nRspamd bo poskušal prebrati vsebino preslikave, ko bo spremenjena. Če imate težave, ponovno zaženite Rspamd, da prisilite ponovno nalaganje preslikav.
Elementi z Blackliste so izključeni iz karantene.", + "rspamd_settings_map": "Preslikava nastavitev Rspamd", + "sal_level": "Moo stopnja", + "save": "Shrani spremembe", + "search_domain_da": "Išči domene", + "send": "Pošlji", + "sender": "Pošiljatelj", + "service": "Servis", + "service_id": "ID servisa", + "source": "Vir", + "spamfilter": "Spam filter", + "subject": "Predmet", + "success": "Uspešno", + "sys_mails": "Sistemska pošta", + "text": "Besedilo", + "time": "Čas", + "title": "Naziv", + "title_name": "Naziv spletnega mesta \"mailcow UI\"", + "to_top": "Nazaj na vrh", + "transport_maps": "Preslikave transportov", + "transports_hint": "• Vpis preslikave transporta nadredi preslikavo transporta odvisno od pošiljatelja.
\n• Preferenčno se uporabljajo transporti glede na MX zapise.
\n• Izhodne TLS politike na uporabnika so ignorirane in se lahko vsilijo samo s preslikavami TLS politik.
\n• Transportni servis za definirane transporte je vedno \"smtp:\" in bo posledično poskušal TLS ko bo ponujeno. Wrapped TLS (SMTPS) ni podprto.
\n• Naslovi, ki se ujemajo z \"/localhost$/\" bodo vedno preneseni preko \"local:\", in zato destinacija \"*\" ne bo vplivala na te naslove.
\n• Za določitev poverilnic za naslednji skok (npr. \"[host]:25\"), Postfix vedno preveri \"host\" preden išče \"[host]:25\". Zaradi takšnega obnašanja je nemogoče hkrati uporabiti \"host\" in \"[host]:25\".", + "ui_footer": "Noga (HTML dovoljen)", + "ui_header_announcement": "Obvestila", + "ui_header_announcement_active": "Nastavi obvestilo kot aktivno", + "ui_header_announcement_content": "Besedilo (HTML dovoljen)", + "ui_header_announcement_help": "Obvestilo je vidno za vse prijavljene uporabnike in na vmesniku za prijavo.", + "ui_header_announcement_select": "Izberite vrsto obvestila", + "ui_header_announcement_type": "Vrsta", + "ui_header_announcement_type_danger": "Zelo pomembno", + "ui_header_announcement_type_info": "Info", + "ui_header_announcement_type_warning": "Pomembno", + "ui_texts": "Oznake in besedila UI", + "unban_pending": "unban v postopku", + "unchanged_if_empty": "Če je nespremenjeno, pustite prazno", + "upload": "Naloži", + "username": "Uporabniško ime", + "validate_license_now": "Potrdi GUID z licenčnim strežnikom", + "verify": "Preveri", + "yes": "✓" + }, + "danger": { + "alias_goto_identical": "Alias in goto naslov morata biti identična", + "aliasd_targetd_identical": "Alias domena ne sme biti enaka ciljni domeni: %s", + "bcc_exists": "BCC preslikava obstaja za vrsto %s", + "dkim_domain_or_sel_exists": "DKIM ključ za \"%s\" obstaja in ne bo prepisan.", + "domain_quota_m_in_use": "Kvota domene mora biti večja ali enaka %s MiB", + "extra_acl_invalid_domain": "Zunanji pošiljatelj \"%s\" uporablja neveljavno domeno", + "global_map_write_error": "Ni mogoče zapisati ID globalne preslikave %s: %s", + "img_tmp_missing": "Ni mogoče preveriti slikovne datoteke: začasne datoteke ni mogoče najti", + "invalid_nexthop": "Oblika naslednjega skoka ni veljavna", + "invalid_nexthop_authenticated": "Naslednji skok obstaja z drugačnimi poverilnicami. Prosim najprej posodobite obstoječe poverilnice za ta naslednji skok.", + "demo_mode_enabled": "Demo način je omogočen", + "access_denied": "Dostop zavrnjen ali pa so podatki obrazca napačni", + "alias_domain_invalid": "Alias domena %s ni veljavna", + "alias_empty": "Alias naslov ne sme biti prazen", + "alias_invalid": "Alias naslov %s ni veljaven", + "aliases_in_use": "Max. aliasov mora biti večje ali enako %d", + "app_name_empty": "Naziv aplikacije ne more biti prazno", + "app_passwd_id_invalid": "ID gesla aplikacije %s je neveljaven", + "bcc_empty": "BCC cilj ne more biti prazen", + "bcc_must_be_email": "BCC cilj %s ni veljaven e-poštni naslov", + "comment_too_long": "Komentar je predolg, dovoljeno je največ 100 znakov.", + "defquota_empty": "Privzeta kvota na poštni predal ne more biti 0", + "description_invalid": "Opis resursa za %s ni veljaven", + "dkim_domain_or_sel_invalid": "Domena ali izbirnik DKIM ni veljaven: %s", + "domain_cannot_match_hostname": "Domena se ne more ujemati z imenom gostitelja", + "domain_exists": "Domena %s že obstaja", + "domain_invalid": "Manjka ali napačno ime domene", + "domain_not_empty": "Ne morem odstraniti ne-prazno domeno %s", + "domain_not_found": "Domene %s ni bilo mogoče najti", + "extended_sender_acl_denied": "manjka ACL za določitev naslovov zunanjih pošiljateljev", + "extra_acl_invalid": "Naslov zunanjega pošiljatelja \"%s\" ni veljaven", + "fido2_verification_failed": "Preverjanje FIDO2 ni uspelo: %s", + "file_open_error": "Datoteka ne more biti odprta za urejanje", + "filter_type": "Napačna vrsta filtra", + "from_invalid": "Pošiljatelj ne sme biti prazno", + "global_filter_write_error": "Ni mogoče zapisati datoteke filtra: %s", + "global_map_invalid": "ID globalne preslikave %s ni veljaven", + "goto_empty": "Alias naslov mora vsebovati vsaj en veljaven goto naslov", + "goto_invalid": "Goto naslov %s ni veljaven", + "ham_learn_error": "Napaka pri učenju Ham: %s", + "imagick_exception": "Napaka: Imagick napaka pri branju slike", + "img_invalid": "Ni možno preveriti slikovne datoteke", + "invalid_bcc_map_type": "Neveljavna vrsta preslikave BCC", + "invalid_destination": "Ciljna oblika \"%s\" ni veljavna", + "invalid_filter_type": "Neveljavna vrsta filtra", + "invalid_host": "Naveden je neveljaven gostitelj (host): %s", + "invalid_mime_type": "Neveljaven mime type" + } +} diff --git a/data/web/lang/lang.uk-ua.json b/data/web/lang/lang.uk-ua.json index 0a5c71b8..93545aa3 100644 --- a/data/web/lang/lang.uk-ua.json +++ b/data/web/lang/lang.uk-ua.json @@ -335,7 +335,17 @@ "transport_test_rcpt_info": "• Використовуйте null@hosted.mailcow.de для перевірки пересилання на зовнішній пункт призначення.", "transports_hint": "• Глобальні правила маршрутизації переважають над маршрутами на основі відправника.
\n• Переважно використовувати транспорти на основі резолвінгу MX.
\n• Користувацькі політики TLS для вихідної пошти будуть проігноровані та використовуватимуть політику TLS, налаштовану тут.
\n• Протокол для доставки завжди \"smtp:\" і тому намагатиметься використовувати TLS, якщо наступний хост підтримує його. SMTPS (TLS, найчастіше порту 465) не підтримується.
\n• Адреси відповідні \"/localhost$/\" завжди будуть доставлені \"local:\", отже політика \"*\" не поширюється на них.
\n• Щоб визначити облікові дані для наступного вузла \"[host]:25\", Postfix завжди шукає дані для \"host\" перед тим як шукати \"[host]:25\". Така поведінка унеможливлює використання \"host\" and \"[host]:25\" одночасно.", "ui_header_announcement_help": "Оголошення видно на екрані входу в mailcow UI і всім користувачам, що ввійшли в систему.", - "unchanged_if_empty": "Якщо не змінено, залиште порожнім" + "unchanged_if_empty": "Якщо не змінено, залиште порожнім", + "allowed_methods": "Access-Control-Allow-Methods", + "f2b_max_ban_time": "Максимальний час блокування (с)", + "f2b_ban_time_increment": "Час бану збільшується з кожним баном", + "allowed_origins": "Access-Control-Allow-Origin", + "cors_settings": "Налаштування CORS", + "ip_check": "Перевірка IP", + "ip_check_disabled": "Перевірка IP вимкнена. Ви можете ввімкнути його в меню
Система > Конфігурація > Параметри > Налаштувати", + "ip_check_opt_in": "Згода на використання сторонніх служб ipv4.mailcow.email і ipv6.mailcow.email для визначення зовнішніх IP-адрес.", + "options": "Параметри", + "queue_unban": "розблокувати" }, "danger": { "alias_domain_invalid": "Неприпустимий псевдонім домену: %s", @@ -454,7 +464,17 @@ "tls_policy_map_dest_invalid": "Неприпустиме значення призначення політики", "tls_policy_map_parameter_invalid": "Неприпустиме значення параметра політики", "unlimited_quota_acl": "Необмежена квота заборонена політикою доступу", - "yotp_verification_failed": "Помилка валідації Yubico OTP: %s" + "yotp_verification_failed": "Помилка валідації Yubico OTP: %s", + "cors_invalid_method": "Вказано недійсний Allow-Method", + "webauthn_authenticator_failed": "Обраний автентифікатор не знайдено", + "webauthn_publickey_failed": "Для вибраного автентифікатора не було збережено відкритого ключа", + "webauthn_username_failed": "Обраний автентифікатор належить іншому акаунту", + "cors_invalid_origin": "Вказано недійсний Allow-Origin", + "demo_mode_enabled": "Демонстраційний режим увімкнено", + "extended_sender_acl_denied": "відсутній ACL для встановлення зовнішніх адрес відправників", + "template_exists": "Шаблон %s вже існує", + "template_id_invalid": "Ідентифікатор шаблону %s недійсний", + "template_name_invalid": "Ім'я шаблону невірне" }, "debug": { "chart_this_server": "Діаграма (цей сервер)", @@ -481,7 +501,21 @@ "username": "Ім'я користувача", "external_logs": "Зовнішні журнали", "jvm_memory_solr": "Використання оперативної пам'яті JVM", - "log_info": "

Журнали контейнерів mailcow зберігаються в Redis, і раз на хвилину рядки журналу за межами LOG_LINES (%d) видаляються, щоб зменшити навантаження на сервер.\n
Самі журнали контейнерів не зберігаються після перезавантаження контейнера. Усі контейнери додатково пишуть логи у службу Docker, і, отже, використовують драйвер логування за промовчанням. Журнали контейнерів призначені лише для налагодження дрібних проблем. Для інших завдань, будь ласка, настройте драйвер логування Docker самостійно.

\n

Зовнішні журнали збираються через API програм.

\n

Статичні журнали – це в основному журнали активності, які не записуються в Dockerd, але все одно повинні бути постійними (за винятком журналів API).

" + "log_info": "

Журнали контейнерів mailcow зберігаються в Redis, і раз на хвилину рядки журналу за межами LOG_LINES (%d) видаляються, щоб зменшити навантаження на сервер.\n
Самі журнали контейнерів не зберігаються після перезавантаження контейнера. Усі контейнери додатково пишуть логи у службу Docker, і, отже, використовують драйвер логування за промовчанням. Журнали контейнерів призначені лише для налагодження дрібних проблем. Для інших завдань, будь ласка, настройте драйвер логування Docker самостійно.

\n

Зовнішні журнали збираються через API програм.

\n

Статичні журнали – це в основному журнали активності, які не записуються в Dockerd, але все одно повинні бути постійними (за винятком журналів API).

", + "error_show_ip": "Не вдалося розпізнати публічні IP-адреси", + "no_update_available": "Система працює на останній версії", + "architecture": "Архітектура", + "container_running": "Працює", + "container_disabled": "Контейнер зупинено або вимкнено", + "container_stopped": "Зупинено", + "cores": "Ядра", + "current_time": "Системний час", + "memory": "Пам'ять", + "show_ip": "Показати загальнодоступну IP-адресу", + "timezone": "Часовий пояс", + "update_available": "Доступне оновлення", + "update_failed": "Не вдалося перевірити наявність оновлень", + "wip": "Наразі робота триває" }, "diagnostics": { "cname_from_a": "Значення, отримане із запису A/AAAA. Це підтримується, поки запис вказує на правильний ресурс.", @@ -607,7 +641,8 @@ "sender_acl_info": "Врахуйте, що якщо користувачеві поштового облікового запису А дозволено відправляти від імені користувача Б, то адреса користувача Б не з'явиться автоматично у списку \"Відправник\" при написанні листів у SOGo.
\n Користувач поштового облікового запису Б повинен створити делегування в SOGo, щоб користувач поштового облікового запису А міг вибрати його адресу як відправника. Делегування знаходиться в меню (три крапки) праворуч від імені поштового облікового запису у вікні пошти SOGo. Ця поведінка не відноситься до псевдонімів.", "sogo_visible_info": "Впливає лише на об'єкти, які можуть відображатися в SOGo (персональні або загальні псевдоніми, що вказують щонайменше на один локальний поштовий обліковий запис). Зверніть увагу, що якщо функцію вимкнено, користувач не зможе вибрати адресу псевдоніма як відправника в SOGo.", "target_address": "Власники псевдоніма, (розділені комами)", - "timeout2": "Тайм-аут для підключення до локального хоста" + "timeout2": "Тайм-аут для підключення до локального хоста", + "pushover_sound": "Звук" }, "fido2": { "confirm": "Підтвердити", @@ -648,7 +683,8 @@ "restart_netfilter": "Перезапустити netfilter", "restart_sogo": "Перезапустити SOGo", "user_settings": "Налаштування користувача", - "mailcow_config": "Конфігурація" + "mailcow_config": "Конфігурація", + "mailcow_system": "Система" }, "info": { "no_action": "Дій не передбачено", @@ -831,7 +867,13 @@ "target_address": "Власники псевдоніму", "tls_map_dest_info": "Приклади: example.org, .example.org, [mail.example.org]:25", "tls_map_parameters_info": "Залиште поле порожнім або вкажіть параметри, наприклад: protocols=!SSLv2 ciphers=medium exclude=3DES", - "tls_policy_maps_enforced_tls": "Для вихідних повідомлень від користувачів із включеною примусовою політикою шифрування вихідних з'єднань не описані глобальною політикою, будуть застосовані значення за замовчуванням, зазначені в smtp_tls_mandatory_protocols та smtp_tls_mandatory_ciphers." + "tls_policy_maps_enforced_tls": "Для вихідних повідомлень від користувачів із включеною примусовою політикою шифрування вихідних з'єднань не описані глобальною політикою, будуть застосовані значення за замовчуванням, зазначені в smtp_tls_mandatory_protocols та smtp_tls_mandatory_ciphers.", + "add_template": "Додати шаблон", + "domain_templates": "Шаблони доменів", + "relay_unknown": "Ретрансляція невідомих поштових скриньок", + "mailbox_templates": "Шаблони поштових скриньок", + "templates": "Шаблони", + "template": "Шаблон" }, "oauth2": { "authorize_app": "Авторизація додатка", @@ -896,7 +938,20 @@ "table_size_show_n": "Відображати %s полів" }, "queue": { - "queue_manager": "Черга на відправлення" + "queue_manager": "Черга на відправлення", + "delete": "Видалити все", + "info": "Поштова черга містить усі електронні листи, які очікують на доставку. Якщо електронний лист застряг у черзі на тривалий час, він автоматично видаляється системою.
Повідомлення про помилку відповідного листа містить інформацію про те, чому лист не може бути доставлено.", + "unhold_mail": "Зняти утримування", + "unhold_mail_legend": "Звільняє вибрані листи для доставки. (Потрібне попереднє утримання)", + "flush": "Очистити чергу", + "legend": "Функції дій з поштовими чергами:", + "ays": "Підтвердьте, що ви хочете видалити всі елементи з поточної черги.", + "deliver_mail": "Доставити", + "deliver_mail_legend": "проби повторної доставки вибраних листів.", + "hold_mail": "Утримати", + "hold_mail_legend": "Утримує вибрані листи. (Запобігає подальшим спробам доставки)", + "show_message": "Показати повідомлення", + "unban": "розблокувати чергу" }, "ratelimit": { "disabled": "Вимкнено", @@ -988,7 +1043,12 @@ "settings_map_added": "Правило додано", "tls_policy_map_entry_deleted": "Політику TLS ID %s видалено", "verified_totp_login": "Авторизацію TOTP пройдено", - "domain_add_dkim_available": "Ключ DKIM вже існує" + "domain_add_dkim_available": "Ключ DKIM вже існує", + "template_added": "Додано шаблон %s", + "template_modified": "Зміни до шаблону %s збережено", + "cors_headers_edited": "Налаштування CORS збережено", + "ip_check_opt_in_modified": "Перевірка IP-адреси успішно збережено", + "template_removed": "Шаблону із ID %s видалено" }, "tfa": { "confirm": "Підтвердьте", @@ -1176,7 +1236,8 @@ "tag_help_explain": "Перемістити до підпапки: буде створено нову підпапку в INBOX з ім'ям тега, наприклад: \"INBOX/Facebook\".
\n Додати до теми листа: ім'я тега буде додано до теми листа, наприклад: \"[Facebook] My News\".", "tls_policy_warning": "Попередження: якщо ви увімкнете примусове шифрування пошти, ви можете зіткнутися з втратою листів.
Повідомлення, які не відповідають політиці, будуть відкидатися з повідомленням поштовим сервером про серйозний збій.
Цей параметр застосовується до вашої основної адреси електронної пошти (логіну), усім особистим псевдонімам та псевдонімам доменів. Маються на увазі лише псевдоніми з однією поштовою скринькою, як одержувач.", "year": "рік", - "years": "років" + "years": "років", + "pushover_sound": "Звук" }, "warning": { "domain_added_sogo_failed": "Домен був доданий, але перезавантажити SOGo не вдалося, будь ласка, перевірте журнали сервера.", @@ -1190,5 +1251,31 @@ "hash_not_found": "Хеш не знайдено або вже видалено", "ip_invalid": "Пропущено недійсний IP: %s", "is_not_primary_alias": "Пропущено неосновний псевдонім %s" + }, + "datatables": { + "decimal": ".", + "infoPostFix": "datatables.infoPostFix", + "zeroRecords": "Відповідних записів не знайдено", + "aria": { + "sortAscending": ": активувати для сортування стовпців за зростанням", + "sortDescending": ": активувати для сортування стовпців за спаданням" + }, + "emptyTable": "У таблиці немає даних", + "expand_all": "Розгорнути всі", + "info": "Показано від _START_ до _END_ of _TOTAL_ записів", + "infoEmpty": "Показано від 0 до 0 із 0 записів", + "infoFiltered": "(відфільтровано з _MAX_ всіх записів)", + "thousands": ",", + "lengthMenu": "Показати записи _MENU_", + "loadingRecords": "Завантаження...", + "processing": "Будь ласка, зачекайте...", + "search": "Пошук:", + "paginate": { + "first": "Перший", + "last": "Останній", + "next": "Наступний", + "previous": "Попередній" + }, + "collapse_all": "Згорнути все" } } From 718dcb69be97c39f33d1ccb69378f7d1894ccbbb Mon Sep 17 00:00:00 2001 From: AlexHuebi <39099705+AlexHuebi@users.noreply.github.com> Date: Sat, 2 Sep 2023 02:53:55 +0200 Subject: [PATCH 15/72] improved "FQDN" check --- update.sh | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/update.sh b/update.sh index 8c5a4fb5..54ddcbc4 100755 --- a/update.sh +++ b/update.sh @@ -418,10 +418,23 @@ detect_docker_compose_command [[ ! -f mailcow.conf ]] && { echo "mailcow.conf is missing! Is mailcow installed?"; exit 1;} DOTS=${MAILCOW_HOSTNAME//[^.]}; -if [ ${#DOTS} -lt 2 ]; then +if [ ${#DOTS} -lt 1 ]; then echo "MAILCOW_HOSTNAME (${MAILCOW_HOSTNAME}) is not a FQDN!" echo "Please change it to a FQDN and run $COMPOSE_COMMAND down followed by $COMPOSE_COMMAND up -d" exit 1 +elif [[ "${MAILCOW_HOSTNAME: -1}" == "." ]]; then + echo "MAILCOW_HOSTNAME (${MAILCOW_HOSTNAME}) is ending with a dot. This is not a valid FQDN!" + exit 1 +elif [ ${#DOTS} -eq 1 ]; then + echo "MAILCOW_HOSTNAME (${MAILCOW_HOSTNAME}) does not contain a Subdomain. This is not fully tested and may cause issues." + echo "Find more information about why this message exists here: https://github.com/mailcow/mailcow-dockerized/issues/1572" + read -r -p "Do you want to proceed anyway? [y/N] " response + if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]; then + echo "OK. Procceding." + else + echo "OK. Exiting." + exit 1 + fi fi if grep --help 2>&1 | head -n 1 | grep -q -i "busybox"; then echo "BusyBox grep detected, please install gnu grep, \"apk add --no-cache --upgrade grep\""; exit 1; fi From 1e3766e2f113b440c566a20e2bfdf08c56470fed Mon Sep 17 00:00:00 2001 From: Kristian Feldsam Date: Sat, 8 Apr 2023 15:03:49 +0200 Subject: [PATCH 16/72] [Web] revisited dark mode theme, enhanced colors Signed-off-by: Kristian Feldsam --- data/web/css/themes/mailcow-darkmode.css | 303 ++++++++++++++--------- 1 file changed, 180 insertions(+), 123 deletions(-) diff --git a/data/web/css/themes/mailcow-darkmode.css b/data/web/css/themes/mailcow-darkmode.css index abaa7499..33016917 100644 --- a/data/web/css/themes/mailcow-darkmode.css +++ b/data/web/css/themes/mailcow-darkmode.css @@ -1,90 +1,123 @@ body { - background-color: #414141; - color: #e0e0e0; + background-color: #1c1c1e; + color: #f2f2f7; } .card { - border: 1px solid #1c1c1c; - background-color: #3a3a3a; + border: 1px solid #2c2c2e; + background-color: #2c2c2e; } + legend { - color: #f5f5f5; + color: #f2f2f7; } + .card-header { - color: #bbb; - background-color: #2c2c2c; + color: #8e8e93; + background-color: #1c1c1e; border-color: transparent; } + .btn-secondary, .paginate_button, .page-link, .btn-light { - color: #fff !important; - background-color: #7a7a7a !important; - border-color: #5c5c5c !important; + color: #f2f2f7 !important; + background-color: #5e5e5e !important; + border-color: #4c4c4e !important; } + .btn-dark { - color: #000 !important;; - background-color: #f6f6f6 !important;; - border-color: #ddd !important;; -} -.btn-check:checked+.btn-secondary, .btn-check:active+.btn-secondary, .btn-secondary:active, .btn-secondary.active, .show>.btn-secondary.dropdown-toggle { - border-color: #7a7a7a !important; -} -.alert-secondary { - color: #fff !important; - background-color: #7a7a7a !important; - border-color: #5c5c5c !important; -} -.bg-secondary { - color: #fff !important; - background-color: #7a7a7a !important; -} -.alert-secondary, .alert-secondary a, .alert-secondary .alert-link { - color: #fff; -} -.page-item.active .page-link { - background-color: #158cba !important; - border-color: #127ba3 !important; + color: #f2f2f7 !important; + background-color: #242424 !important; + border-color: #1c1c1e !important; } + .btn-secondary:focus, .btn-secondary:hover, .btn-group.open .dropdown-toggle.btn-secondary { - background-color: #7a7a7a; - border-color: #5c5c5c !important; - color: #fff; + background-color: #444444; + border-color: #4c4c4e !important; + color: #f2f2f7; } + +.btn-check:checked+.btn-secondary, .btn-check:active+.btn-secondary, .btn-secondary:active, .btn-secondary.active, .show>.btn-secondary.dropdown-toggle { + border-color: #5e5e5e !important; +} + +.alert-secondary { + color: #f2f2f7 !important; + background-color: #5e5e5e !important; + border-color: #4c4c4e !important; +} + +.bg-secondary { + color: #f2f2f7 !important; + background-color: #5e5e5e !important; +} + +.alert-secondary, .alert-secondary a, .alert-secondary .alert-link { + color: #f2f2f7; +} + +.page-item.active .page-link { + background-color: #3e3e3e !important; + border-color: #3e3e3e !important; +} + +.btn-secondary:focus, .btn-secondary:hover, .btn-group.open .dropdown-toggle.btn-secondary { + background-color: #5e5e5e; + border-color: #4c4c4e !important; + color: #f2f2f7; +} + .btn-secondary:disabled, .btn-secondary.disabled { - border-color: #7a7a7a !important; + border-color: #5e5e5e !important; } + .modal-content { - background-color: #414141; + background-color: #1c1c1e; } + .modal-header { - border-bottom: 1px solid #161616; + border-bottom: 1px solid #2c2c2e; } + .modal-title { - color: white; + color: #f2f2f7; } + .modal .btn-close { filter: invert(1) grayscale(100%) brightness(200%); } + .navbar.bg-light { - background-color: #222222 !important; - border-color: #181818; + background-color: #1c1c1e !important; + border-color: #2c2c2e; } + .nav-link { - color: #ccc !important; + color: #8e8e93 !important; } + .nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link { background: none; } + +.nav-tabs, .nav-tabs .nav-link { + border-color: #444444 !important; +} + .nav-tabs .nav-link:not(.disabled):hover, .nav-tabs .nav-link:not(.disabled):focus, .nav-tabs .nav-link.active { - border-bottom-color: #414141; + border-bottom-color: #1c1c1e !important; +} + +.card .nav-tabs .nav-link:not(.disabled):hover, .card .nav-tabs .nav-link:not(.disabled):focus, .card .nav-tabs .nav-link.active { + border-bottom-color: #2c2c2e !important; } .table, .table-striped>tbody>tr:nth-of-type(odd)>*, tbody tr { - color: #ccc !important; + color: #f2f2f7 !important; } .dropdown-menu { - background-color: #585858; - border: 1px solid #333; + background-color: #424242; + border: 1px solid #282828; } .dropdown-menu>li>a:focus, .dropdown-menu>li>a:hover { color: #fafafa; @@ -97,7 +130,7 @@ legend { color: #d4d4d4 !important; } tbody tr { - color: #555; + color: #ccc; } .navbar-default .navbar-nav>.open>a, .navbar-default .navbar-nav>.open>a:focus, .navbar-default .navbar-nav>.open>a:hover { color: #ccc; @@ -106,18 +139,15 @@ tbody tr { color: #ccc; } .list-group-item { - background-color: #333; + background-color: #282828; border: 1px solid #555; } .table-striped>tbody>tr:nth-of-type(odd) { - background-color: #333; + background-color: #424242; } table.dataTable>tbody>tr.child ul.dtr-details>li { border-bottom: 1px solid rgba(255, 255, 255, 0.13); } -tbody tr { - color: #ccc; -} .label.label-last-login { color: #ccc !important; background-color: #555 !important; @@ -133,20 +163,20 @@ div.numberedtextarea-number { } .well { border: 1px solid #555; - background-color: #333; + background-color: #282828; } pre { color: #ccc; - background-color: #333; + background-color: #282828; border: 1px solid #555; } input.form-control, textarea.form-control { color: #e2e2e2 !important; - background-color: #555 !important; + background-color: #424242 !important; border: 1px solid #999; } input.form-control:focus, textarea.form-control { - background-color: #555 !important; + background-color: #424242 !important; } input.form-control:disabled, textarea.form-disabled { color: #a8a8a8 !important; @@ -154,16 +184,14 @@ input.form-control:disabled, textarea.form-disabled { } .input-group-addon { color: #ccc; - background-color: #555 !important; + background-color: #424242 !important; border: 1px solid #999; } .input-group-text { color: #ccc; - background-color: #242424; + background-color: #1c1c1c; } - - .list-group-item { color: #ccc; } @@ -175,11 +203,11 @@ input.form-control:disabled, textarea.form-disabled { } .dropdown-item.active:hover { color: #fff !important; - background-color: #31b1e4; + background-color: #007aff; } .form-select { color: #e2e2e2!important; - background-color: #555!important; + background-color: #424242!important; border: 1px solid #999; } @@ -191,31 +219,6 @@ input.form-control:disabled, textarea.form-disabled { color: #fff !important; } - -.table-secondary { - --bs-table-bg: #7a7a7a; - --bs-table-striped-bg: #e4e4e4; - --bs-table-striped-color: #000; - --bs-table-active-bg: #d8d8d8; - --bs-table-active-color: #000; - --bs-table-hover-bg: #dedede; - --bs-table-hover-color: #000; - color: #000; - border-color: #d8d8d8; -} - -.table-light { - --bs-table-bg: #f6f6f6; - --bs-table-striped-bg: #eaeaea; - --bs-table-striped-color: #000; - --bs-table-active-bg: #dddddd; - --bs-table-active-color: #000; - --bs-table-hover-bg: #e4e4e4; - --bs-table-hover-color: #000; - color: #000; - border-color: #dddddd; -} - .form-control-plaintext { color: #e0e0e0; } @@ -289,12 +292,12 @@ a:hover { } .tag-box { - background-color: #555; - border: 1px solid #999; + background-color: #282828; + border: 1px solid #555; } .tag-input { color: #fff; - background-color: #555; + background-color: #282828; } .tag-add { color: #ccc; @@ -303,43 +306,20 @@ a:hover { color: #d1d1d1; } - -table.dataTable.dtr-inline.collapsed>tbody>tr>td.dtr-control:before:hover, -table.dataTable.dtr-inline.collapsed>tbody>tr>th.dtr-control:before:hover { - background-color: #7a7a7a !important; -} -table.dataTable.dtr-inline.collapsed>tbody>tr>td.dtr-control:before, -table.dataTable.dtr-inline.collapsed>tbody>tr>th.dtr-control:before { - background-color: #7a7a7a !important; - border: 1.5px solid #5c5c5c !important; - color: #fff !important; -} -table.dataTable.dtr-inline.collapsed>tbody>tr.parent>td.dtr-control:before, -table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th.dtr-control:before { - background-color: #949494; -} -table.dataTable.dtr-inline.collapsed>tbody>tr>td.child, -table.dataTable.dtr-inline.collapsed>tbody>tr>th.child, -table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty { - background-color: #444444; -} - .btn-check-label { color: #fff; } .btn-outline-secondary:hover { - background-color: #c3c3c3; + background-color: #5c5c5c; } .btn.btn-outline-secondary { - color: #fff !important; + color: #e0e0e0 !important; border-color: #7a7a7a !important; } .btn-check:checked+.btn-outline-secondary, .btn-check:active+.btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show { - background-color: #9b9b9b !important; + background-color: #7a7a7a !important; } - - .btn-input-missing, .btn-input-missing:hover, .btn-input-missing:active, @@ -347,27 +327,104 @@ table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty { .btn-input-missing:active:hover, .btn-input-missing:active:focus { color: #fff !important; - background-color: #ff2f24 !important; - border-color: #e21207 !important; + background-color: #ff3b30 !important; + border-color: #ff3b30 !important; } .inputMissingAttr { - border-color: #FF4136 !important; + border-color: #ff4136 !important; } - .list-group-details { - background: #444444; + background: #555; } .list-group-header { - background: #333; + background: #444; } span.mail-address-item { - background-color: #333; + background-color: #444; border-radius: 4px; border: 1px solid #555; padding: 2px 7px; display: inline-block; margin: 2px 6px 2px 0; } + +table.dataTable.dtr-inline.collapsed>tbody>tr>td.dtr-control:before:hover, +table.dataTable.dtr-inline.collapsed>tbody>tr>th.dtr-control:before:hover { + background-color: #7a7a7a !important; +} + +table.dataTable.dtr-inline.collapsed>tbody>tr>td.dtr-control:before, +table.dataTable.dtr-inline.collapsed>tbody>tr>th.dtr-control:before { + background-color: #7a7a7a !important; + border: 1.5px solid #5c5c5c !important; + color: #e0e0e0 !important; +} + +table.dataTable.dtr-inline.collapsed>tbody>tr.parent>td.dtr-control:before, +table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th.dtr-control:before { + background-color: #949494; +} + +table.dataTable.dtr-inline.collapsed>tbody>tr>td.child, +table.dataTable.dtr-inline.collapsed>tbody>tr>th.child, +table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty { + background-color: #414141; +} + +table.table, .table-striped>tbody>tr:nth-of-type(odd)>*, tbody tr { + color: #ccc !important; +} + +.table-secondary { + --bs-table-bg: #282828; + --bs-table-striped-bg: #343434; + --bs-table-striped-color: #f2f2f7; + --bs-table-active-bg: #4c4c4c; + --bs-table-active-color: #f2f2f7; + --bs-table-hover-bg: #3a3a3a; + --bs-table-hover-color: #f2f2f7; + color: #ccc; + border-color: #3a3a3a; +} + +.table-light { + --bs-table-bg: #3a3a3a; + --bs-table-striped-bg: #444444; + --bs-table-striped-color: #f2f2f7; + --bs-table-active-bg: #5c5c5c; + --bs-table-active-color: #f2f2f7; + --bs-table-hover-bg: #4c4c4c; + --bs-table-hover-color: #f2f2f7; + color: #ccc; + border-color: #4c4c4c; +} + +.table-bordered { + border-color: #3a3a3a; +} + +.table-bordered th, +.table-bordered td { + border-color: #3a3a3a !important; +} + +.table-bordered thead th, +.table-bordered thead td { + border-bottom-width: 2px; +} + +.table-striped>tbody>tr:nth-of-type(odd)>td, +.table-striped>tbody>tr:nth-of-type(odd)>th { + background-color: #282828; +} + +.table-hover>tbody>tr:hover { + background-color: #343434; +} + +.table>:not(caption)>*>* { + border-color: #5c5c5c; +} \ No newline at end of file From 1822d56efb00822ce194c513edfa3665e0d0beea Mon Sep 17 00:00:00 2001 From: Kristian Feldsam Date: Fri, 1 Sep 2023 14:14:51 +0200 Subject: [PATCH 17/72] [Web] fixed new mailbox settings buttons styling Signed-off-by: Kristian Feldsam Fixed input with btn in input group styling Signed-off-by: Kristian Feldsam --- data/web/css/build/014-mailcow.css | 9 +++++++++ data/web/css/themes/mailcow-darkmode.css | 10 +++++++--- data/web/templates/edit/domain.twig | 8 ++------ data/web/templates/modals/mailbox.twig | 18 +++++++++--------- data/web/templates/user/Spamfilter.twig | 8 ++------ 5 files changed, 29 insertions(+), 24 deletions(-) diff --git a/data/web/css/build/014-mailcow.css b/data/web/css/build/014-mailcow.css index 374d484d..86c02ac7 100644 --- a/data/web/css/build/014-mailcow.css +++ b/data/web/css/build/014-mailcow.css @@ -370,3 +370,12 @@ button[aria-expanded='true'] > .caret { .btn-check:checked+.btn-outline-secondary, .btn-check:active+.btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show { background-color: #f0f0f0 !important; } +.btn-check:checked+.btn-light, .btn-check:active+.btn-light, .btn-light:active, .btn-light.active, .show>.btn-light.dropdown-toggle { + color: #fff; + background-color: #555; + border-color: #4d4d4d; +} +.btn-check:checked+.btn-light:focus, .btn-check:active+.btn-light:focus, .btn-light:active:focus, .btn-light.active:focus, .show>.btn-light.dropdown-toggle:focus, +.btn-check:focus+.btn-light, .btn-light:focus { + box-shadow: none; +} \ No newline at end of file diff --git a/data/web/css/themes/mailcow-darkmode.css b/data/web/css/themes/mailcow-darkmode.css index 33016917..ccba786b 100644 --- a/data/web/css/themes/mailcow-darkmode.css +++ b/data/web/css/themes/mailcow-darkmode.css @@ -71,11 +71,11 @@ legend { } .modal-content { - background-color: #1c1c1e; + background-color: #2c2c2e; } .modal-header { - border-bottom: 1px solid #2c2c2e; + border-bottom: 1px solid #999; } .modal-title { @@ -319,7 +319,11 @@ a:hover { .btn-check:checked+.btn-outline-secondary, .btn-check:active+.btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show { background-color: #7a7a7a !important; } - +.btn-check:checked+.btn-light, .btn-check:active+.btn-light, .btn-light:active, .btn-light.active, .show>.btn-light.dropdown-toggle { + color: #f2f2f7 !important; + background-color: #242424 !important; + border-color: #1c1c1e !important; +} .btn-input-missing, .btn-input-missing:hover, .btn-input-missing:active, diff --git a/data/web/templates/edit/domain.twig b/data/web/templates/edit/domain.twig index 0c424887..700445dd 100644 --- a/data/web/templates/edit/domain.twig +++ b/data/web/templates/edit/domain.twig @@ -166,9 +166,7 @@
- - - +
@@ -185,9 +183,7 @@
- - - +
diff --git a/data/web/templates/modals/mailbox.twig b/data/web/templates/modals/mailbox.twig index 25185de0..aa98074b 100644 --- a/data/web/templates/modals/mailbox.twig +++ b/data/web/templates/modals/mailbox.twig @@ -78,16 +78,16 @@
- + - + - + - +

{{ lang.user.quarantine_notification_info }}

@@ -97,13 +97,13 @@
- + - + - +

{{ lang.user.quarantine_category_info }}

@@ -113,10 +113,10 @@
- + - +
diff --git a/data/web/templates/user/Spamfilter.twig b/data/web/templates/user/Spamfilter.twig index 144ead61..280b9003 100644 --- a/data/web/templates/user/Spamfilter.twig +++ b/data/web/templates/user/Spamfilter.twig @@ -45,9 +45,7 @@
- - - +
@@ -69,9 +67,7 @@
- - - +
From 6d9805109aa83b53fff3f08a17d0bd9ad323d9d9 Mon Sep 17 00:00:00 2001 From: Kristian Feldsam Date: Fri, 1 Sep 2023 18:10:34 +0200 Subject: [PATCH 18/72] [Web] styling enhancements Signed-off-by: Kristian Feldsam --- data/web/css/build/013-datatables.css | 5 ---- data/web/css/build/014-mailcow.css | 13 +++++++++- data/web/css/themes/mailcow-darkmode.css | 22 ++++++++++++++++- data/web/js/build/004-datatables.js | 2 +- data/web/templates/admin/tab-config-dkim.twig | 6 ++--- data/web/templates/admin/tab-config-f2b.twig | 18 +++++++------- .../templates/admin/tab-config-fwdhosts.twig | 2 +- data/web/templates/admin/tab-routing.twig | 2 +- data/web/templates/edit/mailbox.twig | 22 ++++++++--------- data/web/templates/mailbox/tab-domains.twig | 2 +- .../mailbox/tab-templates-domains.twig | 4 ++-- .../templates/mailbox/tab-templates-mbox.twig | 4 ++-- data/web/templates/modals/mailbox.twig | 18 +++++++------- .../web/templates/user/tab-user-settings.twig | 24 +++++++++---------- 14 files changed, 85 insertions(+), 59 deletions(-) diff --git a/data/web/css/build/013-datatables.css b/data/web/css/build/013-datatables.css index 13378460..57e2b6d9 100644 --- a/data/web/css/build/013-datatables.css +++ b/data/web/css/build/013-datatables.css @@ -42,11 +42,6 @@ table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th.dtr-control:before, table.dataTable td.dt-control:before { background-color: #979797 !important; } -table.dataTable.dtr-inline.collapsed>tbody>tr>td.child, -table.dataTable.dtr-inline.collapsed>tbody>tr>th.child, -table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty { - background-color: #fbfbfb; -} table.dataTable.table-striped>tbody>tr>td { vertical-align: middle; } diff --git a/data/web/css/build/014-mailcow.css b/data/web/css/build/014-mailcow.css index 86c02ac7..edc6b3d7 100644 --- a/data/web/css/build/014-mailcow.css +++ b/data/web/css/build/014-mailcow.css @@ -357,6 +357,7 @@ button[aria-expanded='true'] > .caret { } .progress { + height: 16px; background-color: #d5d5d5; } @@ -370,12 +371,22 @@ button[aria-expanded='true'] > .caret { .btn-check:checked+.btn-outline-secondary, .btn-check:active+.btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show { background-color: #f0f0f0 !important; } -.btn-check:checked+.btn-light, .btn-check:active+.btn-light, .btn-light:active, .btn-light.active, .show>.btn-light.dropdown-toggle { +.btn-check:checked+.btn-light, .btn-check:active+.btn-light, .btn-light:active, .btn-light.active, .show>.btn-light.dropdown-toggle { color: #fff; background-color: #555; + background-image: none; border-color: #4d4d4d; } .btn-check:checked+.btn-light:focus, .btn-check:active+.btn-light:focus, .btn-light:active:focus, .btn-light.active:focus, .show>.btn-light.dropdown-toggle:focus, .btn-check:focus+.btn-light, .btn-light:focus { box-shadow: none; +} +.btn-group>.btn:not(:last-of-type) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.badge.bg-info > a, +.badge.bg-danger > a { + color: #fff !important; + text-decoration: none; } \ No newline at end of file diff --git a/data/web/css/themes/mailcow-darkmode.css b/data/web/css/themes/mailcow-darkmode.css index ccba786b..ea95df97 100644 --- a/data/web/css/themes/mailcow-darkmode.css +++ b/data/web/css/themes/mailcow-darkmode.css @@ -18,6 +18,10 @@ legend { border-color: transparent; } +.card-body { + --bs-card-color: #bbb; +} + .btn-secondary, .paginate_button, .page-link, .btn-light { color: #f2f2f7 !important; background-color: #5e5e5e !important; @@ -71,6 +75,7 @@ legend { } .modal-content { + --bs-modal-color: #bbb; background-color: #2c2c2e; } @@ -79,7 +84,7 @@ legend { } .modal-title { - color: #f2f2f7; + color: #bbb; } .modal .btn-close { @@ -431,4 +436,19 @@ table.table, .table-striped>tbody>tr:nth-of-type(odd)>*, tbody tr { .table>:not(caption)>*>* { border-color: #5c5c5c; + --bs-table-color-state:#bbb; + --bs-table-bg: #3a3a3a; +} +.text-muted { + --bs-secondary-color: #8e8e93; +} +input::placeholder { + color: #8e8e93 !important; +} + +.form-select { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%238e8e93' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); +} +.btn-light, .btn-light:hover { + background-image: none; } \ No newline at end of file diff --git a/data/web/js/build/004-datatables.js b/data/web/js/build/004-datatables.js index 9ece8ea5..8c791713 100644 --- a/data/web/js/build/004-datatables.js +++ b/data/web/js/build/004-datatables.js @@ -15801,7 +15801,7 @@ DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, bu paginationEl.empty(); } else { - paginationEl = hostEl.html('
    ').children('ul').addClass('pagination'); + paginationEl = hostEl.html('
      ').children('ul').addClass('pagination pagination-sm'); } attach( diff --git a/data/web/templates/admin/tab-config-dkim.twig b/data/web/templates/admin/tab-config-dkim.twig index 96dccc66..857bfba2 100644 --- a/data/web/templates/admin/tab-config-dkim.twig +++ b/data/web/templates/admin/tab-config-dkim.twig @@ -114,7 +114,7 @@
      - @@ -159,7 +159,7 @@
      - diff --git a/data/web/templates/admin/tab-config-f2b.twig b/data/web/templates/admin/tab-config-f2b.twig index 4336591a..de4a7c63 100644 --- a/data/web/templates/admin/tab-config-f2b.twig +++ b/data/web/templates/admin/tab-config-f2b.twig @@ -92,28 +92,28 @@ {% endif %} {% for active_ban in f2b_data.active_bans %}

      - + - + {{ active_ban.network }} - ({{ active_ban.banned_until }}) - + ({{ active_ban.banned_until }}) + - {% if active_ban.queued_for_unban == 0 %} - [{{ lang.admin.queue_unban }}] - [whitelist] - [blacklist (needs restart)] + [{{ lang.admin.queue_unban }}] + [whitelist] + [blacklist (needs restart)] {% else %} {{ lang.admin.unban_pending }} {% endif %} -

      {% endfor %}
      {% for perm_ban in f2b_data.perm_bans %}

      - + - + {{ perm_ban.network }} diff --git a/data/web/templates/admin/tab-config-fwdhosts.twig b/data/web/templates/admin/tab-config-fwdhosts.twig index 31de2036..d3efddd8 100644 --- a/data/web/templates/admin/tab-config-fwdhosts.twig +++ b/data/web/templates/admin/tab-config-fwdhosts.twig @@ -9,7 +9,7 @@

      {{ lang.admin.forwarding_hosts_hint }}

      -
      +
      {{ lang.mailbox.quick_actions }} diff --git a/data/web/templates/admin/tab-routing.twig b/data/web/templates/admin/tab-routing.twig index 5eca7eb1..c6e59601 100644 --- a/data/web/templates/admin/tab-routing.twig +++ b/data/web/templates/admin/tab-routing.twig @@ -55,7 +55,7 @@

      {{ lang.admin.transports_hint|raw }}

      -
      +
      {{ lang.mailbox.quick_actions }} diff --git a/data/web/templates/edit/mailbox.twig b/data/web/templates/edit/mailbox.twig index f8cde7da..c08ff74f 100644 --- a/data/web/templates/edit/mailbox.twig +++ b/data/web/templates/edit/mailbox.twig @@ -109,25 +109,25 @@
      - - - - - - -
      -
      +
      @@ -252,7 +252,7 @@
      {% endif %} -
      +
      diff --git a/data/web/templates/mailbox/tab-domains.twig b/data/web/templates/mailbox/tab-domains.twig index a30438d1..8b2d61b7 100644 --- a/data/web/templates/mailbox/tab-domains.twig +++ b/data/web/templates/mailbox/tab-domains.twig @@ -28,7 +28,7 @@
    • {{ lang.datatables.collapse_all }}
    {% if mailcow_cc_role == 'admin' %} - {{ lang.mailbox.add_domain }} + {% endif %} diff --git a/data/web/templates/mailbox/tab-templates-domains.twig b/data/web/templates/mailbox/tab-templates-domains.twig index 64e72ce4..c339aaf0 100644 --- a/data/web/templates/mailbox/tab-templates-domains.twig +++ b/data/web/templates/mailbox/tab-templates-domains.twig @@ -24,7 +24,7 @@ {% endif %}
{% if mailcow_cc_role == 'admin' %} - {{ lang.mailbox.add_template }} + {% endif %} @@ -42,7 +42,7 @@ {% endif %} {% if mailcow_cc_role == 'admin' %} - {{ lang.mailbox.add_template }} + {% endif %} diff --git a/data/web/templates/mailbox/tab-templates-mbox.twig b/data/web/templates/mailbox/tab-templates-mbox.twig index f71eb7fd..631394bb 100644 --- a/data/web/templates/mailbox/tab-templates-mbox.twig +++ b/data/web/templates/mailbox/tab-templates-mbox.twig @@ -24,7 +24,7 @@ {% endif %} {% if mailcow_cc_role == 'admin' %} - {{ lang.mailbox.add_template }} + {% endif %} @@ -42,7 +42,7 @@ {% endif %} {% if mailcow_cc_role == 'admin' %} - {{ lang.mailbox.add_template }} + {% endif %} diff --git a/data/web/templates/modals/mailbox.twig b/data/web/templates/modals/mailbox.twig index aa98074b..44ba149f 100644 --- a/data/web/templates/modals/mailbox.twig +++ b/data/web/templates/modals/mailbox.twig @@ -248,16 +248,16 @@
- + - + - + - +

{{ lang.user.quarantine_notification_info }}

@@ -267,13 +267,13 @@
- + - + - +

{{ lang.user.quarantine_category_info }}

@@ -283,10 +283,10 @@
- + - +
diff --git a/data/web/templates/user/tab-user-settings.twig b/data/web/templates/user/tab-user-settings.twig index 3a2ee5ff..3fe0db33 100644 --- a/data/web/templates/user/tab-user-settings.twig +++ b/data/web/templates/user/tab-user-settings.twig @@ -12,19 +12,19 @@
{{ lang.user.tag_handling }}:
- - -
- -
- - - -
- - -
'; - item.chkbox = ''; + item.chkbox = ''; }); } else if (table == 'queuetable') { $.each(data, function (i, item) { - item.chkbox = ''; + item.chkbox = ''; rcpts = $.map(item.recipients, function(i) { return escapeHtml(i); }); @@ -550,7 +550,7 @@ jQuery(function($){ item.action = ''; - item.chkbox = ''; + item.chkbox = ''; }); } else if (table == 'oauth2clientstable') { $.each(data, function (i, item) { @@ -560,13 +560,13 @@ jQuery(function($){ '
'; item.scope = "profile"; item.grant_types = 'refresh_token password authorization_code'; - item.chkbox = ''; + item.chkbox = ''; }); } else if (table == 'domainadminstable') { $.each(data, function (i, item) { item.selected_domains = escapeHtml(item.selected_domains); item.selected_domains = item.selected_domains.toString().replace(/,/g, "
"); - item.chkbox = ''; + item.chkbox = ''; item.action = '
' + ' ' + lang.edit + '' + ' ' + lang.remove + '' + @@ -580,7 +580,7 @@ jQuery(function($){ } else { item.usr = item.username; } - item.chkbox = ''; + item.chkbox = ''; item.action = '
' + ' ' + lang.edit + '' + ' ' + lang.remove + '' + diff --git a/data/web/js/site/edit.js b/data/web/js/site/edit.js index 4680bdfa..cd938cd8 100644 --- a/data/web/js/site/edit.js +++ b/data/web/js/site/edit.js @@ -93,10 +93,10 @@ jQuery(function($){ dataSrc: function(data){ $.each(data, function (i, item) { if (!validateEmail(item.object)) { - item.chkbox = ''; + item.chkbox = ''; } else { - item.chkbox = ''; + item.chkbox = ''; } }); @@ -154,10 +154,10 @@ jQuery(function($){ dataSrc: function(data){ $.each(data, function (i, item) { if (!validateEmail(item.object)) { - item.chkbox = ''; + item.chkbox = ''; } else { - item.chkbox = ''; + item.chkbox = ''; } }); diff --git a/data/web/js/site/mailbox.js b/data/web/js/site/mailbox.js index 3ddeea94..50ce59df 100644 --- a/data/web/js/site/mailbox.js +++ b/data/web/js/site/mailbox.js @@ -466,7 +466,7 @@ jQuery(function($){ item.def_quota_for_mbox = humanFileSize(item.def_quota_for_mbox); item.max_quota_for_mbox = humanFileSize(item.max_quota_for_mbox); - item.chkbox = ''; + item.chkbox = ''; item.action = '
'; if (role == "admin") { item.action += ' ' + lang.edit + '' + @@ -650,7 +650,7 @@ jQuery(function($){ url: "/api/v1/get/domain/template/all", dataSrc: function(json){ $.each(json, function (i, item) { - item.chkbox = ''; + item.chkbox = ''; item.attributes.def_quota_for_mbox = humanFileSize(item.attributes.def_quota_for_mbox); item.attributes.max_quota_for_mbox = humanFileSize(item.attributes.max_quota_for_mbox); @@ -880,7 +880,7 @@ jQuery(function($){ } } */ - item.chkbox = ''; + item.chkbox = ''; if (item.attributes.passwd_update != '0') { var last_pw_change = new Date(item.attributes.passwd_update.replace(/-/g, "/")); item.last_pw_change = last_pw_change.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"}); @@ -1148,7 +1148,7 @@ jQuery(function($){ url: "/api/v1/get/mailbox/template/all", dataSrc: function(json){ $.each(json, function (i, item) { - item.chkbox = ''; + item.chkbox = ''; item.template = escapeHtml(item.template); if (item.attributes.rl_frame === "s"){ @@ -1381,7 +1381,7 @@ jQuery(function($){ ' ' + lang.edit + '' + ' ' + lang.remove + '' + '
'; - item.chkbox = ''; + item.chkbox = ''; item.name = escapeHtml(item.name); item.description = escapeHtml(item.description); }); @@ -1521,7 +1521,7 @@ jQuery(function($){ ' ' + lang.edit + '' + ' ' + lang.remove + '' + '
'; - item.chkbox = ''; + item.chkbox = ''; item.local_dest = escapeHtml(item.local_dest); item.bcc_dest = escapeHtml(item.bcc_dest); if (item.type == 'sender') { @@ -1635,7 +1635,7 @@ jQuery(function($){ ' ' + lang.edit + '' + ' ' + lang.remove + '' + '
'; - item.chkbox = ''; + item.chkbox = ''; }); return json; @@ -1737,7 +1737,7 @@ jQuery(function($){ ' ' + lang.edit + '' + ' ' + lang.remove + '' + '
'; - item.chkbox = ''; + item.chkbox = ''; }); return json; @@ -1835,7 +1835,7 @@ jQuery(function($){ ' ' + lang.edit + '' + ' ' + lang.remove + '' + '
'; - item.chkbox = ''; + item.chkbox = ''; item.goto = escapeHtml(item.goto.replace(/,/g, " ")); if (item.public_comment !== null) { item.public_comment = escapeHtml(item.public_comment); @@ -1958,7 +1958,7 @@ jQuery(function($){ table.on('responsive-resize', function (e, datatable, columns){ hideTableExpandCollapseBtn('#tab-mbox-aliases', '#alias_table'); }); - + table.on( 'draw', function (){ $('#alias_table [data-bs-toggle="tooltip"]').tooltip(); }); @@ -1995,7 +1995,7 @@ jQuery(function($){ ' ' + lang.remove + '' + ' DNS
' + ''; - item.chkbox = ''; + item.chkbox = ''; if(item.parent_is_backupmx == '1') { item.target_domain = '' + item.target_domain + '
' + lang.alias_domain_backupmx + '
'; } else { @@ -2096,7 +2096,7 @@ jQuery(function($){ ' ' + lang.edit + '' + ' ' + lang.remove + '' + ''; - item.chkbox = ''; + item.chkbox = ''; if (item.is_running == 1) { item.is_running = '' + lang.running + ''; } else { @@ -2250,7 +2250,7 @@ jQuery(function($){ ' ' + lang.edit + '' + ' ' + lang.remove + '' + ''; - item.chkbox = '' + item.chkbox = '' }); return json; @@ -2344,7 +2344,7 @@ jQuery(function($){ } }); }) - + observer.observe(element_object); }); } diff --git a/data/web/js/site/quarantine.js b/data/web/js/site/quarantine.js index 18d7a1d5..8d7f2225 100644 --- a/data/web/js/site/quarantine.js +++ b/data/web/js/site/quarantine.js @@ -77,7 +77,7 @@ jQuery(function($){ ' ' + lang.show_item + '' + ''; } - item.chkbox = ''; + item.chkbox = ''; }); return data; diff --git a/data/web/js/site/queue.js b/data/web/js/site/queue.js index f37884a6..26c15091 100644 --- a/data/web/js/site/queue.js +++ b/data/web/js/site/queue.js @@ -48,7 +48,7 @@ jQuery(function($){ url: "/api/v1/get/mailq/all", dataSrc: function(data){ $.each(data, function (i, item) { - item.chkbox = ''; + item.chkbox = ''; rcpts = $.map(item.recipients, function(i) { return escapeHtml(i); }); diff --git a/data/web/js/site/user.js b/data/web/js/site/user.js index 2227e0b0..088321cd 100644 --- a/data/web/js/site/user.js +++ b/data/web/js/site/user.js @@ -127,7 +127,7 @@ jQuery(function($){ } } - + function createSortableDate(td, cellData, date_string = false) { if (date_string) var date = new Date(cellData); @@ -169,11 +169,11 @@ jQuery(function($){ item.action = ''; - item.chkbox = ''; + item.chkbox = ''; item.address = escapeHtml(item.address); } else { - item.chkbox = ''; + item.chkbox = ''; item.action = '-'; } }); @@ -263,11 +263,11 @@ jQuery(function($){ ' ' + lang.edit + '' + ' ' + lang.remove + '' + ''; - item.chkbox = ''; + item.chkbox = ''; } else { item.action = '-'; - item.chkbox = ''; + item.chkbox = ''; } if (item.is_running == 1) { item.is_running = '' + lang.running + ''; @@ -420,11 +420,11 @@ jQuery(function($){ ' ' + lang.edit + '' + ' ' + lang.remove + '' + ''; - item.chkbox = ''; + item.chkbox = ''; } else { item.action = '-'; - item.chkbox = ''; + item.chkbox = ''; } }); @@ -503,13 +503,13 @@ jQuery(function($){ console.log(data); $.each(data, function (i, item) { if (validateEmail(item.object)) { - item.chkbox = ''; + item.chkbox = ''; } else { - item.chkbox = ''; + item.chkbox = ''; } if (acl_data.spam_policy === 0) { - item.chkbox = ''; + item.chkbox = ''; } }); @@ -574,13 +574,13 @@ jQuery(function($){ console.log(data); $.each(data, function (i, item) { if (validateEmail(item.object)) { - item.chkbox = ''; + item.chkbox = ''; } else { - item.chkbox = ''; + item.chkbox = ''; } if (acl_data.spam_policy === 0) { - item.chkbox = ''; + item.chkbox = ''; } }); diff --git a/data/web/templates/admin/tab-config-admins.twig b/data/web/templates/admin/tab-config-admins.twig index f33067f6..b672b815 100644 --- a/data/web/templates/admin/tab-config-admins.twig +++ b/data/web/templates/admin/tab-config-admins.twig @@ -146,7 +146,7 @@
@@ -159,7 +159,7 @@
@@ -191,7 +191,7 @@
@@ -204,7 +204,7 @@
diff --git a/data/web/templates/admin/tab-config-customize.twig b/data/web/templates/admin/tab-config-customize.twig index e458eeb3..88d1c664 100644 --- a/data/web/templates/admin/tab-config-customize.twig +++ b/data/web/templates/admin/tab-config-customize.twig @@ -111,7 +111,7 @@

-
+
diff --git a/data/web/templates/admin/tab-config-dkim.twig b/data/web/templates/admin/tab-config-dkim.twig index 857bfba2..85c6dc6a 100644 --- a/data/web/templates/admin/tab-config-dkim.twig +++ b/data/web/templates/admin/tab-config-dkim.twig @@ -20,7 +20,7 @@ {% for domain, domain_data in dkim_domains %} {% if domain_data.dkim %}
-
+

{{ lang.admin.domain }}: {{ domain }}

{{ lang.admin.dkim_key_valid }}

@@ -31,7 +31,7 @@
- + {{ lang.admin.dkim_private_key }}
@@ -50,7 +50,7 @@ {% for alias_domain, alias_domain_data in domain_data.alias_domains %} {% if alias_domain_data.dkim %}
-
+

↳ Alias-Domain: {{ alias_domain }}

{{ lang.admin.dkim_key_valid }}

@@ -78,7 +78,7 @@ {% endfor %} {% for blind, data in dkim_blind_domains|filter(data => data.dkim is not null) %}
-
+

{{ lang.admin.domain }}: {{ blind }}

{{ lang.admin.dkim_key_unused }}

@@ -143,7 +143,7 @@
diff --git a/data/web/templates/admin/tab-config-password-policy.twig b/data/web/templates/admin/tab-config-password-policy.twig index dd77f3a3..8209ba54 100644 --- a/data/web/templates/admin/tab-config-password-policy.twig +++ b/data/web/templates/admin/tab-config-password-policy.twig @@ -21,7 +21,7 @@
diff --git a/data/web/templates/admin/tab-config-rsettings.twig b/data/web/templates/admin/tab-config-rsettings.twig index bf529632..38b0d593 100644 --- a/data/web/templates/admin/tab-config-rsettings.twig +++ b/data/web/templates/admin/tab-config-rsettings.twig @@ -57,7 +57,7 @@
diff --git a/data/web/templates/admin/tab-globalfilter-regex.twig b/data/web/templates/admin/tab-globalfilter-regex.twig index 086ce533..386cffc1 100644 --- a/data/web/templates/admin/tab-globalfilter-regex.twig +++ b/data/web/templates/admin/tab-globalfilter-regex.twig @@ -12,7 +12,7 @@
diff --git a/data/web/templates/admin/tab-routing.twig b/data/web/templates/admin/tab-routing.twig index c6e59601..07d97955 100644 --- a/data/web/templates/admin/tab-routing.twig +++ b/data/web/templates/admin/tab-routing.twig @@ -90,12 +90,12 @@

{{ lang.admin.credentials_transport_warning|raw }}

diff --git a/data/web/templates/admin/tab-sys-mails.twig b/data/web/templates/admin/tab-sys-mails.twig index 1b842ff8..105151f7 100644 --- a/data/web/templates/admin/tab-sys-mails.twig +++ b/data/web/templates/admin/tab-sys-mails.twig @@ -60,7 +60,7 @@
diff --git a/data/web/templates/edit/admin.twig b/data/web/templates/edit/admin.twig index 8806b068..e2c6f66e 100644 --- a/data/web/templates/edit/admin.twig +++ b/data/web/templates/edit/admin.twig @@ -27,15 +27,15 @@
-
- +
+
-
- +
+
diff --git a/data/web/templates/edit/alias.twig b/data/web/templates/edit/alias.twig index 83a3760c..48d19617 100644 --- a/data/web/templates/edit/alias.twig +++ b/data/web/templates/edit/alias.twig @@ -19,19 +19,19 @@
-
- +
+
-
- +
+
-
- +
+
{% if not skip_sogo %}
-
- +
+

{{ lang.edit.sogo_visible_info }}

{% endif %} @@ -53,8 +53,8 @@
-
- +
+
diff --git a/data/web/templates/edit/aliasdomain.twig b/data/web/templates/edit/aliasdomain.twig index 808d128e..e2ecd487 100644 --- a/data/web/templates/edit/aliasdomain.twig +++ b/data/web/templates/edit/aliasdomain.twig @@ -17,8 +17,8 @@
-
- +
+
diff --git a/data/web/templates/edit/app-passwd.twig b/data/web/templates/edit/app-passwd.twig index fcd9d049..46dc648d 100644 --- a/data/web/templates/edit/app-passwd.twig +++ b/data/web/templates/edit/app-passwd.twig @@ -26,8 +26,8 @@
-
- +
+
diff --git a/data/web/templates/edit/bcc.twig b/data/web/templates/edit/bcc.twig index f7d0c5ca..fb7a538a 100644 --- a/data/web/templates/edit/bcc.twig +++ b/data/web/templates/edit/bcc.twig @@ -24,8 +24,8 @@
-
- +
+
diff --git a/data/web/templates/edit/domain-templates.twig b/data/web/templates/edit/domain-templates.twig index 5a0cbb69..c58693b2 100644 --- a/data/web/templates/edit/domain-templates.twig +++ b/data/web/templates/edit/domain-templates.twig @@ -64,16 +64,16 @@
-
- +
+ {{ lang.edit.gal_info|raw }}
-
- +
+
@@ -111,12 +111,12 @@
-
- +
+
- +

{{ lang.edit.relay_all_info|raw }}

- +

{{ lang.edit.relay_transport_info|raw }}

diff --git a/data/web/templates/edit/domain.twig b/data/web/templates/edit/domain.twig index 700445dd..4ba25cf7 100644 --- a/data/web/templates/edit/domain.twig +++ b/data/web/templates/edit/domain.twig @@ -29,7 +29,7 @@
{% for tag in domain_details.tags %} - + {{ tag }} {% endfor %} @@ -91,12 +91,12 @@
-
- +
+
- +

{{ lang.edit.relay_all_info|raw }}

- +

{{ lang.edit.relay_transport_info|raw }}


@@ -106,8 +106,8 @@ {% endif %}
-
- +
+ {{ lang.edit.gal_info|raw }}
@@ -115,8 +115,8 @@
-
- +
+
@@ -211,8 +211,8 @@
-
- +
+
diff --git a/data/web/templates/edit/domainadmin.twig b/data/web/templates/edit/domainadmin.twig index d241fa53..2c40faaa 100644 --- a/data/web/templates/edit/domainadmin.twig +++ b/data/web/templates/edit/domainadmin.twig @@ -40,15 +40,15 @@
-
- +
+
-
- +
+
diff --git a/data/web/templates/edit/filter.twig b/data/web/templates/edit/filter.twig index ff4ac4ee..124ecaf7 100644 --- a/data/web/templates/edit/filter.twig +++ b/data/web/templates/edit/filter.twig @@ -28,8 +28,8 @@
-
- +
+
diff --git a/data/web/templates/edit/mailbox-templates.twig b/data/web/templates/edit/mailbox-templates.twig index fea99bdd..28f45b56 100644 --- a/data/web/templates/edit/mailbox-templates.twig +++ b/data/web/templates/edit/mailbox-templates.twig @@ -9,8 +9,8 @@ - - + +
@@ -61,10 +61,10 @@
- + - +
@@ -77,7 +77,7 @@
- +
@@ -97,7 +97,7 @@
- @@ -140,8 +140,8 @@
-
- +
+ {{ lang.edit.force_pw_update_info|format(ui_texts.main_name) }}
@@ -149,8 +149,8 @@ {% if not skip_sogo %}
-
- +
+ {{ lang.edit.sogo_access_info }}
diff --git a/data/web/templates/edit/mailbox.twig b/data/web/templates/edit/mailbox.twig index c08ff74f..c020cb0a 100644 --- a/data/web/templates/edit/mailbox.twig +++ b/data/web/templates/edit/mailbox.twig @@ -28,7 +28,7 @@
{% for tag in mailbox_details.tags %} - + {{ tag }} {% endfor %} @@ -236,8 +236,8 @@
-
- +
+ {{ lang.edit.force_pw_update_info|format(ui_texts.main_name) }}
@@ -245,8 +245,8 @@ {% if not skip_sogo %}
-
- +
+ {{ lang.edit.sogo_access_info }}
@@ -329,8 +329,8 @@
-
- +
+
@@ -343,11 +343,11 @@
-
- +
+
-
- +
+
diff --git a/data/web/templates/edit/recipient_map.twig b/data/web/templates/edit/recipient_map.twig index 9af30a3b..c7f3493c 100644 --- a/data/web/templates/edit/recipient_map.twig +++ b/data/web/templates/edit/recipient_map.twig @@ -22,8 +22,8 @@
-
- +
+
diff --git a/data/web/templates/edit/relayhost.twig b/data/web/templates/edit/relayhost.twig index c6689816..31871707 100644 --- a/data/web/templates/edit/relayhost.twig +++ b/data/web/templates/edit/relayhost.twig @@ -26,8 +26,8 @@
-
- +
+
diff --git a/data/web/templates/edit/resource.twig b/data/web/templates/edit/resource.twig index 4ba65bd2..7fdc556e 100644 --- a/data/web/templates/edit/resource.twig +++ b/data/web/templates/edit/resource.twig @@ -38,8 +38,8 @@
-
- +
+
diff --git a/data/web/templates/edit/syncjob.twig b/data/web/templates/edit/syncjob.twig index d2172e64..40ae00fc 100644 --- a/data/web/templates/edit/syncjob.twig +++ b/data/web/templates/edit/syncjob.twig @@ -101,50 +101,50 @@
-
- +
+
-
- +
+
-
- +
+
-
- +
+
-
- +
+
-
- +
+
-
- +
+
diff --git a/data/web/templates/edit/tls_policy_map.twig b/data/web/templates/edit/tls_policy_map.twig index 199bbfef..aa89575b 100644 --- a/data/web/templates/edit/tls_policy_map.twig +++ b/data/web/templates/edit/tls_policy_map.twig @@ -32,8 +32,8 @@
-
- +
+
diff --git a/data/web/templates/edit/transport.twig b/data/web/templates/edit/transport.twig index 2fc461f6..4aedb53d 100644 --- a/data/web/templates/edit/transport.twig +++ b/data/web/templates/edit/transport.twig @@ -32,15 +32,15 @@
-
- +
+
-
- +
+
diff --git a/data/web/templates/modals/admin.twig b/data/web/templates/modals/admin.twig index 15971e59..2271ca7f 100644 --- a/data/web/templates/modals/admin.twig +++ b/data/web/templates/modals/admin.twig @@ -22,8 +22,8 @@
-
- +
+
@@ -81,8 +81,8 @@
-
- +
+
@@ -181,8 +181,8 @@
-
- +
+
diff --git a/data/web/templates/modals/mailbox.twig b/data/web/templates/modals/mailbox.twig index 44ba149f..e59d630a 100644 --- a/data/web/templates/modals/mailbox.twig +++ b/data/web/templates/modals/mailbox.twig @@ -98,10 +98,10 @@
- + - +
@@ -114,7 +114,7 @@
- +
@@ -176,8 +176,8 @@
-
- +
+ {{ lang.edit.force_pw_update_info|format(ui_texts.main_name) }}
@@ -185,8 +185,8 @@ {% if not skip_sogo %}
-
- +
+ {{ lang.edit.sogo_access_info }}
@@ -216,7 +216,7 @@ - +
@@ -268,10 +268,10 @@
- + - +
@@ -284,7 +284,7 @@
- +
@@ -304,7 +304,7 @@
- @@ -347,8 +347,8 @@
-
- +
+ {{ lang.edit.force_pw_update_info|format(ui_texts.main_name) }}
@@ -356,8 +356,8 @@ {% if not skip_sogo %}
-
- +
+ {{ lang.edit.sogo_access_info }}
@@ -445,8 +445,8 @@ {% if not skip_sogo %}
-
- +
+ {{ lang.edit.gal_info|raw }}
@@ -454,8 +454,8 @@ {% endif %}
-
- +
+
@@ -491,12 +491,12 @@
-
- +
+
- +

{{ lang.add.relay_all_info|raw }}

- +

{{ lang.add.relay_transport_info|raw }}

@@ -584,16 +584,16 @@
-
- +
+ {{ lang.add.gal_info|raw }}
-
- +
+
@@ -633,12 +633,12 @@
-
- +
+
- +

{{ lang.edit.relay_all_info|raw }}

- +

{{ lang.edit.relay_transport_info|raw }}

@@ -708,8 +708,8 @@
-
- +
+
@@ -746,19 +746,19 @@

{{ lang.add.target_address_info|raw }}

-
- +
+
-
- +
+
-
- +
+
{% if not skip_sogo %}
-
- +
+

{{ lang.edit.sogo_visible_info }}

{% endif %} @@ -766,8 +766,8 @@
-
- +
+
@@ -811,8 +811,8 @@
-
- +
+
@@ -967,50 +967,50 @@
-
- +
+
-
- +
+
-
- +
+
-
- +
+
-
- +
+
-
- +
+
-
- +
+
@@ -1068,8 +1068,8 @@
-
- +
+
@@ -1121,8 +1121,8 @@
-
- +
+
@@ -1162,8 +1162,8 @@
-
- +
+
@@ -1218,8 +1218,8 @@
-
- +
+
diff --git a/data/web/templates/modals/user.twig b/data/web/templates/modals/user.twig index 8c96397f..96605f70 100644 --- a/data/web/templates/modals/user.twig +++ b/data/web/templates/modals/user.twig @@ -127,50 +127,50 @@
-
- +
+
-
- +
+
-
- +
+
-
- +
+
-
- +
+
-
- +
+
-
- +
+
@@ -228,8 +228,8 @@
-
- +
+
diff --git a/data/web/templates/user/Pushover.twig b/data/web/templates/user/Pushover.twig index 61c91ea6..acc019ca 100644 --- a/data/web/templates/user/Pushover.twig +++ b/data/web/templates/user/Pushover.twig @@ -80,8 +80,8 @@
-
- +
+
@@ -95,11 +95,11 @@
-
- +
+
-
- +
+
From 25d6e0bbd08d5c7539ad1064e7d03c5a1c6b48a2 Mon Sep 17 00:00:00 2001 From: Mirko Ceroni Date: Sat, 2 Sep 2023 11:34:29 +0200 Subject: [PATCH 20/72] enable search in bodies from EAS enable search in bodies from EAS --- data/conf/sogo/sogo.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/data/conf/sogo/sogo.conf b/data/conf/sogo/sogo.conf index 2c042c30..d12333a8 100644 --- a/data/conf/sogo/sogo.conf +++ b/data/conf/sogo/sogo.conf @@ -83,6 +83,7 @@ //SoDebugBaseURL = YES; //ImapDebugEnabled = YES; //SOGoEASDebugEnabled = YES; + SOGoEASSearchInBody = YES //LDAPDebugEnabled = YES; //PGDebugEnabled = YES; //MySQL4DebugEnabled = YES; From 1a207f4d880c8e0669f6148ef038fe24c84950e5 Mon Sep 17 00:00:00 2001 From: Kristian Feldsam Date: Sun, 3 Sep 2023 00:18:11 +0200 Subject: [PATCH 21/72] [Web] translated datatables to CZ and SK Signed-off-by: Kristian Feldsam --- data/web/lang/lang.cs-cz.json | 23 +++++++++++++++++++++++ data/web/lang/lang.sk-sk.json | 24 ++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/data/web/lang/lang.cs-cz.json b/data/web/lang/lang.cs-cz.json index d4f62495..b709de5e 100644 --- a/data/web/lang/lang.cs-cz.json +++ b/data/web/lang/lang.cs-cz.json @@ -459,6 +459,29 @@ "value_missing": "Prosím, uveďte všechny hodnoty", "yotp_verification_failed": "Yubico OTP ověření selhalo: %s" }, + "datatables": { + "emptyTable": "Tabulka neobsahuje žádná data", + "info": "Zobrazuji _START_ až _END_ z celkem _TOTAL_ záznamů", + "infoEmpty": "Zobrazuji 0 až 0 z 0 záznamů", + "infoFiltered": "(filtrováno z celkem _MAX_ záznamů)", + "loadingRecords": "Načítám...", + "zeroRecords": "Žádné záznamy nebyly nalezeny", + "paginate": { + "first": "První", + "last": "Poslední", + "next": "Další", + "previous": "Předchozí" + }, + "aria": { + "sortAscending": ": aktivujte pro seřazení vzestupně", + "sortDescending": ": aktivujte pro seřazení sestupně" + }, + "lengthMenu": "Zobrazit _MENU_ výsledků", + "processing": "Zpracovávání...", + "search": "Vyhledávání:", + "decimal": ",", + "thousands": " " + }, "debug": { "chart_this_server": "Graf (tento server)", "containers_info": "Informace o kontejnerech", diff --git a/data/web/lang/lang.sk-sk.json b/data/web/lang/lang.sk-sk.json index 29b36c44..276d7b9e 100644 --- a/data/web/lang/lang.sk-sk.json +++ b/data/web/lang/lang.sk-sk.json @@ -456,6 +456,30 @@ "value_missing": "Prosím poskytnite všetky hodnoty", "yotp_verification_failed": "Overenie cez OTP Yubico zlyhalo: %s" }, + "datatables": { + "info": "Záznamy _START_ až _END_ z celkom _TOTAL_", + "infoEmpty": "Záznamy 0 až 0 z celkom 0 ", + "infoFiltered": "(vyfiltrované spomedzi _MAX_ záznamov)", + "infoThousands": " ", + "lengthMenu": "Zobraz _MENU_ záznamov", + "loadingRecords": "Načítavam...", + "processing": "Spracúvam...", + "search": "Hľadať:", + "zeroRecords": "Nenašli sa žiadne vyhovujúce záznamy", + "paginate": { + "first": "Prvá", + "last": "Posledná", + "next": "Nasledujúca", + "previous": "Predchádzajúca" + }, + "aria": { + "sortAscending": ": aktivujte na zoradenie stĺpca vzostupne", + "sortDescending": ": aktivujte na zoradenie stĺpca zostupne" + }, + "emptyTable": "Nie sú k dispozícii žiadne dáta.", + "decimal": ",", + "thousands": " " + }, "debug": { "chart_this_server": "Graf (tento server)", "containers_info": "Informácie o kontajneroch", From e4e8abb1b9f04b6852d2b64e8ae99476d27ee11a Mon Sep 17 00:00:00 2001 From: Kristian Feldsam Date: Sun, 3 Sep 2023 12:31:59 +0200 Subject: [PATCH 22/72] [Web] Ratelimit settings as input group Signed-off-by: Kristian Feldsam --- data/web/edit.php | 12 +-- data/web/templates/edit/aliasdomain.twig | 4 +- data/web/templates/edit/domain-templates.twig | 13 ++-- data/web/templates/edit/domain.twig | 20 +++-- .../web/templates/edit/mailbox-templates.twig | 9 +-- data/web/templates/edit/mailbox.twig | 20 +++-- data/web/templates/modals/mailbox.twig | 73 +++++++++---------- 7 files changed, 80 insertions(+), 71 deletions(-) diff --git a/data/web/edit.php b/data/web/edit.php index 09db796d..55bc050d 100644 --- a/data/web/edit.php +++ b/data/web/edit.php @@ -59,20 +59,22 @@ if (isset($_SESSION['mailcow_cc_role'])) { ]; } } - elseif (isset($_GET["template"])){ - $domain_template = mailbox('get', 'domain_templates', $_GET["template"]); + elseif (isset($_GET['template'])){ + $domain_template = mailbox('get', 'domain_templates', $_GET['template']); if ($domain_template){ $template_data = [ - 'template' => $domain_template + 'template' => $domain_template, + 'rl' => ['frame' => $domain_template['attributes']['rl_frame']], ]; $template = 'edit/domain-templates.twig'; $result = true; } else { - $mailbox_template = mailbox('get', 'mailbox_templates', $_GET["template"]); + $mailbox_template = mailbox('get', 'mailbox_templates', $_GET['template']); if ($mailbox_template){ $template_data = [ - 'template' => $mailbox_template + 'template' => $mailbox_template, + 'rl' => ['frame' => $mailbox_template['attributes']['rl_frame']], ]; $template = 'edit/mailbox-templates.twig'; $result = true; diff --git a/data/web/templates/edit/aliasdomain.twig b/data/web/templates/edit/aliasdomain.twig index e2ecd487..fe262d1b 100644 --- a/data/web/templates/edit/aliasdomain.twig +++ b/data/web/templates/edit/aliasdomain.twig @@ -31,10 +31,12 @@
- +
+ +
{% if dkim %} diff --git a/data/web/templates/edit/domain-templates.twig b/data/web/templates/edit/domain-templates.twig index c58693b2..8b4b428b 100644 --- a/data/web/templates/edit/domain-templates.twig +++ b/data/web/templates/edit/domain-templates.twig @@ -81,13 +81,12 @@
- - +
+ + +
{% endif %} diff --git a/data/web/templates/edit/domain.twig b/data/web/templates/edit/domain.twig index 4ba25cf7..a5c8b6d6 100644 --- a/data/web/templates/edit/domain.twig +++ b/data/web/templates/edit/domain.twig @@ -145,14 +145,20 @@ {% endif %}
-
-
-
- - - + + +
+
+
+
+
diff --git a/data/web/templates/edit/mailbox-templates.twig b/data/web/templates/edit/mailbox-templates.twig index 28f45b56..d4949a3a 100644 --- a/data/web/templates/edit/mailbox-templates.twig +++ b/data/web/templates/edit/mailbox-templates.twig @@ -118,14 +118,13 @@
+
-

{{ lang.edit.mbox_rl_info }}

+
+

{{ lang.edit.mbox_rl_info }}


diff --git a/data/web/templates/edit/mailbox.twig b/data/web/templates/edit/mailbox.twig index c020cb0a..76cc45bb 100644 --- a/data/web/templates/edit/mailbox.twig +++ b/data/web/templates/edit/mailbox.twig @@ -379,18 +379,24 @@
-
-
-
+ +
+

{{ lang.acl.ratelimit }}

- - + + +
+
+
+
+
-

{{ lang.edit.mbox_rl_info }}

+

{{ lang.edit.mbox_rl_info }}

diff --git a/data/web/templates/modals/mailbox.twig b/data/web/templates/modals/mailbox.twig index e59d630a..07c9d10f 100644 --- a/data/web/templates/modals/mailbox.twig +++ b/data/web/templates/modals/mailbox.twig @@ -155,14 +155,13 @@
- - -

{{ lang.edit.mbox_rl_info }}

+
+ + +
+

{{ lang.edit.mbox_rl_info }}

@@ -325,14 +324,13 @@
- - -

{{ lang.edit.mbox_rl_info }}

+
+ + +
+

{{ lang.edit.mbox_rl_info }}


@@ -462,13 +460,13 @@
-
- -
-
- +
+
+ + +

@@ -600,16 +598,13 @@
-
- -
-
- +
+
+ + +
{% endif %} @@ -819,13 +814,13 @@
-
- -
-
- + + +

From f059db54d0c27ac419b41eb8b070d1455ff0d210 Mon Sep 17 00:00:00 2001 From: Kristian Feldsam Date: Sun, 3 Sep 2023 12:32:47 +0200 Subject: [PATCH 23/72] [Web] edit mailbox template - fixed settigns buttons styling Signed-off-by: Kristian Feldsam --- .../web/templates/edit/mailbox-templates.twig | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/data/web/templates/edit/mailbox-templates.twig b/data/web/templates/edit/mailbox-templates.twig index d4949a3a..f606bd45 100644 --- a/data/web/templates/edit/mailbox-templates.twig +++ b/data/web/templates/edit/mailbox-templates.twig @@ -41,16 +41,16 @@
- + - + - + - +

{{ lang.user.quarantine_notification_info }}

@@ -60,13 +60,13 @@
- + - + - +

{{ lang.user.quarantine_category_info }}

@@ -76,10 +76,10 @@
- + - +
@@ -119,10 +119,10 @@
- - + +

{{ lang.edit.mbox_rl_info }}

From bb69f399760cdb3fa27e0d33624ce4b92a29a5b0 Mon Sep 17 00:00:00 2001 From: Kristian Feldsam Date: Sun, 3 Sep 2023 12:33:29 +0200 Subject: [PATCH 24/72] =?UTF-8?q?[Web]=20domain=20and=20alias=20domain=20e?= =?UTF-8?q?dit=20-=20translated=20dkim=20=E2=80=9Cdomain=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Kristian Feldsam --- data/web/templates/edit/aliasdomain.twig | 2 +- data/web/templates/edit/domain.twig | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/web/templates/edit/aliasdomain.twig b/data/web/templates/edit/aliasdomain.twig index fe262d1b..fc6b5ee1 100644 --- a/data/web/templates/edit/aliasdomain.twig +++ b/data/web/templates/edit/aliasdomain.twig @@ -43,7 +43,7 @@
-

Domain: {{ result.alias_domain }} ({{ dkim.dkim_selector }}._domainkey)

+

{{ lang.add.domain }}: {{ result.alias_domain }} ({{ dkim.dkim_selector }}._domainkey)

{{ dkim.dkim_txt }}
diff --git a/data/web/templates/edit/domain.twig b/data/web/templates/edit/domain.twig index a5c8b6d6..3da44b5c 100644 --- a/data/web/templates/edit/domain.twig +++ b/data/web/templates/edit/domain.twig @@ -136,7 +136,7 @@
-

Domain: {{ result.domain_name }} ({{ dkim.dkim_selector }}._domainkey)

+

{{ lang.add.domain }}: {{ result.domain_name }} ({{ dkim.dkim_selector }}._domainkey)

{{ dkim.dkim_txt }}
From d48193fd0e11837a6c09da95b476cbe841f473fa Mon Sep 17 00:00:00 2001 From: Kristian Feldsam Date: Sun, 3 Sep 2023 12:33:58 +0200 Subject: [PATCH 25/72] [Web] edit object - added space after heaading Signed-off-by: Kristian Feldsam --- data/web/templates/edit/aliasdomain.twig | 6 +++--- data/web/templates/edit/syncjob.twig | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/web/templates/edit/aliasdomain.twig b/data/web/templates/edit/aliasdomain.twig index fc6b5ee1..540326e8 100644 --- a/data/web/templates/edit/aliasdomain.twig +++ b/data/web/templates/edit/aliasdomain.twig @@ -2,7 +2,7 @@ {% block inner_content %} {% if result %} -

{{ lang.edit.edit_alias_domain }}

+

{{ lang.edit.edit_alias_domain }}

@@ -33,9 +33,9 @@
- {% include 'mailbox/rl-frame.twig' %} - +
diff --git a/data/web/templates/edit/syncjob.twig b/data/web/templates/edit/syncjob.twig index 40ae00fc..6f6cdeda 100644 --- a/data/web/templates/edit/syncjob.twig +++ b/data/web/templates/edit/syncjob.twig @@ -2,7 +2,7 @@ {% block inner_content %} {% if result %} -

{{ lang.edit.syncjob }}

+

{{ lang.edit.syncjob }}

From 1b7cc830caea787520f032c30b10e993d64e4ee9 Mon Sep 17 00:00:00 2001 From: Kristian Feldsam Date: Sun, 3 Sep 2023 12:36:03 +0200 Subject: [PATCH 26/72] [Web] standarize select box dropdown buttons Signed-off-by: Kristian Feldsam --- data/web/templates/edit/domain-templates.twig | 2 +- data/web/templates/modals/mailbox.twig | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/web/templates/edit/domain-templates.twig b/data/web/templates/edit/domain-templates.twig index 8b4b428b..825e6674 100644 --- a/data/web/templates/edit/domain-templates.twig +++ b/data/web/templates/edit/domain-templates.twig @@ -100,7 +100,7 @@
- diff --git a/data/web/templates/modals/mailbox.twig b/data/web/templates/modals/mailbox.twig index 07c9d10f..8e4878ae 100644 --- a/data/web/templates/modals/mailbox.twig +++ b/data/web/templates/modals/mailbox.twig @@ -479,7 +479,7 @@
- @@ -618,7 +618,7 @@
- @@ -833,7 +833,7 @@
- From 633ebe5e8dca0cd8b064a4897b911d58143afe87 Mon Sep 17 00:00:00 2001 From: Kristian Feldsam Date: Sun, 3 Sep 2023 12:36:33 +0200 Subject: [PATCH 27/72] [Web] fixed add domain save action button group styling Signed-off-by: Kristian Feldsam --- data/web/templates/modals/mailbox.twig | 1 - 1 file changed, 1 deletion(-) diff --git a/data/web/templates/modals/mailbox.twig b/data/web/templates/modals/mailbox.twig index 8e4878ae..1f96851f 100644 --- a/data/web/templates/modals/mailbox.twig +++ b/data/web/templates/modals/mailbox.twig @@ -506,7 +506,6 @@ {% if not skip_sogo %} -
{% else %} {% endif %} From 871ae5d7d285b216021e782ab57ab403d2dfd194 Mon Sep 17 00:00:00 2001 From: Kristian Feldsam Date: Sun, 3 Sep 2023 18:34:20 +0200 Subject: [PATCH 28/72] [Web] mobile devices styling fixes and enhancements Signed-off-by: Kristian Feldsam --- data/web/css/build/015-responsive.css | 15 +++- data/web/js/build/013-mailcow.js | 2 +- data/web/js/site/admin.js | 30 ++++---- data/web/js/site/mailbox.js | 68 +++++++++---------- .../templates/admin/tab-config-admins.twig | 8 +-- data/web/templates/admin/tab-config-f2b.twig | 7 +- .../templates/admin/tab-config-rsettings.twig | 8 ++- data/web/templates/fido2.twig | 4 +- data/web/templates/index.twig | 24 +++---- data/web/templates/mailbox/tab-bcc.twig | 16 ++--- .../templates/mailbox/tab-domain-aliases.twig | 8 +-- data/web/templates/mailbox/tab-domains.twig | 8 +-- data/web/templates/mailbox/tab-filters.twig | 16 ++--- data/web/templates/mailbox/tab-mailboxes.twig | 8 +-- .../templates/mailbox/tab-mbox-aliases.twig | 10 +-- data/web/templates/mailbox/tab-resources.twig | 8 +-- data/web/templates/mailbox/tab-syncjobs.twig | 8 +-- .../mailbox/tab-templates-domains.twig | 12 ++-- .../templates/mailbox/tab-templates-mbox.twig | 12 ++-- .../web/templates/mailbox/tab-tls-policy.twig | 8 +-- 20 files changed, 148 insertions(+), 132 deletions(-) diff --git a/data/web/css/build/015-responsive.css b/data/web/css/build/015-responsive.css index a626a384..57ce8023 100644 --- a/data/web/css/build/015-responsive.css +++ b/data/web/css/build/015-responsive.css @@ -38,7 +38,7 @@ @media (max-width: 767px) { - .responsive-tabs .tab-pane { + .responsive-tabs .tab-pane:not(.rsettings) { display: block !important; opacity: 1; } @@ -206,6 +206,19 @@ .senders-mw220 { max-width: 100% !important; } + + table.dataTable.dtr-inline.collapsed>tbody>tr>td.dtr-control:before, + table.dataTable.dtr-inline.collapsed>tbody>tr>th.dtr-control:before, + table.dataTable td.dt-control:before { + height: 2rem; + width: 2rem; + line-height: 2rem; + margin-top: -15px; + } + + li .dtr-data { + padding: 0; + } } @media (max-width: 350px) { diff --git a/data/web/js/build/013-mailcow.js b/data/web/js/build/013-mailcow.js index e659915b..6291c8b4 100644 --- a/data/web/js/build/013-mailcow.js +++ b/data/web/js/build/013-mailcow.js @@ -121,7 +121,7 @@ $(document).ready(function() { if (lastTab) { $('[data-bs-target="#' + lastTab + '"]').click(); var tab = $('[id^="' + lastTab + '"]'); - $(tab).find('.card-body.collapse').collapse('show'); + $(tab).find('.card-body.collapse:first').collapse('show'); } }); })(); diff --git a/data/web/js/site/admin.js b/data/web/js/site/admin.js index 252da9a1..80da6416 100644 --- a/data/web/js/site/admin.js +++ b/data/web/js/site/admin.js @@ -510,9 +510,9 @@ jQuery(function($){ if (table == 'relayhoststable') { $.each(data, function (i, item) { item.action = ''; if (item.used_by_mailboxes == '') { item.in_use_by = item.used_by_domains; } else if (item.used_by_domains == '') { item.in_use_by = item.used_by_mailboxes; } @@ -528,9 +528,9 @@ jQuery(function($){ item.username = ' ' + item.username; } item.action = ''; item.chkbox = ''; }); @@ -542,21 +542,21 @@ jQuery(function($){ }); item.recipients = rcpts.join('
'); item.action = ''; }); } else if (table == 'forwardinghoststable') { $.each(data, function (i, item) { item.action = ''; item.chkbox = ''; }); } else if (table == 'oauth2clientstable') { $.each(data, function (i, item) { item.action = ''; item.scope = "profile"; item.grant_types = 'refresh_token password authorization_code'; @@ -568,9 +568,9 @@ jQuery(function($){ item.selected_domains = item.selected_domains.toString().replace(/,/g, "
"); item.chkbox = ''; item.action = ''; }); } else if (table == 'adminstable') { @@ -582,8 +582,8 @@ jQuery(function($){ } item.chkbox = ''; item.action = ''; }); } diff --git a/data/web/js/site/mailbox.js b/data/web/js/site/mailbox.js index 50ce59df..b258a42e 100644 --- a/data/web/js/site/mailbox.js +++ b/data/web/js/site/mailbox.js @@ -469,13 +469,13 @@ jQuery(function($){ item.chkbox = ''; item.action = '
'; if (role == "admin") { - item.action += ' ' + lang.edit + '' + - ' ' + lang.remove + '' + - ' DNS
'; + item.action += ' ' + lang.edit + '' + + ' ' + lang.remove + '' + + ' DNS
'; } else { - item.action += ' ' + lang.edit + '' + - ' DNS
'; + item.action += ' ' + lang.edit + '' + + ' DNS
'; } if (Array.isArray(item.tags)){ @@ -671,13 +671,13 @@ jQuery(function($){ if (item.template.toLowerCase() == "default"){ item.action = ''; } else { item.action = ''; } @@ -912,18 +912,18 @@ jQuery(function($){ if (acl_data.login_as === 1) { item.action = '
' + - ' ' + lang.edit + '' + - ' ' + lang.remove + '' + - ''; + ' ' + lang.edit + '' + + ' ' + lang.remove + '' + + ''; if (ALLOW_ADMIN_EMAIL_LOGIN) { - item.action += ''; + item.action += ''; } item.action += '
'; } else { item.action = ''; } item.in_use = { @@ -1190,13 +1190,13 @@ jQuery(function($){ if (item.template.toLowerCase() == "default"){ item.action = ''; } else { item.action = ''; } @@ -1378,8 +1378,8 @@ jQuery(function($){ item.multiple_bookings = '' + lang.booking_custom_short + ' (' + item.multiple_bookings + ')'; } item.action = ''; item.chkbox = ''; item.name = escapeHtml(item.name); @@ -1518,8 +1518,8 @@ jQuery(function($){ dataSrc: function(json){ $.each(json, function (i, item) { item.action = ''; item.chkbox = ''; item.local_dest = escapeHtml(item.local_dest); @@ -1632,8 +1632,8 @@ jQuery(function($){ item.recipient_map_old = escapeHtml(item.recipient_map_old); item.recipient_map_new = escapeHtml(item.recipient_map_new); item.action = ''; item.chkbox = ''; }); @@ -1734,8 +1734,8 @@ jQuery(function($){ item.parameters = '' + escapeHtml(item.parameters) + ''; } item.action = ''; item.chkbox = ''; }); @@ -1832,8 +1832,8 @@ jQuery(function($){ dataSrc: function(json){ $.each(json, function (i, item) { item.action = ''; item.chkbox = ''; item.goto = escapeHtml(item.goto.replace(/,/g, " ")); @@ -1991,9 +1991,9 @@ jQuery(function($){ item.alias_domain = escapeHtml(item.alias_domain); item.action = '' + + ' ' + lang.edit + '' + + ' ' + lang.remove + '' + + ' DNS
' + '
'; item.chkbox = ''; if(item.parent_is_backupmx == '1') { @@ -2093,8 +2093,8 @@ jQuery(function($){ } item.server_w_port = escapeHtml(item.user1) + '@' + escapeHtml(item.host1) + ':' + escapeHtml(item.port1); item.action = ''; item.chkbox = ''; if (item.is_running == 1) { @@ -2247,8 +2247,8 @@ jQuery(function($){ item.script_data = '
' + escapeHtml(item.script_data) + '
' item.filter_type = '
' + item.filter_type.charAt(0).toUpperCase() + item.filter_type.slice(1).toLowerCase() + '
' item.action = ''; item.chkbox = '' }); diff --git a/data/web/templates/admin/tab-config-admins.twig b/data/web/templates/admin/tab-config-admins.twig index b672b815..44342af4 100644 --- a/data/web/templates/admin/tab-config-admins.twig +++ b/data/web/templates/admin/tab-config-admins.twig @@ -122,8 +122,8 @@
-
- +
+
@@ -166,8 +166,8 @@
- - + +
diff --git a/data/web/templates/admin/tab-config-f2b.twig b/data/web/templates/admin/tab-config-f2b.twig index de4a7c63..a353f7fa 100644 --- a/data/web/templates/admin/tab-config-f2b.twig +++ b/data/web/templates/admin/tab-config-f2b.twig @@ -92,13 +92,14 @@ {% endif %} {% for active_ban in f2b_data.active_bans %}

- + {{ active_ban.network }} ({{ active_ban.banned_until }}) - - + + - {% if active_ban.queued_for_unban == 0 %} [{{ lang.admin.queue_unban }}] [whitelist] @@ -111,7 +112,7 @@


{% for perm_ban in f2b_data.perm_bans %}

- + {{ perm_ban.network }} diff --git a/data/web/templates/admin/tab-config-rsettings.twig b/data/web/templates/admin/tab-config-rsettings.twig index 38b0d593..439e55a3 100644 --- a/data/web/templates/admin/tab-config-rsettings.twig +++ b/data/web/templates/admin/tab-config-rsettings.twig @@ -44,7 +44,7 @@

{{ lang.admin.rsetting_no_selection }}

{% for rsetting in rsettings %} -
-
- - +
+
+ + +
{% if not oauth2_request %} - +
{% endif %}
@@ -62,19 +66,15 @@
{% if not oauth2_request and (mailcow_apps or app_links) %} {{ ui_texts.apps_name|raw }}
-
+
{% for app in mailcow_apps %} {% if not skip_sogo or not is_uri('SOGo', app.link) %} - - {% endif %} + {{ app.name }} + {% endif %} {% endfor %} {% for row in app_links %} {% for key, val in row %} -
- {{ key }} -
+ {{ key }} {% endfor %} {% endfor %}
diff --git a/data/web/templates/mailbox/tab-bcc.twig b/data/web/templates/mailbox/tab-bcc.twig index 25844e48..eedb04b2 100644 --- a/data/web/templates/mailbox/tab-bcc.twig +++ b/data/web/templates/mailbox/tab-bcc.twig @@ -11,7 +11,7 @@
-
-
+
diff --git a/data/web/templates/mailbox/tab-domain-aliases.twig b/data/web/templates/mailbox/tab-domain-aliases.twig index 6cefd093..4bbfbbe5 100644 --- a/data/web/templates/mailbox/tab-domain-aliases.twig +++ b/data/web/templates/mailbox/tab-domain-aliases.twig @@ -11,7 +11,7 @@
-
+
diff --git a/data/web/templates/mailbox/tab-domains.twig b/data/web/templates/mailbox/tab-domains.twig index 8b2d61b7..49cb89b6 100644 --- a/data/web/templates/mailbox/tab-domains.twig +++ b/data/web/templates/mailbox/tab-domains.twig @@ -12,7 +12,7 @@
{#
#} -
+
@@ -35,8 +35,8 @@
- - + + {% if mailcow_cc_role == 'admin' %} - + {% endif %}
diff --git a/data/web/templates/mailbox/tab-filters.twig b/data/web/templates/mailbox/tab-filters.twig index 203d3911..8ccff27a 100644 --- a/data/web/templates/mailbox/tab-filters.twig +++ b/data/web/templates/mailbox/tab-filters.twig @@ -11,7 +11,7 @@
-
+
{{ lang.mailbox.toggle_all }} {{ lang.mailbox.quick_actions }} @@ -34,8 +34,8 @@
@@ -64,8 +64,8 @@
- - + +
@@ -82,8 +82,8 @@
- - + +
diff --git a/data/web/templates/mailbox/tab-mailboxes.twig b/data/web/templates/mailbox/tab-mailboxes.twig index 9b827989..fce7d627 100644 --- a/data/web/templates/mailbox/tab-mailboxes.twig +++ b/data/web/templates/mailbox/tab-mailboxes.twig @@ -11,7 +11,7 @@
-
+
{{ lang.mailbox.toggle_all }} {{ lang.mailbox.quick_actions }} @@ -128,8 +128,8 @@
{{ lang.mailbox.toggle_all }} diff --git a/data/web/templates/mailbox/tab-mbox-aliases.twig b/data/web/templates/mailbox/tab-mbox-aliases.twig index 7035ac21..02b5b6d0 100644 --- a/data/web/templates/mailbox/tab-mbox-aliases.twig +++ b/data/web/templates/mailbox/tab-mbox-aliases.twig @@ -11,7 +11,7 @@
-
+
diff --git a/data/web/templates/mailbox/tab-resources.twig b/data/web/templates/mailbox/tab-resources.twig index b23231f2..34728eda 100644 --- a/data/web/templates/mailbox/tab-resources.twig +++ b/data/web/templates/mailbox/tab-resources.twig @@ -11,7 +11,7 @@
-
+
diff --git a/data/web/templates/mailbox/tab-syncjobs.twig b/data/web/templates/mailbox/tab-syncjobs.twig index d634d40b..bfd8eefb 100644 --- a/data/web/templates/mailbox/tab-syncjobs.twig +++ b/data/web/templates/mailbox/tab-syncjobs.twig @@ -11,7 +11,7 @@
-
+
diff --git a/data/web/templates/mailbox/tab-templates-domains.twig b/data/web/templates/mailbox/tab-templates-domains.twig index c339aaf0..f3c6a678 100644 --- a/data/web/templates/mailbox/tab-templates-domains.twig +++ b/data/web/templates/mailbox/tab-templates-domains.twig @@ -1,4 +1,4 @@ -
+
-
-
+
+
@@ -31,8 +31,8 @@
- - + + {% if mailcow_cc_role == 'admin' %} - + {% endif %}
diff --git a/data/web/templates/mailbox/tab-templates-mbox.twig b/data/web/templates/mailbox/tab-templates-mbox.twig index 631394bb..71edb9d3 100644 --- a/data/web/templates/mailbox/tab-templates-mbox.twig +++ b/data/web/templates/mailbox/tab-templates-mbox.twig @@ -1,4 +1,4 @@ -
+
-
-
+
+
@@ -31,8 +31,8 @@
- - + + {% if mailcow_cc_role == 'admin' %} - + {% endif %}
diff --git a/data/web/templates/mailbox/tab-tls-policy.twig b/data/web/templates/mailbox/tab-tls-policy.twig index 64bce55f..3195b754 100644 --- a/data/web/templates/mailbox/tab-tls-policy.twig +++ b/data/web/templates/mailbox/tab-tls-policy.twig @@ -11,7 +11,7 @@
-
+
From d0ba061f7a79119ec2b191772ce8f0ab14af22e5 Mon Sep 17 00:00:00 2001 From: Kristian Feldsam Date: Sun, 3 Sep 2023 18:35:24 +0200 Subject: [PATCH 29/72] [Web] mobile devices - scroll window to opened tab This feature was in versions before BS5 Signed-off-by: Kristian Feldsam --- data/web/js/build/013-mailcow.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/data/web/js/build/013-mailcow.js b/data/web/js/build/013-mailcow.js index 6291c8b4..ead4934e 100644 --- a/data/web/js/build/013-mailcow.js +++ b/data/web/js/build/013-mailcow.js @@ -125,6 +125,17 @@ $(document).ready(function() { } }); })(); + + // responsive tabs, scroll to opened tab + $(document).on("shown.bs.collapse shown.bs.tab", function (e) { + var target = $(e.target); + if($(window).width() <= 767) { + var offset = target.offset().top - 60; + $("html, body").stop().animate({ + scrollTop: offset + }, 100); + } + }); // IE fix to hide scrollbars when table body is empty $('tbody').filter(function (index) { From 3540075b61606a11c9f2801283ab7280640410dc Mon Sep 17 00:00:00 2001 From: Kristian Feldsam Date: Sun, 3 Sep 2023 18:49:12 +0200 Subject: [PATCH 30/72] [Web] dark mode logo support Signed-off-by: Kristian Feldsam --- data/web/admin.php | 1 + data/web/inc/functions.customize.inc.php | 22 +++++++++---- data/web/inc/header.inc.php | 1 + data/web/inc/triggers.inc.php | 4 +++ data/web/js/build/013-mailcow.js | 9 ++++++ data/web/lang/lang.en-gb.json | 2 ++ data/web/templates/admin/customize/logo.twig | 9 ++++++ .../templates/admin/tab-config-customize.twig | 32 +++++++++++-------- data/web/templates/base.twig | 5 ++- data/web/templates/debug.twig | 3 +- data/web/templates/index.twig | 5 ++- 11 files changed, 69 insertions(+), 24 deletions(-) create mode 100644 data/web/templates/admin/customize/logo.twig diff --git a/data/web/admin.php b/data/web/admin.php index 14cb89f5..ebddb7b9 100644 --- a/data/web/admin.php +++ b/data/web/admin.php @@ -108,6 +108,7 @@ $template_data = [ 'rsettings' => $rsettings, 'rspamd_regex_maps' => $rspamd_regex_maps, 'logo_specs' => customize('get', 'main_logo_specs'), + 'logo_dark_specs' => customize('get', 'main_logo_dark_specs'), 'ip_check' => customize('get', 'ip_check'), 'password_complexity' => password_complexity('get'), 'show_rspamd_global_filters' => @$_SESSION['show_rspamd_global_filters'], diff --git a/data/web/inc/functions.customize.inc.php b/data/web/inc/functions.customize.inc.php index 6025d97d..0da8c356 100644 --- a/data/web/inc/functions.customize.inc.php +++ b/data/web/inc/functions.customize.inc.php @@ -24,9 +24,10 @@ function customize($_action, $_item, $_data = null) { } switch ($_item) { case 'main_logo': - if (in_array($_data['main_logo']['type'], array('image/gif', 'image/jpeg', 'image/pjpeg', 'image/x-png', 'image/png', 'image/svg+xml'))) { + case 'main_logo_dark': + if (in_array($_data[$_item]['type'], array('image/gif', 'image/jpeg', 'image/pjpeg', 'image/x-png', 'image/png', 'image/svg+xml'))) { try { - if (file_exists($_data['main_logo']['tmp_name']) !== true) { + if (file_exists($_data[$_item]['tmp_name']) !== true) { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_item, $_data), @@ -34,7 +35,7 @@ function customize($_action, $_item, $_data = null) { ); return false; } - $image = new Imagick($_data['main_logo']['tmp_name']); + $image = new Imagick($_data[$_item]['tmp_name']); if ($image->valid() !== true) { $_SESSION['return'][] = array( 'type' => 'danger', @@ -63,7 +64,7 @@ function customize($_action, $_item, $_data = null) { return false; } try { - $redis->Set('MAIN_LOGO', 'data:' . $_data['main_logo']['type'] . ';base64,' . base64_encode(file_get_contents($_data['main_logo']['tmp_name']))); + $redis->Set(strtoupper($_item), 'data:' . $_data[$_item]['type'] . ';base64,' . base64_encode(file_get_contents($_data[$_item]['tmp_name']))); } catch (RedisException $e) { $_SESSION['return'][] = array( @@ -201,8 +202,9 @@ function customize($_action, $_item, $_data = null) { } switch ($_item) { case 'main_logo': + case 'main_logo_dark': try { - if ($redis->del('MAIN_LOGO')) { + if ($redis->del(strtoupper($_item))) { $_SESSION['return'][] = array( 'type' => 'success', 'log' => array(__FUNCTION__, $_action, $_item, $_data), @@ -239,8 +241,9 @@ function customize($_action, $_item, $_data = null) { return ($app_links) ? $app_links : false; break; case 'main_logo': + case 'main_logo_dark': try { - return $redis->get('MAIN_LOGO'); + return $redis->get(strtoupper($_item)); } catch (RedisException $e) { $_SESSION['return'][] = array( @@ -277,9 +280,14 @@ function customize($_action, $_item, $_data = null) { } break; case 'main_logo_specs': + case 'main_logo_dark_specs': try { $image = new Imagick(); - $img_data = explode('base64,', customize('get', 'main_logo')); + if($_item == 'main_logo_specs') { + $img_data = explode('base64,', customize('get', 'main_logo')); + } else { + $img_data = explode('base64,', customize('get', 'main_logo_dark')); + } if ($img_data[1]) { $image->readImageBlob(base64_decode($img_data[1])); return $image->identifyImage(); diff --git a/data/web/inc/header.inc.php b/data/web/inc/header.inc.php index f62819a2..9afc288d 100644 --- a/data/web/inc/header.inc.php +++ b/data/web/inc/header.inc.php @@ -40,6 +40,7 @@ $globalVariables = [ 'ui_texts' => $UI_TEXTS, 'css_path' => '/cache/'.basename($CSSPath), 'logo' => customize('get', 'main_logo'), + 'logo_dark' => customize('get', 'main_logo_dark'), 'available_languages' => $AVAILABLE_LANGUAGES, 'lang' => $lang, 'skip_sogo' => (getenv('SKIP_SOGO') == 'y'), diff --git a/data/web/inc/triggers.inc.php b/data/web/inc/triggers.inc.php index c40453a2..6922429b 100644 --- a/data/web/inc/triggers.inc.php +++ b/data/web/inc/triggers.inc.php @@ -120,10 +120,14 @@ if (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == "admi if (isset($_POST["submit_main_logo"])) { if ($_FILES['main_logo']['error'] == 0) { customize('add', 'main_logo', $_FILES); + } + if ($_FILES['main_logo_dark']['error'] == 0) { + customize('add', 'main_logo_dark', $_FILES); } } if (isset($_POST["reset_main_logo"])) { customize('delete', 'main_logo'); + customize('delete', 'main_logo_dark'); } // Some actions will not be available via API if (isset($_POST["license_validate_now"])) { diff --git a/data/web/js/build/013-mailcow.js b/data/web/js/build/013-mailcow.js index e659915b..4907623c 100644 --- a/data/web/js/build/013-mailcow.js +++ b/data/web/js/build/013-mailcow.js @@ -314,19 +314,28 @@ $(document).ready(function() { $('#dark-mode-toggle').click(toggleDarkMode); if ($('#dark-mode-theme').length) { $('#dark-mode-toggle').prop('checked', true); + $('.main-logo').addClass('d-none'); + $('.main-logo-dark').removeClass('d-none'); if ($('#rspamd_logo').length) $('#rspamd_logo').attr('src', '/img/rspamd_logo_light.png'); if ($('#rspamd_logo_sm').length) $('#rspamd_logo_sm').attr('src', '/img/rspamd_logo_light.png'); + } else { + $('.main-logo').removeClass('d-none'); + $('.main-logo-dark').addClass('d-none'); } function toggleDarkMode(){ if($('#dark-mode-theme').length){ $('#dark-mode-theme').remove(); $('#dark-mode-toggle').prop('checked', false); + $('.main-logo').removeClass('d-none'); + $('.main-logo-dark').addClass('d-none'); if ($('#rspamd_logo').length) $('#rspamd_logo').attr('src', '/img/rspamd_logo_dark.png'); if ($('#rspamd_logo_sm').length) $('#rspamd_logo_sm').attr('src', '/img/rspamd_logo_dark.png'); localStorage.setItem('theme', 'light'); }else{ $('head').append(''); $('#dark-mode-toggle').prop('checked', true); + $('.main-logo').addClass('d-none'); + $('.main-logo-dark').removeClass('d-none'); if ($('#rspamd_logo').length) $('#rspamd_logo').attr('src', '/img/rspamd_logo_light.png'); if ($('#rspamd_logo_sm').length) $('#rspamd_logo_sm').attr('src', '/img/rspamd_logo_light.png'); localStorage.setItem('theme', 'dark'); diff --git a/data/web/lang/lang.en-gb.json b/data/web/lang/lang.en-gb.json index a4d06da3..344fae6c 100644 --- a/data/web/lang/lang.en-gb.json +++ b/data/web/lang/lang.en-gb.json @@ -149,6 +149,8 @@ "ays": "Are you sure you want to proceed?", "ban_list_info": "See a list of banned IPs below: network (remaining ban time) - [actions].
IPs queued to be unbanned will be removed from the active ban list within a few seconds.
Red labels indicate active permanent bans by blacklisting.", "change_logo": "Change logo", + "logo_normal_label": "Normal", + "logo_dark_label": "Inverted for dark mode", "configuration": "Configuration", "convert_html_to_text": "Convert HTML to plain text", "cors_settings": "CORS Settings", diff --git a/data/web/templates/admin/customize/logo.twig b/data/web/templates/admin/customize/logo.twig new file mode 100644 index 00000000..45f6c91e --- /dev/null +++ b/data/web/templates/admin/customize/logo.twig @@ -0,0 +1,9 @@ +
+ mailcow logo +
+ {{ logo_specs.geometry.width }}x{{ logo_specs.geometry.height }} px + {{ logo_specs.mimetype }} + {{ logo_specs.fileSize }} +
+
+ diff --git a/data/web/templates/admin/tab-config-customize.twig b/data/web/templates/admin/tab-config-customize.twig index e458eeb3..a616375c 100644 --- a/data/web/templates/admin/tab-config-customize.twig +++ b/data/web/templates/admin/tab-config-customize.twig @@ -10,22 +10,26 @@ {{ lang.admin.change_logo }}

{{ lang.admin.logo_info }}

-

-
- -

+
+ + +
+
+ + +
+ +
- {% if logo %} -
+ {% if logo or logo_dark %} +
-
- mailcow logo -
- {{ logo_specs.geometry.width }}x{{ logo_specs.geometry.height }} px - {{ logo_specs.mimetype }} - {{ logo_specs.fileSize }} -
-
+ {% if logo %} + {% include 'admin/customize/logo.twig' %} + {% endif %} + {% if logo_dark %} + {% include 'admin/customize/logo.twig' with {'logo': logo_dark, 'logo_specs': logo_dark_specs, 'dark': 1} %} + {% endif %}

diff --git a/data/web/templates/base.twig b/data/web/templates/base.twig index 06c47bd2..0b1c60a2 100644 --- a/data/web/templates/base.twig +++ b/data/web/templates/base.twig @@ -31,7 +31,10 @@ {% block navbar %}
- {% if mailcow_cc_role == 'admin' %} -
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
-
- -
- -

{{ lang.edit.relay_all_info|raw }}

- -
-

{{ lang.edit.relay_transport_info|raw }}

-
-
-
-
- {% endif %} -
-
-
- - {{ lang.edit.gal_info|raw }} -
-
-
-
-
-
-
- -
-
-
-
-
- -
-
-
-
- {{ lang.edit.created_on }}: {{ result.created }} - {{ lang.edit.last_modified }}: {{ result.modified }} -
-
- - {% if dkim %} -
-
-
-

{{ lang.add.domain }}: {{ result.domain_name }} ({{ dkim.dkim_selector }}._domainkey)

-
-
-
{{ dkim.dkim_txt }}
-
-
- {% endif %} -
-
-
-
- -
-
- - -
-
-
-
-
- -
-
-
-
-
-
-
-

{{ lang.user.spamfilter_wl }}

-

{{ lang.user.spamfilter_wl_desc|raw }}

-
-
- - -
-
-
- -
-
-

{{ lang.user.spamfilter_bl }}

-

{{ lang.user.spamfilter_bl_desc|raw }}

-
-
- - -
-
-
-
- +
+
+
+ +
+
+
+
+

{{ lang.edit.quota_warning_bcc }}

+

{{ lang.edit.quota_warning_bcc_info|raw }}

+
+ +
+ +
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
-
-
-
-
-

{{ lang.edit.quota_warning_bcc }}

-

{{ lang.edit.quota_warning_bcc_info|raw }}

-
- -
- -
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
-
{% else %} {{ parent() }} diff --git a/data/web/templates/edit/mailbox.twig b/data/web/templates/edit/mailbox.twig index 76cc45bb..07250459 100644 --- a/data/web/templates/edit/mailbox.twig +++ b/data/web/templates/edit/mailbox.twig @@ -2,405 +2,443 @@ {% block inner_content %} {% if result %} - -
-
-
-
- - - - -
- -
- -
-
-
- -
-
- {% for tag in mailbox_details.tags %} - - - {{ tag }} - - {% endfor %} - - - -
-
-
-
- -
- - 0 = ∞ -
-
-
- -
- -
{{ lang.edit.sender_acl_disabled|raw }}
- {{ lang.edit.sender_acl_info|raw }} -
-
-
- -
- -

 

- {{ lang.edit.mailbox_relayhost_info }} -
-
-
- -
-
- - - - -
-

{{ lang.user.quarantine_notification_info }}

-
-
-
- -
-
- - - -
-

{{ lang.user.quarantine_category_info }}

-
-
-
- -
-
- - -
-
-
-
- -
- -
-
-
- -
- -
-
-
- -
- {% if sender_acl_handles.external_sender_aliases %} - {% set ext_sender_acl = sender_acl_handles.external_sender_aliases|join(', ') %} - {% endif %} - {% if acl.extend_sender_acl and acl.extend_sender_acl == 1 %} - - {{ lang.edit.extended_sender_acl_info|raw }} - {% endif %} -
-
-
- -
- -
-
- -
-
-
- -
-
-
-
-
- - {{ lang.edit.force_pw_update_info|format(ui_texts.main_name) }} -
-
-
- {% if not skip_sogo %} -
-
-
- - {{ lang.edit.sogo_access_info }} -
-
-
- {% endif %} -
-
- -
-
-
-
- {{ lang.edit.created_on }}: {{ result.created }} - {{ lang.edit.last_modified }}: {{ result.modified }} -
-
-
-
-
-
- - - -
-
-

-
-
-

{{ lang.user.pushover_info|format(mailbox)|raw }}

-

{{ lang.edit.pushover_vars|raw }}: {SUBJECT}, {SENDER}, {SENDER_ADDRESS}, {SENDER_NAME}, {TO_NAME}, {TO_ADDRESS}, {MSG_ID}

-
-
- - +
+ +
+
+
+
+
+
-
- - +
+ + + + + +
+ +
+ +
+
+
+ +
+
+ {% for tag in mailbox_details.tags %} + + + {{ tag }} + + {% endfor %} + + + +
+
+
+
+ +
+ + 0 = ∞ +
+
+
+ +
+ +
{{ lang.edit.sender_acl_disabled|raw }}
+ {{ lang.edit.sender_acl_info|raw }} +
+
+
+ +
+ +

 

+ {{ lang.edit.mailbox_relayhost_info }} +
+
+
+ +
+
+ + + + +
+

{{ lang.user.quarantine_notification_info }}

+
+
+
+ +
+
+ + + +
+

{{ lang.user.quarantine_category_info }}

+
+
+
+ +
+
+ + +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ {% if sender_acl_handles.external_sender_aliases %} + {% set ext_sender_acl = sender_acl_handles.external_sender_aliases|join(', ') %} + {% endif %} + {% if acl.extend_sender_acl and acl.extend_sender_acl == 1 %} + + {{ lang.edit.extended_sender_acl_info|raw }} + {% endif %} +
+
+
+ +
+ +
+
+ +
+
+
+ +
+
+
+
+
+ + {{ lang.edit.force_pw_update_info|format(ui_texts.main_name) }} +
+
+
+ {% if not skip_sogo %} +
+
+
+ + {{ lang.edit.sogo_access_info }} +
+
+
+ {% endif %} +
+
+ +
+
+
+
+ {{ lang.edit.created_on }}: {{ result.created }} + {{ lang.edit.last_modified }}: {{ result.modified }} +
+
+
-
- - -
-
- - -
-
- - -
-
-
-
- -
-
-
-
- -
-
-
- - {{ lang.edit.advanced_settings }} - -
-
-
-
- - -
- -
-
- -
-
-
-
-
- -
-
-
-
-
-

ACL

-
-
- - +
+
+
+ +
+
+ + + + +
+
+

+
+
+

{{ lang.user.pushover_info|format(mailbox)|raw }}

+

{{ lang.edit.pushover_vars|raw }}: {SUBJECT}, {SENDER}, {SENDER_ADDRESS}, {SENDER_NAME}, {TO_NAME}, {TO_ADDRESS}, {MSG_ID}

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+
+
+
+ +
+
+
+ + {{ lang.edit.advanced_settings }} + +
+
+
+
+ + +
+ +
+
+ +
+
+
+
+ +
+
+ +
- -
-
-
-
-
-

{{ lang.acl.ratelimit }}

-
-
-
- - -
-
-
-
-
- -

{{ lang.edit.mbox_rl_info }}

+
+
+
+ +
+
+ +
+
+

ACL

+
+
+ + +
+
+ +
- -
+
+
+
+ +
+
+
+
+
+

{{ lang.acl.ratelimit }}

+
+
+
+ + +
+
+
+
+
+ +

{{ lang.edit.mbox_rl_info }}

+
+
+
+
+
+
+
{% else %} {{ parent() }} From 8e5cd907072a75cee8116367b234362e97616c53 Mon Sep 17 00:00:00 2001 From: Kristian Feldsam Date: Sun, 3 Sep 2023 14:05:12 +0200 Subject: [PATCH 33/72] [Web] Filter tables by Domain where possible This feature was standard in Mailcow in pre-BS5 releases Signed-off-by: Kristian Feldsam --- data/web/js/site/mailbox.js | 46 +++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/data/web/js/site/mailbox.js b/data/web/js/site/mailbox.js index 3ddeea94..8381ab4d 100644 --- a/data/web/js/site/mailbox.js +++ b/data/web/js/site/mailbox.js @@ -851,8 +851,9 @@ jQuery(function($){ "tr" + "<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>", language: lang_datatables, - initComplete: function(){ + initComplete: function(settings, json){ hideTableExpandCollapseBtn('#tab-mailboxes', '#mailbox_table'); + filterByDomain(json, 8, table); }, ajax: { type: "GET", @@ -1362,8 +1363,9 @@ jQuery(function($){ "tr" + "<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>", language: lang_datatables, - initComplete: function(){ + initComplete: function(settings, json){ hideTableExpandCollapseBtn('#tab-resources', '#resource_table'); + filterByDomain(json, 5, table); }, ajax: { type: "GET", @@ -1509,8 +1511,9 @@ jQuery(function($){ "<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>", language: lang_datatables, order: [[2, 'desc']], - initComplete: function(){ + initComplete: function(settings, json){ hideTableExpandCollapseBtn('#collapse-tab-bcc', '#bcc_table'); + filterByDomain(json, 6, table); }, ajax: { type: "GET", @@ -1823,8 +1826,9 @@ jQuery(function($){ "<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>", language: lang_datatables, order: [[2, 'desc']], - initComplete: function(){ + initComplete: function(settings, json){ hideTableExpandCollapseBtn('#tab-mbox-aliases', '#alias_table'); + filterByDomain(json, 5, table); }, ajax: { type: "GET", @@ -2329,6 +2333,40 @@ 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 + var select = $('') + .insertBefore( + $('#'+tableId+' .dataTables_filter > label > input') + ) + .on( 'change', function(){ + table.column(column) + .search($(this).val()) + .draw(); + }); + + // get all domains + var domains = []; + json.forEach(obj => { + Object.entries(obj).forEach(([key, value]) => { + if(key === 'domain') { + domains.push(value) + } + }); + }); + + // 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($('')); + }); + } // detect element visibility changes function onVisible(element, callback) { From 8e87e76dcf821d3353a77ff2fdc729f459dd8c22 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 18:49:38 +0200 Subject: [PATCH 34/72] Update actions/checkout action to v4 (#5409) Signed-off-by: milkmaker Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/image_builds.yml | 2 +- .github/workflows/pr_to_nightly.yml | 2 +- .github/workflows/rebuild_backup_image.yml | 2 +- .github/workflows/update_postscreen_access_list.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/image_builds.yml b/.github/workflows/image_builds.yml index 65678dff..496d4f73 100644 --- a/.github/workflows/image_builds.yml +++ b/.github/workflows/image_builds.yml @@ -28,7 +28,7 @@ jobs: - "watchdog-mailcow" runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Setup Docker run: | curl -sSL https://get.docker.com/ | CHANNEL=stable sudo sh diff --git a/.github/workflows/pr_to_nightly.yml b/.github/workflows/pr_to_nightly.yml index 57aac781..e629e5e9 100644 --- a/.github/workflows/pr_to_nightly.yml +++ b/.github/workflows/pr_to_nightly.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Run the Action diff --git a/.github/workflows/rebuild_backup_image.yml b/.github/workflows/rebuild_backup_image.yml index 21c218a8..6c1d7e83 100644 --- a/.github/workflows/rebuild_backup_image.yml +++ b/.github/workflows/rebuild_backup_image.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up QEMU uses: docker/setup-qemu-action@v2 diff --git a/.github/workflows/update_postscreen_access_list.yml b/.github/workflows/update_postscreen_access_list.yml index 5d31eb9a..42502f30 100644 --- a/.github/workflows/update_postscreen_access_list.yml +++ b/.github/workflows/update_postscreen_access_list.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Generate postscreen_access.cidr run: | From 21121f98273f607d981e625227e85d68165f9347 Mon Sep 17 00:00:00 2001 From: milkmaker Date: Mon, 4 Sep 2023 19:56:42 +0200 Subject: [PATCH 35/72] Translations update from Weblate (#5410) * [Web] Language file updated by 'Cleanup translation files' addon Co-authored-by: milkmaker * [Web] Updated lang.en-gb.json Co-authored-by: Peter * [Web] Updated lang.de-de.json Co-authored-by: Peter * [Web] Updated lang.ru-ru.json Co-authored-by: Peter * [Web] Updated lang.uk-ua.json Co-authored-by: Peter --------- Co-authored-by: Peter --- data/web/lang/lang.de-de.json | 2 +- data/web/lang/lang.en-gb.json | 2 +- data/web/lang/lang.ru-ru.json | 2 +- data/web/lang/lang.sk-sk.json | 43 +++++++++++++++++------------------ data/web/lang/lang.uk-ua.json | 2 +- 5 files changed, 25 insertions(+), 26 deletions(-) diff --git a/data/web/lang/lang.de-de.json b/data/web/lang/lang.de-de.json index 43d2b6c5..30d1816d 100644 --- a/data/web/lang/lang.de-de.json +++ b/data/web/lang/lang.de-de.json @@ -484,7 +484,7 @@ "info": "_START_ bis _END_ von _TOTAL_ Einträgen", "infoEmpty": "0 bis 0 von 0 Einträgen", "infoFiltered": "(gefiltert von _MAX_ Einträgen)", - "infoPostFix": "datatables.infoPostFix", + "infoPostFix": "", "thousands": ".", "lengthMenu": "_MENU_ Einträge anzeigen", "loadingRecords": "Wird geladen...", diff --git a/data/web/lang/lang.en-gb.json b/data/web/lang/lang.en-gb.json index a4d06da3..28ff19b8 100644 --- a/data/web/lang/lang.en-gb.json +++ b/data/web/lang/lang.en-gb.json @@ -484,7 +484,7 @@ "info": "Showing _START_ to _END_ of _TOTAL_ entries", "infoEmpty": "Showing 0 to 0 of 0 entries", "infoFiltered": "(filtered from _MAX_ total entries)", - "infoPostFix": "datatables.infoPostFix", + "infoPostFix": "", "thousands": ",", "lengthMenu": "Show _MENU_ entries", "loadingRecords": "Loading...", diff --git a/data/web/lang/lang.ru-ru.json b/data/web/lang/lang.ru-ru.json index 0783710c..dccaa204 100644 --- a/data/web/lang/lang.ru-ru.json +++ b/data/web/lang/lang.ru-ru.json @@ -1202,6 +1202,6 @@ "session_ua": "Неверный токен формы: ошибка проверки User-Agent" }, "datatables": { - "infoPostFix": "datatables.infoPostFix" + "infoPostFix": "" } } diff --git a/data/web/lang/lang.sk-sk.json b/data/web/lang/lang.sk-sk.json index 276d7b9e..7e3f598a 100644 --- a/data/web/lang/lang.sk-sk.json +++ b/data/web/lang/lang.sk-sk.json @@ -457,28 +457,27 @@ "yotp_verification_failed": "Overenie cez OTP Yubico zlyhalo: %s" }, "datatables": { - "info": "Záznamy _START_ až _END_ z celkom _TOTAL_", - "infoEmpty": "Záznamy 0 až 0 z celkom 0 ", - "infoFiltered": "(vyfiltrované spomedzi _MAX_ záznamov)", - "infoThousands": " ", - "lengthMenu": "Zobraz _MENU_ záznamov", - "loadingRecords": "Načítavam...", - "processing": "Spracúvam...", - "search": "Hľadať:", - "zeroRecords": "Nenašli sa žiadne vyhovujúce záznamy", - "paginate": { - "first": "Prvá", - "last": "Posledná", - "next": "Nasledujúca", - "previous": "Predchádzajúca" - }, - "aria": { - "sortAscending": ": aktivujte na zoradenie stĺpca vzostupne", - "sortDescending": ": aktivujte na zoradenie stĺpca zostupne" - }, - "emptyTable": "Nie sú k dispozícii žiadne dáta.", - "decimal": ",", - "thousands": " " + "info": "Záznamy _START_ až _END_ z celkom _TOTAL_", + "infoEmpty": "Záznamy 0 až 0 z celkom 0 ", + "infoFiltered": "(vyfiltrované spomedzi _MAX_ záznamov)", + "lengthMenu": "Zobraz _MENU_ záznamov", + "loadingRecords": "Načítavam...", + "processing": "Spracúvam...", + "search": "Hľadať:", + "zeroRecords": "Nenašli sa žiadne vyhovujúce záznamy", + "paginate": { + "first": "Prvá", + "last": "Posledná", + "next": "Nasledujúca", + "previous": "Predchádzajúca" + }, + "aria": { + "sortAscending": ": aktivujte na zoradenie stĺpca vzostupne", + "sortDescending": ": aktivujte na zoradenie stĺpca zostupne" + }, + "emptyTable": "Nie sú k dispozícii žiadne dáta.", + "decimal": ",", + "thousands": " " }, "debug": { "chart_this_server": "Graf (tento server)", diff --git a/data/web/lang/lang.uk-ua.json b/data/web/lang/lang.uk-ua.json index 93545aa3..b7b40568 100644 --- a/data/web/lang/lang.uk-ua.json +++ b/data/web/lang/lang.uk-ua.json @@ -1254,7 +1254,7 @@ }, "datatables": { "decimal": ".", - "infoPostFix": "datatables.infoPostFix", + "infoPostFix": "", "zeroRecords": "Відповідних записів не знайдено", "aria": { "sortAscending": ": активувати для сортування стовпців за зростанням", From 8d75b570c805fcc83b9695c5faf26403788a73e3 Mon Sep 17 00:00:00 2001 From: Mirko Ceroni Date: Mon, 4 Sep 2023 21:43:24 +0200 Subject: [PATCH 36/72] Update data/conf/sogo/sogo.conf Co-authored-by: Peter --- data/conf/sogo/sogo.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/conf/sogo/sogo.conf b/data/conf/sogo/sogo.conf index d12333a8..4e18d80b 100644 --- a/data/conf/sogo/sogo.conf +++ b/data/conf/sogo/sogo.conf @@ -83,7 +83,7 @@ //SoDebugBaseURL = YES; //ImapDebugEnabled = YES; //SOGoEASDebugEnabled = YES; - SOGoEASSearchInBody = YES + SOGoEASSearchInBody = YES; //LDAPDebugEnabled = YES; //PGDebugEnabled = YES; //MySQL4DebugEnabled = YES; From 89bc11ce0f2d2b7ce3bcd9b09980ad1dcfd03ca7 Mon Sep 17 00:00:00 2001 From: Christian Schmitt Date: Mon, 11 Sep 2023 15:44:24 +0200 Subject: [PATCH 37/72] Fix typo in German translation: (#5414) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "gibt Aufschluss darüber" --- data/web/lang/lang.de-de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/web/lang/lang.de-de.json b/data/web/lang/lang.de-de.json index 1e65f1be..e7c6682a 100644 --- a/data/web/lang/lang.de-de.json +++ b/data/web/lang/lang.de-de.json @@ -966,7 +966,7 @@ "queue": { "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", + "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", From e26501261e232a1edc3229173eede4862f982625 Mon Sep 17 00:00:00 2001 From: AlexHuebi <39099705+AlexHuebi@users.noreply.github.com> Date: Mon, 11 Sep 2023 20:08:42 +0200 Subject: [PATCH 38/72] "temp" change - removed "git remote set-url" --- update.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/update.sh b/update.sh index 54ddcbc4..95c6478a 100755 --- a/update.sh +++ b/update.sh @@ -888,7 +888,7 @@ done [[ -f data/conf/nginx/ZZZ-ejabberd.conf ]] && rm data/conf/nginx/ZZZ-ejabberd.conf # Silently fixing remote url from andryyy to mailcow -git remote set-url origin https://github.com/mailcow/mailcow-dockerized +# git remote set-url origin https://github.com/mailcow/mailcow-dockerized echo -e "\e[32mCommitting current status...\e[0m" [[ -z "$(git config user.name)" ]] && git config user.name moo [[ -z "$(git config user.email)" ]] && git config user.email moo@cow.moo @@ -1021,4 +1021,4 @@ fi # echo # git reflog --color=always | grep "Before update on " # echo -# echo "Use \"git reset --hard hash-on-the-left\" and run $COMPOSE_COMMAND up -d afterwards." \ No newline at end of file +# echo "Use \"git reset --hard hash-on-the-left\" and run $COMPOSE_COMMAND up -d afterwards." From a8930e8060104a3b943887d7a579be2838154cce Mon Sep 17 00:00:00 2001 From: AlexHuebi <39099705+AlexHuebi@users.noreply.github.com> Date: Mon, 11 Sep 2023 21:39:07 +0200 Subject: [PATCH 39/72] fixed remote url override --- update.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/update.sh b/update.sh index 95c6478a..a379ee30 100755 --- a/update.sh +++ b/update.sh @@ -887,8 +887,22 @@ done [[ -f data/conf/nginx/ZZZ-ejabberd.conf ]] && rm data/conf/nginx/ZZZ-ejabberd.conf + # Silently fixing remote url from andryyy to mailcow # git remote set-url origin https://github.com/mailcow/mailcow-dockerized + +DEFAULT_REPO=https://github.com/mailcow/mailcow-dockerized +CURRENT_REPO=$(git remote get-url origin) +if ["$CURRENT_REPO" != "$DEFAULT_REPO"] + echo "The Repository currently used is not the default Mailcow Repository." + echo "Currently Repository: $CURRENT_REPO" + echo "Default Repository: $DEFAULT_REPO" + read -r -p "Should it be changed back to default? [y/N] " repo_response + if [[ "$repo_response" =~ ^([yY][eE][sS]|[yY])+$ ]]; then + git remote set-url origin $DEFAULT_REPO + fi +fi + echo -e "\e[32mCommitting current status...\e[0m" [[ -z "$(git config user.name)" ]] && git config user.name moo [[ -z "$(git config user.email)" ]] && git config user.email moo@cow.moo From d098e7b9e6c73e823da5dd09bbf958aee523d874 Mon Sep 17 00:00:00 2001 From: AlexHuebi <39099705+AlexHuebi@users.noreply.github.com> Date: Mon, 11 Sep 2023 21:42:43 +0200 Subject: [PATCH 40/72] fixed remote url override --- update.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/update.sh b/update.sh index a379ee30..6ffc06f8 100755 --- a/update.sh +++ b/update.sh @@ -893,7 +893,7 @@ done DEFAULT_REPO=https://github.com/mailcow/mailcow-dockerized CURRENT_REPO=$(git remote get-url origin) -if ["$CURRENT_REPO" != "$DEFAULT_REPO"] +if ["$CURRENT_REPO" != "$DEFAULT_REPO"]; then echo "The Repository currently used is not the default Mailcow Repository." echo "Currently Repository: $CURRENT_REPO" echo "Default Repository: $DEFAULT_REPO" From 88fbec1e5383491a2df04117516882be4d07d996 Mon Sep 17 00:00:00 2001 From: AlexHuebi <39099705+AlexHuebi@users.noreply.github.com> Date: Mon, 11 Sep 2023 21:43:52 +0200 Subject: [PATCH 41/72] fixed remote url override --- update.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/update.sh b/update.sh index 6ffc06f8..db0db3b4 100755 --- a/update.sh +++ b/update.sh @@ -893,7 +893,7 @@ done DEFAULT_REPO=https://github.com/mailcow/mailcow-dockerized CURRENT_REPO=$(git remote get-url origin) -if ["$CURRENT_REPO" != "$DEFAULT_REPO"]; then +if [ "$CURRENT_REPO" != "$DEFAULT_REPO" ]; then echo "The Repository currently used is not the default Mailcow Repository." echo "Currently Repository: $CURRENT_REPO" echo "Default Repository: $DEFAULT_REPO" From 5ae9605e7747d2588609f9b34245264c03a811ac Mon Sep 17 00:00:00 2001 From: FreddleSpl0it Date: Tue, 12 Sep 2023 12:19:46 +0200 Subject: [PATCH 42/72] [Rspamd] domain-wide-footer add jinja templating --- data/conf/rspamd/lua/rspamd.local.lua | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/data/conf/rspamd/lua/rspamd.local.lua b/data/conf/rspamd/lua/rspamd.local.lua index 3d471600..eb1659b3 100644 --- a/data/conf/rspamd/lua/rspamd.local.lua +++ b/data/conf/rspamd/lua/rspamd.local.lua @@ -505,6 +505,7 @@ rspamd_config:register_symbol({ type = 'prefilter', callback = function(task) local lua_mime = require "lua_mime" + local lua_util = require "lua_util" local rspamd_logger = require "rspamd_logger" local rspamd_redis = require "rspamd_redis" local ucl = require "ucl" @@ -542,6 +543,15 @@ rspamd_config:register_symbol({ if footer and type(footer) == "table" and (footer.html or footer.plain) then rspamd_logger.infox(rspamd_config, "found domain wide footer for user %s: html=%s, plain=%s", uname, footer.html, footer.plain) + local replacements = { + email = uname + } + if footer.html then + footer.html = lua_util.jinja_template(footer.html, replacements, true) + end + if footer.plain then + footer.plain = lua_util.jinja_template(footer.plain, replacements, true) + end -- add footer local out = {} From e02a92a0d072e95b3dbfdcc54829b96badbdf8b4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 12 Sep 2023 17:40:44 +0200 Subject: [PATCH 43/72] Update docker/build-push-action action to v5 (#5415) Signed-off-by: milkmaker Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/rebuild_backup_image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/rebuild_backup_image.yml b/.github/workflows/rebuild_backup_image.yml index f22662ed..4fe94ead 100644 --- a/.github/workflows/rebuild_backup_image.yml +++ b/.github/workflows/rebuild_backup_image.yml @@ -26,7 +26,7 @@ jobs: password: ${{ secrets.BACKUPIMAGEBUILD_ACTION_DOCKERHUB_TOKEN }} - name: Build and push - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: context: . platforms: linux/amd64,linux/arm64 From f86f5657d91132047daf5d4c487e7ce73f816b09 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 12 Sep 2023 17:41:00 +0200 Subject: [PATCH 44/72] Update docker/login-action action to v3 (#5416) Signed-off-by: milkmaker Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/rebuild_backup_image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/rebuild_backup_image.yml b/.github/workflows/rebuild_backup_image.yml index 4fe94ead..7f05d814 100644 --- a/.github/workflows/rebuild_backup_image.yml +++ b/.github/workflows/rebuild_backup_image.yml @@ -20,7 +20,7 @@ jobs: uses: docker/setup-buildx-action@v2 - name: Login to Docker Hub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.BACKUPIMAGEBUILD_ACTION_DOCKERHUB_USERNAME }} password: ${{ secrets.BACKUPIMAGEBUILD_ACTION_DOCKERHUB_TOKEN }} From 33de78845380dc11040b08a3d8b62a7852326bf9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 12 Sep 2023 17:41:09 +0200 Subject: [PATCH 45/72] Update docker/setup-qemu-action action to v3 (#5418) Signed-off-by: milkmaker Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/rebuild_backup_image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/rebuild_backup_image.yml b/.github/workflows/rebuild_backup_image.yml index 7f05d814..65c4c2e5 100644 --- a/.github/workflows/rebuild_backup_image.yml +++ b/.github/workflows/rebuild_backup_image.yml @@ -14,7 +14,7 @@ jobs: uses: actions/checkout@v4 - name: Set up QEMU - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 From 160c9caee35a79058dd79f8ea45ec3518533a048 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 12 Sep 2023 17:41:16 +0200 Subject: [PATCH 46/72] Update docker/setup-buildx-action action to v3 (#5417) Signed-off-by: milkmaker Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/rebuild_backup_image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/rebuild_backup_image.yml b/.github/workflows/rebuild_backup_image.yml index 65c4c2e5..649d76a1 100644 --- a/.github/workflows/rebuild_backup_image.yml +++ b/.github/workflows/rebuild_backup_image.yml @@ -17,7 +17,7 @@ jobs: uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Login to Docker Hub uses: docker/login-action@v3 From 2111115a7329300e0c0433fe6c238bb1f7a48c3e Mon Sep 17 00:00:00 2001 From: FreddleSpl0it Date: Wed, 13 Sep 2023 12:42:12 +0200 Subject: [PATCH 47/72] [Rspamd] domain-wide-footer add more template vars --- data/conf/rspamd/lua/rspamd.local.lua | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/data/conf/rspamd/lua/rspamd.local.lua b/data/conf/rspamd/lua/rspamd.local.lua index eb1659b3..95b3d409 100644 --- a/data/conf/rspamd/lua/rspamd.local.lua +++ b/data/conf/rspamd/lua/rspamd.local.lua @@ -543,8 +543,21 @@ rspamd_config:register_symbol({ if footer and type(footer) == "table" and (footer.html or footer.plain) then rspamd_logger.infox(rspamd_config, "found domain wide footer for user %s: html=%s, plain=%s", uname, footer.html, footer.plain) + + local envfrom_mime = task:get_from(2) + local from_name = "" + if envfrom_mime and envfrom_mime[1].name then + from_name = envfrom_mime[1].name + elseif envfrom and envfrom[1].name then + from_name = envfrom[1].name + end + local replacements = { - email = uname + auth_user = uname, + from_user = envfrom[1].user, + from_name = from_name, + from_addr = envfrom[1].addr, + from_domain = envfrom[1].domain:lower() } if footer.html then footer.html = lua_util.jinja_template(footer.html, replacements, true) From 8d792fbd624ce7d23ae8bcf88b49e28d654c3e2e Mon Sep 17 00:00:00 2001 From: FreddleSpl0it Date: Wed, 13 Sep 2023 13:03:46 +0200 Subject: [PATCH 48/72] [Rspamd] domain-wide-footer update description --- data/web/lang/lang.de-de.json | 2 +- data/web/lang/lang.en-gb.json | 2 +- data/web/templates/edit/domain.twig | 7 ++++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/data/web/lang/lang.de-de.json b/data/web/lang/lang.de-de.json index d0c494da..d073c45c 100644 --- a/data/web/lang/lang.de-de.json +++ b/data/web/lang/lang.de-de.json @@ -583,7 +583,7 @@ "domain_admin": "Domain-Administrator bearbeiten", "domain_footer": "Domain wide footer", "domain_footer_html": "HTML footer", - "domain_footer_info": "Domain wide footer werden allen E-Mails hinzugefügt, die von der angegebenen Domain gesendet werden.", + "domain_footer_info": "Domain wide footer werden allen ausgehenden E-Mails hinzugefügt, die einer Adresse innerhalb dieser Domain gehört.
Die folgenden Variablen können für den Footer benutzt werden:", "domain_footer_plain": "PLAIN footer", "domain_quota": "Domain Speicherplatz gesamt (MiB)", "domains": "Domains", diff --git a/data/web/lang/lang.en-gb.json b/data/web/lang/lang.en-gb.json index c8dded33..3896a79a 100644 --- a/data/web/lang/lang.en-gb.json +++ b/data/web/lang/lang.en-gb.json @@ -585,7 +585,7 @@ "domain_admin": "Edit domain administrator", "domain_footer": "Domain wide footer", "domain_footer_html": "HTML footer", - "domain_footer_info": "Domain wide footers will be added to all emails sent from the specified domain.", + "domain_footer_info": "Domain-wide footers are added to all outgoing emails associated with an address within this domain.
The following variables can be used for the footer:", "domain_footer_plain": "PLAIN footer", "domain_quota": "Domain quota", "domains": "Domains", diff --git a/data/web/templates/edit/domain.twig b/data/web/templates/edit/domain.twig index 997788df..527a312c 100644 --- a/data/web/templates/edit/domain.twig +++ b/data/web/templates/edit/domain.twig @@ -281,7 +281,12 @@

{{ lang.edit.domain_footer }}

{{ lang.edit.domain_footer_info|raw }}

-
+
{= auth_user =}   - Authenticated Username specified by an MTA
+{= from_user =}   - Parsed user part of email headers, e.g for "moo@mailcow.tld" it returns "moo"
+{= from_name =}   - Parsed name of email headers, e.g for "Mailcow <moo@mailcow.tld>" it returns "Mailcow"
+{= from_addr =}   - Parsed address part of email headers
+{= from_domain =} - Parsed domain part of email headers
+
From acee74282217b07d858dba92f73a2cb2bffdaffc Mon Sep 17 00:00:00 2001 From: FreddleSpl0it Date: Wed, 13 Sep 2023 15:08:07 +0200 Subject: [PATCH 49/72] [Web] move domain-wide-footer vars info to lang files --- data/web/lang/lang.en-gb.json | 7 +++++++ data/web/templates/edit/domain.twig | 10 +++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/data/web/lang/lang.en-gb.json b/data/web/lang/lang.en-gb.json index 3896a79a..22475bb2 100644 --- a/data/web/lang/lang.en-gb.json +++ b/data/web/lang/lang.en-gb.json @@ -586,6 +586,13 @@ "domain_footer": "Domain wide footer", "domain_footer_html": "HTML footer", "domain_footer_info": "Domain-wide footers are added to all outgoing emails associated with an address within this domain.
The following variables can be used for the footer:", + "domain_footer_info_vars": { + "auth_user": "{= auth_user =} - Authenticated Username specified by an MTA", + "from_user": "{= from_user =} - From user part of envelope, e.g for \"moo@mailcow.tld\" it returns \"moo\"", + "from_name": "{= from_name =} - From name of envelope, e.g for \"Mailcow <moo@mailcow.tld>\" it returns \"Mailcow\"", + "from_addr": "{= from_addr =} - From address part of envelope", + "from_domain": "{= from_domain =} - From domain part of envelope" + }, "domain_footer_plain": "PLAIN footer", "domain_quota": "Domain quota", "domains": "Domains", diff --git a/data/web/templates/edit/domain.twig b/data/web/templates/edit/domain.twig index 527a312c..5e9eb54b 100644 --- a/data/web/templates/edit/domain.twig +++ b/data/web/templates/edit/domain.twig @@ -281,11 +281,11 @@

{{ lang.edit.domain_footer }}

{{ lang.edit.domain_footer_info|raw }}

-
{= auth_user =}   - Authenticated Username specified by an MTA
-{= from_user =}   - Parsed user part of email headers, e.g for "moo@mailcow.tld" it returns "moo"
-{= from_name =}   - Parsed name of email headers, e.g for "Mailcow <moo@mailcow.tld>" it returns "Mailcow"
-{= from_addr =}   - Parsed address part of email headers
-{= from_domain =} - Parsed domain part of email headers
+
{{ lang.edit.domain_footer_info_vars.auth_user }}
+{{ lang.edit.domain_footer_info_vars.from_user }}
+{{ lang.edit.domain_footer_info_vars.from_name }}
+{{ lang.edit.domain_footer_info_vars.from_addr }}
+{{ lang.edit.domain_footer_info_vars.from_domain }}
From 1a1955c1c23d591856982abb964475ff395c3084 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 16 Sep 2023 09:09:40 +0000 Subject: [PATCH 50/72] Update dependency nextcloud/server to v27.1.0 Signed-off-by: milkmaker --- helper-scripts/nextcloud.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helper-scripts/nextcloud.sh b/helper-scripts/nextcloud.sh index 6d7c7953..dc10e4ce 100755 --- a/helper-scripts/nextcloud.sh +++ b/helper-scripts/nextcloud.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash # renovate: datasource=github-releases depName=nextcloud/server versioning=semver extractVersion=^v(?.*)$ -NEXTCLOUD_VERSION=27.0.2 +NEXTCLOUD_VERSION=27.1.0 echo -ne "Checking prerequisites..." sleep 1 From e5752755d157798c64352a11bcb15da6b9f92582 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 26 Sep 2023 20:29:47 +0200 Subject: [PATCH 51/72] Update dependency nextcloud/server to v27.1.1 (#5426) Signed-off-by: milkmaker Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- helper-scripts/nextcloud.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helper-scripts/nextcloud.sh b/helper-scripts/nextcloud.sh index dc10e4ce..fed98e4e 100755 --- a/helper-scripts/nextcloud.sh +++ b/helper-scripts/nextcloud.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash # renovate: datasource=github-releases depName=nextcloud/server versioning=semver extractVersion=^v(?.*)$ -NEXTCLOUD_VERSION=27.1.0 +NEXTCLOUD_VERSION=27.1.1 echo -ne "Checking prerequisites..." sleep 1 From b4a56052c564fd332ffd93740eb5b5b0e5aa8535 Mon Sep 17 00:00:00 2001 From: milkmaker Date: Wed, 27 Sep 2023 17:56:21 +0200 Subject: [PATCH 52/72] [Web] Updated lang.nl-nl.json (#5431) Co-authored-by: Nick Bouwhuis --- data/web/lang/lang.nl-nl.json | 94 +++++++++++++++++++++++++++++++++-- 1 file changed, 89 insertions(+), 5 deletions(-) diff --git a/data/web/lang/lang.nl-nl.json b/data/web/lang/lang.nl-nl.json index 4c2ea0b1..8dcbd950 100644 --- a/data/web/lang/lang.nl-nl.json +++ b/data/web/lang/lang.nl-nl.json @@ -102,7 +102,9 @@ "timeout2": "Time-out voor verbinding met lokale hosts", "username": "Gebruikersnaam", "validate": "Verifieer", - "validation_success": "Succesvol geverifieerd" + "validation_success": "Succesvol geverifieerd", + "tags": "Tags", + "bcc_dest_format": "BCC-bestemming moet één geldig e-mailadres zijn.
Als u een kopie naar meerdere adressen wilt sturen, maak dan een alias aan en gebruik die hier." }, "admin": { "access": "Toegang", @@ -310,7 +312,32 @@ "upload": "Upload", "username": "Gebruikersnaam", "validate_license_now": "Valideer licentie", - "verify": "Verifieer" + "verify": "Verifieer", + "logo_normal_label": "Normaal", + "logo_dark_label": "Omgekeerd voor donkere modus", + "cors_settings": "CORS instellingen", + "is_mx_based": "MX gebasseerd", + "password_length": "Wachtwoordlengte", + "password_policy": "Wachtwoordbeleid", + "password_policy_chars": "Moet tenminste één alfanumeriek karakter bevatten", + "password_policy_length": "Minimale wachtwoord lengte is %d", + "ip_check": "IP controle", + "ip_check_disabled": "IP controle is uitgeschakeld. Je kan het inschakelen onder
Systeem > Configuratie > Opties > Aanpassen", + "oauth2_apps": "OAuth2 applicaties", + "oauth2_add_client": "Voeg OAuth2 client toe", + "options": "Opties", + "password_policy_lowerupper": "Moet hoofdletters en kleine letters bevatten", + "password_policy_numbers": "Moet ten minste één nummer bevatten", + "password_policy_special_chars": "Moet tenminste één speciaal teken bevatten", + "relay_rcpt": "\"Aan:\" adres", + "rsettings_preset_4": "Rspamd voor domein uitschakelen", + "service": "Dienst", + "success": "Succes", + "admins": "Administrators", + "admins_ldap": "LDAP administrators", + "api_read_only": "Alleen-lezen toegang", + "api_read_write": "Lees en schrijf toegang", + "login_time": "Login tijd" }, "danger": { "access_denied": "Toegang geweigerd of ongeldige gegevens", @@ -429,7 +456,14 @@ "username_invalid": "Gebruikersnaam %s kan niet worden gebruikt", "validity_missing": "Wijs een geldigheidstermijn toe", "value_missing": "Niet alle waarden zijn ingevuld", - "yotp_verification_failed": "Yubico OTP-verificatie mislukt: %s" + "yotp_verification_failed": "Yubico OTP-verificatie mislukt: %s", + "cors_invalid_method": "Ongeldige Allow-Method opgegeven", + "webauthn_authenticator_failed": "De geselecteerde authenticator kon niet wordcen gevonden", + "webauthn_publickey_failed": "Er was geen publieke sleutel opgeslagen voor de geselecteerde authenticator", + "demo_mode_enabled": "Demo modus is ingeschakeld", + "template_exists": "Sjabloon %s bestaat al", + "template_id_invalid": "Sjabloon ID %s ongeldig", + "template_name_invalid": "Sjabloon naam ongeldig" }, "debug": { "chart_this_server": "Grafiek (deze server)", @@ -452,7 +486,25 @@ "uptime": "Uptime", "started_on": "Gestart op", "static_logs": "Statische logs", - "system_containers": "Systeem & containers" + "system_containers": "Systeem & containers", + "container_running": "Actief", + "container_disabled": "Container gestopt of uitgeschakeld", + "container_stopped": "Gestopt", + "current_time": "Systeemtijd", + "error_show_ip": "Kon het publieke IP adres niet resolven", + "login_time": "Tijd", + "memory": "Geheugen", + "show_ip": "Toon publiek IP", + "success": "Succes", + "timezone": "Tijdzone", + "update_available": "Er is een update beschikbaar", + "no_update_available": "Het systeem heeft de laatste versie", + "update_failed": "Kon niet op updates controleren", + "username": "Gebruikersnaam", + "wip": "Momenteel werk in uitvoering", + "architecture": "Architectuur", + "cores": "Kernen", + "service": "Dienst" }, "diagnostics": { "cname_from_a": "Waarde afgeleid van een A- of AAAA-vermelding.", @@ -567,7 +619,15 @@ "title": "Wijzig object", "unchanged_if_empty": "Laat leeg wanneer ongewijzigd", "username": "Gebruikersnaam", - "validate_save": "Verifieer en sla op" + "validate_save": "Verifieer en sla op", + "domain_footer_info": "Domeinwijde voetteksten worden toegevoegd aan alle uitgaande e-mails die zijn gekoppeld aan een adres binnen dit domein.
De volgende variabelen kunnen worden gebruikt voor de voettekst:", + "admin": "Bewerk administrator", + "app_passwd_protocols": "Toegestane protocollen voor app wachtwoord", + "created_on": "Gemaakt op", + "acl": "ACL (Toestemming)", + "domain_footer": "Domeinbreede footer", + "domain_footer_html": "HTML footer", + "mailbox_relayhost_info": "Wordt alleen toegepast op de mailbox en directe aliassen, maar heft een domein relayhost op." }, "footer": { "cancel": "Annuleren", @@ -1082,5 +1142,29 @@ "quota_exceeded_scope": "Domeinquota overschreden: Voor dit domein kunnen uitsluitend onbeperkte mailboxen aangemaakt worden.", "session_token": "Token ongeldig: komt niet overeen", "session_ua": "Token ongeldig: gebruikersagentvalidatie mislukt" + }, + "datatables": { + "emptyTable": "Geen data beschikbaar in tabel", + "expand_all": "Alles uitbreiden", + "paginate": { + "last": "Laatste", + "next": "Volgende", + "previous": "Vorige", + "first": "Eerste" + }, + "aria": { + "sortAscending": ": activeer om kolommen oplopend te sorteren", + "sortDescending": ": activeer om kolommen aflopend te sorteren" + }, + "collapse_all": "Alle samenvoegen", + "decimal": ".", + "info": "_START_ tot _END_ van _TOTAL_ worden getoond", + "infoEmpty": "0 tot 0 van 0 items worden getoond", + "thousands": ",", + "lengthMenu": "Toon _MENU_ items", + "loadingRecords": "Laden...", + "processing": "Wachten alstublieft..", + "search": "Zoeken:", + "zeroRecords": "Geen overeenkomsten gevonden" } } From b1c2ffba6ebb92cd130802a60ccf9d70dd945a83 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 27 Sep 2023 18:34:53 +0200 Subject: [PATCH 53/72] mailcow.github.io -> docs.mailcow.email --- .github/ISSUE_TEMPLATE/config.yml | 2 +- CONTRIBUTING.md | 4 ++-- README.md | 2 +- data/web/_status.502.html | 2 +- data/web/lang/lang.cs-cz.json | 2 +- data/web/lang/lang.da-dk.json | 2 +- data/web/lang/lang.de-de.json | 2 +- data/web/lang/lang.en-gb.json | 2 +- data/web/lang/lang.fr-fr.json | 2 +- data/web/lang/lang.it-it.json | 2 +- data/web/lang/lang.nl-nl.json | 2 +- data/web/lang/lang.ro-ro.json | 2 +- data/web/lang/lang.ru-ru.json | 2 +- data/web/lang/lang.sk-sk.json | 2 +- data/web/lang/lang.sv-se.json | 2 +- data/web/lang/lang.uk-ua.json | 2 +- data/web/lang/lang.zh-cn.json | 2 +- data/web/lang/lang.zh-tw.json | 2 +- data/web/templates/user/tab-user-auth.twig | 2 +- generate_config.sh | 12 ++++++------ 20 files changed, 26 insertions(+), 26 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 51d03700..dcda8f02 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,7 +1,7 @@ blank_issues_enabled: false contact_links: - name: ❓ Community-driven support - url: https://mailcow.github.io/mailcow-dockerized-docs/#get-support + url: https://docs.mailcow.email/#get-support about: Please use the community forum for questions or assistance - name: 🚨 Report a security vulnerability url: https://www.servercow.de/anfrage?lang=en diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9cdc6d64..920dd4f3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,7 +3,7 @@ When a problem occurs, then always for a reason! What you want to do in such a c 1. Read your logs; follow them to see what the reason for your problem is. 2. Follow the leads given to you in your logfiles and start investigating. 3. Restarting the troubled service or the whole stack to see if the problem persists. -4. Read the [documentation](https://mailcow.github.io/mailcow-dockerized-docs/) of the troubled service and search its bugtracker for your problem. +4. Read the [documentation](https://docs.mailcow.email/) of the troubled service and search its bugtracker for your problem. 5. Search our [issues](https://github.com/mailcow/mailcow-dockerized/issues) for your problem. 6. [Create an issue](https://github.com/mailcow/mailcow-dockerized/issues/new/choose) over at our GitHub repository if you think your problem might be a bug or a missing feature you badly need. But please make sure, that you include **all the logs** and a full description to your problem. -7. Ask your questions in our community-driven [support channels](https://mailcow.github.io/mailcow-dockerized-docs/#community-support-and-chat). +7. Ask your questions in our community-driven [support channels](https://docs.mailcow.email/#community-support-and-chat). diff --git a/README.md b/README.md index c15b8ef0..2dacac9a 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Or just spread the word: moo. ## Info, documentation and support -Please see [the official documentation](https://mailcow.github.io/mailcow-dockerized-docs/) for installation and support instructions. 🐄 +Please see [the official documentation](https://docs.mailcow.email/) for installation and support instructions. 🐄 🐛 **If you found a critical security issue, please mail us to [info at servercow.de](mailto:info@servercow.de).** diff --git a/data/web/_status.502.html b/data/web/_status.502.html index 35a66ba9..c8a9b702 100644 --- a/data/web/_status.502.html +++ b/data/web/_status.502.html @@ -20,6 +20,6 @@
BACKUP_LOCATION=/tmp/ ./helper-scripts/backup_and_restore.sh backup all
docker compose down --volumes ; docker compose up -d

Make sure your timezone is correct. Use "America/New_York" for example, do not use spaces. Check here for a list.

-
Click to learn more about getting support. +
Click to learn more about getting support. diff --git a/data/web/lang/lang.cs-cz.json b/data/web/lang/lang.cs-cz.json index ee0a952f..d8ec9bf6 100644 --- a/data/web/lang/lang.cs-cz.json +++ b/data/web/lang/lang.cs-cz.json @@ -515,7 +515,7 @@ "dns_records": "DNS záznamy", "dns_records_24hours": "Upozornění: Změnám v systému DNS může trvat až 24 hodin, než se zde správně zobrazí jejich aktuální stav. Můžete zde snadno zjistit, jak nastavit DNS záznamy a zda jsou všechny záznamy správně uloženy.", "dns_records_data": "Správný záznam", - "dns_records_docs": "Přečtěte si prosím dokumentaci.", + "dns_records_docs": "Přečtěte si prosím dokumentaci.", "dns_records_name": "Název", "dns_records_status": "Současný stav", "dns_records_type": "Typ", diff --git a/data/web/lang/lang.da-dk.json b/data/web/lang/lang.da-dk.json index 5846181b..33629bbe 100644 --- a/data/web/lang/lang.da-dk.json +++ b/data/web/lang/lang.da-dk.json @@ -459,7 +459,7 @@ "cname_from_a": "Værdi afledt af A / AAAA-post. Dette understøttes, så længe posten peger på den korrekte ressource.", "dns_records": "DNS-poster", "dns_records_24hours": "Bemærk, at ændringer, der foretages i DNS, kan tage op til 24 timer for at få deres aktuelle status korrekt reflekteret på denne side. Det er beregnet som en måde for dig let at se, hvordan du konfigurerer dine DNS-poster og kontrollere, om alle dine poster er korrekt gemt i DNS.", - "dns_records_docs": "Se også dokumentationen.", + "dns_records_docs": "Se også dokumentationen.", "dns_records_data": "Korrekte data", "dns_records_name": "Navn", "dns_records_status": "Nuværende tilstand", diff --git a/data/web/lang/lang.de-de.json b/data/web/lang/lang.de-de.json index d073c45c..ee3d225c 100644 --- a/data/web/lang/lang.de-de.json +++ b/data/web/lang/lang.de-de.json @@ -548,7 +548,7 @@ "dns_records": "DNS-Einträge", "dns_records_24hours": "Bitte beachten Sie, dass es bis zu 24 Stunden dauern kann, bis Änderungen an Ihren DNS-Einträgen als aktueller Status auf dieser Seite dargestellt werden. Diese Seite ist nur als Hilfsmittel gedacht, um die korrekten Werte für DNS-Einträge anzuzeigen und zu überprüfen, ob die Daten im DNS hinterlegt sind.", "dns_records_data": "Korrekte Daten", - "dns_records_docs": "Die Online-Dokumentation enthält weitere Informationen zur DNS-Konfiguration.", + "dns_records_docs": "Die Online-Dokumentation enthält weitere Informationen zur DNS-Konfiguration.", "dns_records_name": "Name", "dns_records_status": "Aktueller Status", "dns_records_type": "Typ", diff --git a/data/web/lang/lang.en-gb.json b/data/web/lang/lang.en-gb.json index 22475bb2..63b6e80d 100644 --- a/data/web/lang/lang.en-gb.json +++ b/data/web/lang/lang.en-gb.json @@ -550,7 +550,7 @@ "dns_records": "DNS Records", "dns_records_24hours": "Please note that changes made to DNS may take up to 24 hours to correctly have their current state reflected on this page. It is intended as a way for you to easily see how to configure your DNS records and to check whether all your records are correctly stored in DNS.", "dns_records_data": "Correct Data", - "dns_records_docs": "Please also consult the documentation.", + "dns_records_docs": "Please also consult the documentation.", "dns_records_name": "Name", "dns_records_status": "Current State", "dns_records_type": "Type", diff --git a/data/web/lang/lang.fr-fr.json b/data/web/lang/lang.fr-fr.json index 48420550..ca67b592 100644 --- a/data/web/lang/lang.fr-fr.json +++ b/data/web/lang/lang.fr-fr.json @@ -479,7 +479,7 @@ "cname_from_a": "Valeur dérivée de l’enregistrement A/AAAA. Ceci est supporté tant que l’enregistrement indique la bonne ressource.", "dns_records": "Enregistrements DNS", "dns_records_24hours": "Veuillez noter que les modifications apportées au DNS peuvent prendre jusqu’à 24 heures pour que leurs états actuels soient correctement reflétés sur cette page. Il est conçu comme un moyen pour vous de voir facilement comment configurer vos enregistrements DNS et de vérifier si tous vos enregistrements sont correctement stockés dans les DNS.", - "dns_records_docs": "Veuillez également consulter la documentation.", + "dns_records_docs": "Veuillez également consulter la documentation.", "dns_records_data": "Données correcte", "dns_records_name": "Nom", "dns_records_status": "Etat courant", diff --git a/data/web/lang/lang.it-it.json b/data/web/lang/lang.it-it.json index 8831358e..6783dfed 100644 --- a/data/web/lang/lang.it-it.json +++ b/data/web/lang/lang.it-it.json @@ -506,7 +506,7 @@ "dns_records": "Record DNS", "dns_records_24hours": "Tieni presente che le modifiche apportate ai record DNS potrebbero richiedere fino a 24 ore per poter essere visualizzate correttamente in questa pagina. Tutto ciò è da intendersi come un modo per voi di vedere come configurare i record DNS e per controllare se tutti i record DNS sono stati inseriti correttamente.", "dns_records_data": "Dati corretti", - "dns_records_docs": "Si prega di consultare anche la documentazione.", + "dns_records_docs": "Si prega di consultare anche la documentazione.", "dns_records_name": "Nome", "dns_records_status": "Stato attuale", "dns_records_type": "Tipo", diff --git a/data/web/lang/lang.nl-nl.json b/data/web/lang/lang.nl-nl.json index 8dcbd950..efffa1d7 100644 --- a/data/web/lang/lang.nl-nl.json +++ b/data/web/lang/lang.nl-nl.json @@ -510,7 +510,7 @@ "cname_from_a": "Waarde afgeleid van een A- of AAAA-vermelding.", "dns_records": "DNS-configuratie", "dns_records_24hours": "Houd er rekening mee dat wijzigingen aan DNS tot wel 24 uur in beslag kunnen nemen voordat ze op deze pagina worden weergegeven. Deze informatie is bedoeld om gemakkelijk te bekijken of de DNS-configuratie aan de eisen voldoet.", - "dns_records_docs": "Raadpleeg ook de documentatie.", + "dns_records_docs": "Raadpleeg ook de documentatie.", "dns_records_data": "Correcte gegevens", "dns_records_name": "Naam", "dns_records_status": "Huidige staat", diff --git a/data/web/lang/lang.ro-ro.json b/data/web/lang/lang.ro-ro.json index 1d7eb8ba..5c7b29b0 100644 --- a/data/web/lang/lang.ro-ro.json +++ b/data/web/lang/lang.ro-ro.json @@ -504,7 +504,7 @@ "cname_from_a": "Valoare derivată din înregistrarea A/AAAA. Acest lucru este acceptat atâta timp cât înregistrarea indică resursele corecte.", "dns_records": "Înregistrări DNS", "dns_records_24hours": "Rețineți că modificările aduse DNS-ului pot dura până la 24 de ore pentru a reflecta corect starea lor curentă pe această pagină. Acest mecanism este conceput ca o modalitate să vezi ușor cum să îți configurezi înregistrările DNS și să verifici dacă toate înregistrările sunt stocate corect în DNS.", - "dns_records_docs": "Vă rugăm să consultați și documentația.", + "dns_records_docs": "Vă rugăm să consultați și documentația.", "dns_records_data": "Date corecte", "dns_records_name": "Nume", "dns_records_status": "Stare curentă", diff --git a/data/web/lang/lang.ru-ru.json b/data/web/lang/lang.ru-ru.json index dccaa204..87452a09 100644 --- a/data/web/lang/lang.ru-ru.json +++ b/data/web/lang/lang.ru-ru.json @@ -500,7 +500,7 @@ "dns_records": "Записи DNS", "dns_records_24hours": "Обратите внимание, что для внесения изменений в DNS может потребоваться до 24 часов, чтобы правильно отобразить их текущее состояние на этой странице. Эта страница предназначен для того, чтобы вы могли легко увидеть, как настроить записи DNS и проверить, все ли записи правильно занесены в DNS.", "dns_records_data": "Значение", - "dns_records_docs": "Пожалуйста, ознакомьтесь с документацией.", + "dns_records_docs": "Пожалуйста, ознакомьтесь с документацией.", "dns_records_name": "Название", "dns_records_status": "Статус", "dns_records_type": "Тип", diff --git a/data/web/lang/lang.sk-sk.json b/data/web/lang/lang.sk-sk.json index 072d9ce3..20694e9c 100644 --- a/data/web/lang/lang.sk-sk.json +++ b/data/web/lang/lang.sk-sk.json @@ -512,7 +512,7 @@ "dns_records": "DNS záznamy", "dns_records_24hours": "Berte prosím do úvahy, že zmeny v DNS môžu trvať až 24 hodín, aby sa zmeny prejavili na tejto stránke. Pre jednoduchosť DNS konfigurácie môžete použiť údaje uvedené nižšie, prípadne skontrolovať tak správnosť záznamov v DNS.", "dns_records_data": "Správne dáta", - "dns_records_docs": "Pozrite si prosím dokumentáciu.", + "dns_records_docs": "Pozrite si prosím dokumentáciu.", "dns_records_name": "Meno", "dns_records_status": "Súčasný stav", "dns_records_type": "Typ", diff --git a/data/web/lang/lang.sv-se.json b/data/web/lang/lang.sv-se.json index 31bc0ab3..ba97e705 100644 --- a/data/web/lang/lang.sv-se.json +++ b/data/web/lang/lang.sv-se.json @@ -473,7 +473,7 @@ "cname_from_a": "Värde härstammar från A/AAAA-uppslaget. Detta stöds så länge som uppslaget pekar mot rätt resurs.", "dns_records": "DNS-uppslag", "dns_records_24hours": "Observera att ändringar gjorda i DNS kan ta upp till 24 timmar innan det visas korrekt på denna sida. Syftet med sidan är att enkelt se hur DNS-uppslagen är konfigurerade. Det är lätt att kontrollera att DNS-uppslagen är korrekt uppsatta.", - "dns_records_docs": "Se även dokumentationen.", + "dns_records_docs": "Se även dokumentationen.", "dns_records_data": "Korrektdata", "dns_records_name": "Namn", "dns_records_status": "Nuvarande status", diff --git a/data/web/lang/lang.uk-ua.json b/data/web/lang/lang.uk-ua.json index 8ebad389..6cb439f7 100644 --- a/data/web/lang/lang.uk-ua.json +++ b/data/web/lang/lang.uk-ua.json @@ -521,7 +521,7 @@ "cname_from_a": "Значення, отримане із запису A/AAAA. Це підтримується, поки запис вказує на правильний ресурс.", "dns_records": "Записи DNS", "dns_records_data": "Значення", - "dns_records_docs": "Також перегляньте документацію.", + "dns_records_docs": "Також перегляньте документацію.", "dns_records_name": "Назва", "dns_records_status": "Статус", "optional": "Цей запис необов'язковий.", diff --git a/data/web/lang/lang.zh-cn.json b/data/web/lang/lang.zh-cn.json index 428e5934..b1aacf5c 100644 --- a/data/web/lang/lang.zh-cn.json +++ b/data/web/lang/lang.zh-cn.json @@ -494,7 +494,7 @@ "dns_records": "DNS 记录", "dns_records_24hours": "请注意 DNS 记录的更改可能需要24小时才可以使此页面的当前状态显示正确。此页面为你提供了一个可以便捷查询如何配置 DNS 记录以及检查你的 DNS 记录是否正确的方式。", "dns_records_data": "正确数据", - "dns_records_docs": "请同时也参考这个文档.", + "dns_records_docs": "请同时也参考这个文档.", "dns_records_name": "名称", "dns_records_status": "当前状态", "dns_records_type": "类型", diff --git a/data/web/lang/lang.zh-tw.json b/data/web/lang/lang.zh-tw.json index d973157c..2c9d61fd 100644 --- a/data/web/lang/lang.zh-tw.json +++ b/data/web/lang/lang.zh-tw.json @@ -488,7 +488,7 @@ "dns_records": "DNS 紀錄", "dns_records_24hours": "請注意 DNS 紀錄的更改可能需要 24 小時才能正確顯示於此頁面。此頁面的目的是為了讓你可以輕鬆的了解如何設定 DNS 紀錄並檢查 DNS 是否設定正確。", "dns_records_data": "正確值", - "dns_records_docs": "請同時另外查看 文件.", + "dns_records_docs": "請同時另外查看 文件.", "dns_records_name": "名稱", "dns_records_status": "目前狀態", "dns_records_type": "類型", diff --git a/data/web/templates/user/tab-user-auth.twig b/data/web/templates/user/tab-user-auth.twig index ab664f7c..4d55b709 100644 --- a/data/web/templates/user/tab-user-auth.twig +++ b/data/web/templates/user/tab-user-auth.twig @@ -142,7 +142,7 @@
-

[{{ lang.user.client_configuration }}]

+

[{{ lang.user.client_configuration }}]

[{{ lang.user.show_sieve_filters }}]


diff --git a/generate_config.sh b/generate_config.sh index 12749605..5fdcecc6 100755 --- a/generate_config.sh +++ b/generate_config.sh @@ -34,7 +34,7 @@ if docker compose > /dev/null 2>&1; then echo -e "\e[33mNotice: You´ll have to update this Compose Version via your Package Manager manually!\e[0m" else echo -e "\e[31mCannot find Docker Compose with a Version Higher than 2.X.X.\e[0m" - echo -e "\e[31mPlease update/install it manually regarding to this doc site: https://mailcow.github.io/mailcow-dockerized-docs/i_u_m/i_u_m_install/\e[0m" + echo -e "\e[31mPlease update/install it manually regarding to this doc site: https://docs.mailcow.email/i_u_m/i_u_m_install/\e[0m" exit 1 fi elif docker-compose > /dev/null 2>&1; then @@ -47,14 +47,14 @@ elif docker-compose > /dev/null 2>&1; then echo -e "\e[33mNotice: For an automatic update of docker-compose please use the update_compose.sh scripts located at the helper-scripts folder.\e[0m" else echo -e "\e[31mCannot find Docker Compose with a Version Higher than 2.X.X.\e[0m" - echo -e "\e[31mPlease update/install manually regarding to this doc site: https://mailcow.github.io/mailcow-dockerized-docs/i_u_m/i_u_m_install/\e[0m" + echo -e "\e[31mPlease update/install manually regarding to this doc site: https://docs.mailcow.email/i_u_m/i_u_m_install/\e[0m" exit 1 fi fi else echo -e "\e[31mCannot find Docker Compose.\e[0m" - echo -e "\e[31mPlease install it regarding to this doc site: https://mailcow.github.io/mailcow-dockerized-docs/i_u_m/i_u_m_install/\e[0m" + echo -e "\e[31mPlease install it regarding to this doc site: https://docs.mailcow.email/i_u_m/i_u_m_install/\e[0m" exit 1 fi @@ -220,7 +220,7 @@ MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME} # Password hash algorithm # Only certain password hash algorithm are supported. For a fully list of supported schemes, -# see https://mailcow.github.io/mailcow-dockerized-docs/models/model-passwd/ +# see https://docs.mailcow.email/models/model-passwd/ MAILCOW_PASS_SCHEME=BLF-CRYPT # ------------------------------ @@ -246,7 +246,7 @@ DBROOT=$(LC_ALL=C /dev/null | head -c 28) # IMPORTANT: Do not use port 8081, 9081 or 65510! # Example: HTTP_BIND=1.2.3.4 # For IPv4 leave it as it is: HTTP_BIND= & HTTPS_PORT= -# For IPv6 see https://mailcow.github.io/mailcow-dockerized-docs/post_installation/firststeps-ip_bindings/ +# For IPv6 see https://docs.mailcow.email/post_installation/firststeps-ip_bindings/ HTTP_PORT=80 HTTP_BIND= @@ -450,7 +450,7 @@ DOVECOT_MASTER_PASS= # Optional: Leave empty for none # This value is only used on first order! # Setting it at a later point will require the following steps: -# https://mailcow.github.io/mailcow-dockerized-docs/troubleshooting/debug-reset_tls/ +# https://docs.mailcow.email/troubleshooting/debug-reset_tls/ ACME_CONTACT= # WebAuthn device manufacturer verification From c55c38f77b0807459f29708196fef4147590c4ff Mon Sep 17 00:00:00 2001 From: milkmaker Date: Sat, 30 Sep 2023 14:18:55 +0200 Subject: [PATCH 54/72] Translations update from Weblate (#5434) * [Web] Updated lang.ru-ru.json Co-authored-by: Oleksii Kruhlenko Co-authored-by: milkmaker * [Web] Updated lang.uk-ua.json Co-authored-by: Oleksii Kruhlenko Co-authored-by: milkmaker --------- Co-authored-by: Oleksii Kruhlenko --- data/web/lang/lang.ru-ru.json | 16 ++++++++++++++-- data/web/lang/lang.uk-ua.json | 13 ++++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/data/web/lang/lang.ru-ru.json b/data/web/lang/lang.ru-ru.json index 87452a09..67800f33 100644 --- a/data/web/lang/lang.ru-ru.json +++ b/data/web/lang/lang.ru-ru.json @@ -618,7 +618,18 @@ "username": "Имя пользователя", "validate_save": "Подтвердить и сохранить", "sogo_access_info": "Единый вход из интерфейса почты продолжает работать. Эта настройка не влияет на доступ ко всем другим службам, а также не удаляет или изменяет существующий профиль пользователя SOGo.", - "app_passwd_protocols": "Разрешенные протоколы для пароля приложения" + "app_passwd_protocols": "Разрешенные протоколы для пароля приложения", + "domain_footer_info": "Нижние колонтитулы на уровне домена добавляются ко всем исходящим электронным письмам, связанным с адресом в этом домене.
Для нижнего колонтитула можно использовать следующие переменные:", + "domain_footer_info_vars": { + "from_name": "{= from_name =} - Из названия envelope, например, для \"Mailcow <moo@mailcow.tld>\" возвращается \"Mailcow\"", + "auth_user": "{= auth_user =} - Аутентифицированное имя пользователя, указанное MTA", + "from_user": "{= from_user =} - Из пользовательской части envelope, например, для \"moo@mailcow.tld\" возвращается \"moo\"", + "from_addr": "{= from_addr =} - Из адресной части envelope", + "from_domain": "{= from_domain =} - из доменной части envelope" + }, + "domain_footer": "Нижний колонтитул домена", + "domain_footer_html": "HTML нижний колонтитул", + "domain_footer_plain": "ПРОСТОЙ нижний колонтитул" }, "fido2": { "confirm": "Подтвердить", @@ -999,7 +1010,8 @@ "verified_totp_login": "Авторизация TOTP пройдена", "verified_webauthn_login": "Авторизация WebAuthn пройдена", "verified_yotp_login": "Авторизация Yubico OTP пройдена", - "cors_headers_edited": "Настройки CORS сохранены" + "cors_headers_edited": "Настройки CORS сохранены", + "domain_footer_modified": "Изменения в нижнем колонтитуле домена %s сохранены" }, "tfa": { "api_register": "%s использует Yubico Cloud API. Пожалуйста, получите ключ API для вашего ключа здесь", diff --git a/data/web/lang/lang.uk-ua.json b/data/web/lang/lang.uk-ua.json index 6cb439f7..d7f3e3e3 100644 --- a/data/web/lang/lang.uk-ua.json +++ b/data/web/lang/lang.uk-ua.json @@ -642,7 +642,18 @@ "sogo_visible_info": "Впливає лише на об'єкти, які можуть відображатися в SOGo (персональні або загальні псевдоніми, що вказують щонайменше на один локальний поштовий обліковий запис). Зверніть увагу, що якщо функцію вимкнено, користувач не зможе вибрати адресу псевдоніма як відправника в SOGo.", "target_address": "Власники псевдоніма, (розділені комами)", "timeout2": "Тайм-аут для підключення до локального хоста", - "pushover_sound": "Звук" + "pushover_sound": "Звук", + "domain_footer": "Нижній колонтитул домену", + "domain_footer_info": "Нижні колонтитули для всього домену додаються до всіх вихідних електронних листів, пов’язаних з адресою в цьому домені.
Наступні змінні можна використовувати для нижнього колонтитула:", + "domain_footer_info_vars": { + "from_name": "{= from_name =} - З назви envelope, наприклад, для \"Mailcow <moo@mailcow.tld>\" повертає \"Mailcow\"", + "auth_user": "{= auth_user =} - Аутентифіковане ім'я користувача, вказане MTA", + "from_user": "{= from_user =} - З користувацької частини envelope, наприклад, для \"moo@mailcow.tld\" повертає \"moo\"", + "from_addr": "{= from_addr =} - З адресної частини envelope", + "from_domain": "{= from_domain =} - З доменної частини envelope" + }, + "domain_footer_html": "Нижній колонтитул HTML", + "domain_footer_plain": "ЗВИЧАЙНИЙ нижній колонтитул" }, "fido2": { "confirm": "Підтвердити", From 24ff70759abf4e752161e0604330fd392dc60eb2 Mon Sep 17 00:00:00 2001 From: milkmaker Date: Sun, 1 Oct 2023 00:15:00 +0000 Subject: [PATCH 55/72] update postscreen_access.cidr --- data/conf/postfix/postscreen_access.cidr | 62 ++++++++---------------- 1 file changed, 19 insertions(+), 43 deletions(-) diff --git a/data/conf/postfix/postscreen_access.cidr b/data/conf/postfix/postscreen_access.cidr index 153cd689..61aac644 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 Mon Jul 31 10:06:06 UTC 2023 +# Whitelist generated by Postwhite v3.4 on Sun Oct 1 00:14:59 UTC 2023 # https://github.com/stevejenkins/postwhite/ -# 2043 total rules +# 2019 total rules 2a00:1450:4000::/36 permit 2a01:111:f400::/48 permit 2a01:111:f403:8000::/50 permit @@ -113,14 +113,10 @@ 39.156.163.64/29 permit 40.71.187.0/24 permit 40.92.0.0/15 permit +40.92.0.0/16 permit 40.107.0.0/16 permit 40.112.65.63 permit 40.117.80.0/24 permit -41.74.192.0/22 permit -41.74.196.0/22 permit -41.74.200.0/23 permit -41.74.204.0/23 permit -41.74.206.0/24 permit 43.228.184.0/22 permit 44.206.138.57 permit 44.209.42.157 permit @@ -192,8 +188,6 @@ 51.137.58.21 permit 51.140.75.55 permit 51.144.100.179 permit -51.163.158.0/24 permit -51.163.159.21 permit 52.5.230.59 permit 52.27.5.72 permit 52.27.28.47 permit @@ -217,9 +211,9 @@ 52.96.222.194 permit 52.96.222.226 permit 52.96.223.2 permit -52.96.228.130 permit 52.96.229.242 permit 52.100.0.0/14 permit +52.103.0.0/17 permit 52.119.213.144/28 permit 52.160.39.140 permit 52.165.175.144 permit @@ -272,8 +266,6 @@ 62.13.150.0/23 permit 62.13.152.0/23 permit 62.17.146.128/26 permit -62.140.7.0/24 permit -62.140.10.21 permit 62.179.121.0/24 permit 62.201.172.0/27 permit 62.201.172.32/27 permit @@ -300,8 +292,6 @@ 64.127.115.252 permit 64.132.88.0/23 permit 64.132.92.0/24 permit -64.135.77.0/24 permit -64.135.83.0/24 permit 64.147.123.17 permit 64.147.123.18 permit 64.147.123.19 permit @@ -622,6 +612,7 @@ 77.238.189.142 permit 77.238.189.146/31 permit 77.238.189.148/30 permit +81.7.169.128/25 permit 81.223.46.0/27 permit 82.165.159.0/24 permit 82.165.159.0/26 permit @@ -672,9 +663,7 @@ 87.248.117.205 permit 87.253.232.0/21 permit 89.22.108.0/24 permit -91.194.248.0/23 permit 91.211.240.0/22 permit -91.220.42.0/24 permit 94.245.112.0/27 permit 94.245.112.10/31 permit 95.131.104.0/21 permit @@ -1190,17 +1179,16 @@ 99.78.197.208/28 permit 103.2.140.0/22 permit 103.9.96.0/22 permit -103.13.69.0/24 permit 103.28.42.0/24 permit 103.47.204.0/22 permit -103.96.21.0/24 permit -103.96.22.0/24 permit -103.96.23.0/24 permit 103.151.192.0/23 permit 103.168.172.128/27 permit 104.43.243.237 permit 104.44.112.128/25 permit 104.47.0.0/17 permit +104.47.20.0/23 permit +104.47.75.0/24 permit +104.47.108.0/23 permit 104.130.96.0/28 permit 104.130.122.0/23 permit 104.214.25.77 permit @@ -1368,8 +1356,6 @@ 121.244.91.48 permit 122.15.156.182 permit 123.126.78.64/29 permit -124.47.150.0/24 permit -124.47.189.0/24 permit 124.108.96.0/24 permit 124.108.96.24/31 permit 124.108.96.28/31 permit @@ -1396,6 +1382,7 @@ 129.41.169.249 permit 129.80.5.164 permit 129.80.67.121 permit +129.145.74.12 permit 129.146.88.28 permit 129.146.147.105 permit 129.146.236.58 permit @@ -1408,6 +1395,7 @@ 129.159.87.137 permit 129.213.195.191 permit 130.61.9.72 permit +130.162.39.83 permit 130.211.0.0/22 permit 131.253.30.0/24 permit 131.253.121.0/26 permit @@ -1466,8 +1454,6 @@ 146.20.215.0/24 permit 146.20.215.182 permit 146.88.28.0/24 permit -146.101.78.0/24 permit -147.28.36.0/24 permit 147.160.158.0/24 permit 147.243.1.47 permit 147.243.1.48 permit @@ -1477,6 +1463,7 @@ 148.105.0.0/16 permit 148.105.8.0/21 permit 149.72.0.0/16 permit +149.72.248.236 permit 149.97.173.180 permit 150.230.98.160 permit 152.67.105.195 permit @@ -1539,6 +1526,7 @@ 166.78.71.131 permit 167.89.0.0/17 permit 167.89.46.159 permit +167.89.54.103 permit 167.89.64.9 permit 167.89.65.0 permit 167.89.65.53 permit @@ -1556,6 +1544,9 @@ 168.138.5.36 permit 168.138.73.51 permit 168.245.0.0/17 permit +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 170.10.68.0/22 permit @@ -1592,7 +1583,6 @@ 176.32.105.0/24 permit 176.32.127.0/24 permit 178.236.10.128/26 permit -180.189.28.0/24 permit 182.50.76.0/22 permit 182.50.78.64/28 permit 183.240.219.64/29 permit @@ -1600,11 +1590,6 @@ 185.4.122.0/24 permit 185.12.80.0/22 permit 185.58.84.93 permit -185.58.85.0/24 permit -185.58.86.0/24 permit -185.72.128.75 permit -185.72.128.76 permit -185.72.128.80 permit 185.80.93.204 permit 185.80.93.227 permit 185.80.95.31 permit @@ -1682,22 +1667,17 @@ 192.254.113.10 permit 192.254.113.101 permit 192.254.114.176 permit -193.7.206.0/25 permit -193.7.207.0/25 permit 193.109.254.0/23 permit 193.122.128.100 permit +193.123.56.63 permit +194.19.134.0/25 permit 194.64.234.128/27 permit 194.64.234.129 permit -194.104.109.0/24 permit -194.104.110.21 permit -194.104.110.240/28 permit -194.104.111.0/24 permit 194.106.220.0/23 permit 194.113.24.0/22 permit 194.154.193.192/27 permit 195.4.92.0/23 permit 195.54.172.0/23 permit -195.130.217.0/24 permit 195.234.109.226 permit 195.245.230.0/23 permit 198.2.128.0/18 permit @@ -1792,6 +1772,7 @@ 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 205.201.128.0/20 permit @@ -1832,7 +1813,6 @@ 207.67.98.192/27 permit 207.68.176.0/26 permit 207.68.176.96/27 permit -207.82.80.0/24 permit 207.126.144.0/20 permit 207.171.160.0/19 permit 207.211.30.64/26 permit @@ -1899,7 +1879,6 @@ 209.67.98.46 permit 209.67.98.59 permit 209.85.128.0/17 permit -212.4.136.0/26 permit 212.82.96.0/24 permit 212.82.96.32/27 permit 212.82.96.64/29 permit @@ -1946,8 +1925,6 @@ 212.227.126.128/25 permit 213.46.255.0/24 permit 213.165.64.0/23 permit -213.167.75.0/25 permit -213.167.81.0/25 permit 213.199.128.139 permit 213.199.128.145 permit 213.199.138.181 permit @@ -2006,7 +1983,6 @@ 216.136.162.65 permit 216.136.162.120/29 permit 216.136.168.80/28 permit -216.145.217.0/24 permit 216.145.221.0/24 permit 216.198.0.0/18 permit 216.203.30.55 permit @@ -2039,7 +2015,7 @@ 2620:109:c006:104::/64 permit 2620:109:c006:104::215 permit 2620:109:c00d:104::/64 permit -2620:10d:c090:450::120 permit +2620:10d:c090:400::8:1 permit 2620:10d:c091:400::8:1 permit 2620:119:50c0:207::/64 permit 2620:119:50c0:207::215 permit From ed365c35e716b19d501e74fded1d53a5cde09e82 Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 2 Oct 2023 20:22:08 +0200 Subject: [PATCH 56/72] Fix renovate.json to allow version extracts --- .github/renovate.json | 2 +- data/Dockerfiles/dovecot/Dockerfile | 4 ++-- data/Dockerfiles/phpfpm/Dockerfile | 12 ++++++------ data/Dockerfiles/sogo/Dockerfile | 2 +- data/Dockerfiles/solr/Dockerfile | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/renovate.json b/.github/renovate.json index 36b4aec5..e2de9e5c 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -24,7 +24,7 @@ { "fileMatch": ["(^|/)Dockerfile[^/]*$"], "matchStrings": [ - "#\\srenovate:\\sdatasource=(?.*?) depName=(?.*?)( versioning=(?.*?))?\\s(ENV|ARG) .*?_VERSION=(?.*)\\s" + "#\\srenovate:\\sdatasource=(?.*?) depName=(?.*?)( versioning=(?.*?))?( extractVersion=(?.*?))?\\s(ENV|ARG) .*?_VERSION=(?.*)\\s" ] } ] diff --git a/data/Dockerfiles/dovecot/Dockerfile b/data/Dockerfiles/dovecot/Dockerfile index db3a71b5..fc4501a5 100644 --- a/data/Dockerfiles/dovecot/Dockerfile +++ b/data/Dockerfiles/dovecot/Dockerfile @@ -2,9 +2,9 @@ FROM debian:bullseye-slim LABEL maintainer "The Infrastructure Company GmbH " ARG DEBIAN_FRONTEND=noninteractive -# renovate: datasource=github-tags depName=dovecot/core versioning=semver-coerced +# renovate: datasource=github-tags depName=dovecot/core versioning=semver-coerced extractVersion=^v(?.*)$ ARG DOVECOT=2.3.20 -# renovate: datasource=github-releases depName=tianon/gosu versioning=semver-coerced +# renovate: datasource=github-releases depName=tianon/gosu versioning=semver-coerced extractVersion=^v(?.*)$ ARG GOSU_VERSION=1.16 ENV LC_ALL C diff --git a/data/Dockerfiles/phpfpm/Dockerfile b/data/Dockerfiles/phpfpm/Dockerfile index a7a4236b..6c53f28c 100644 --- a/data/Dockerfiles/phpfpm/Dockerfile +++ b/data/Dockerfiles/phpfpm/Dockerfile @@ -1,17 +1,17 @@ FROM php:8.2-fpm-alpine3.17 LABEL maintainer "The Infrastructure Company GmbH " -# renovate: datasource=github-tags depName=krakjoe/apcu versioning=semver-coerced +# renovate: datasource=github-tags depName=krakjoe/apcu versioning=semver-coerced extractVersion=^v(?.*)$ ARG APCU_PECL_VERSION=5.1.22 -# renovate: datasource=github-tags depName=Imagick/imagick versioning=semver-coerced +# renovate: datasource=github-tags depName=Imagick/imagick versioning=semver-coerced extractVersion=^v(?.*)$ ARG IMAGICK_PECL_VERSION=3.7.0 -# renovate: datasource=github-tags depName=php/pecl-mail-mailparse versioning=semver-coerced +# renovate: datasource=github-tags depName=php/pecl-mail-mailparse versioning=semver-coerced extractVersion=^v(?.*)$ ARG MAILPARSE_PECL_VERSION=3.1.4 -# renovate: datasource=github-tags depName=php-memcached-dev/php-memcached versioning=semver-coerced +# renovate: datasource=github-tags depName=php-memcached-dev/php-memcached versioning=semver-coerced extractVersion=^v(?.*)$ ARG MEMCACHED_PECL_VERSION=3.2.0 -# renovate: datasource=github-tags depName=phpredis/phpredis versioning=semver-coerced +# renovate: datasource=github-tags depName=phpredis/phpredis versioning=semver-coerced extractVersion=^v(?.*)$ ARG REDIS_PECL_VERSION=5.3.7 -# renovate: datasource=github-tags depName=composer/composer versioning=semver-coerced +# renovate: datasource=github-tags depName=composer/composer versioning=semver-coerced extractVersion=^v(?.*)$ ARG COMPOSER_VERSION=2.5.5 RUN apk add -U --no-cache autoconf \ diff --git a/data/Dockerfiles/sogo/Dockerfile b/data/Dockerfiles/sogo/Dockerfile index a1ef95bb..35e0721e 100644 --- a/data/Dockerfiles/sogo/Dockerfile +++ b/data/Dockerfiles/sogo/Dockerfile @@ -3,7 +3,7 @@ LABEL maintainer "The Infrastructure Company GmbH " ARG DEBIAN_FRONTEND=noninteractive ARG SOGO_DEBIAN_REPOSITORY=http://packages.sogo.nu/nightly/5/debian/ -# renovate: datasource=github-releases depName=tianon/gosu versioning=semver-coerced +# renovate: datasource=github-releases depName=tianon/gosu versioning=semver-coerced extractVersion=^v(?.*)$ ARG GOSU_VERSION=1.16 ENV LC_ALL C diff --git a/data/Dockerfiles/solr/Dockerfile b/data/Dockerfiles/solr/Dockerfile index 0c5af1af..dd465b4d 100644 --- a/data/Dockerfiles/solr/Dockerfile +++ b/data/Dockerfiles/solr/Dockerfile @@ -2,7 +2,7 @@ FROM solr:7.7-slim USER root -# renovate: datasource=github-releases depName=tianon/gosu versioning=semver-coerced +# renovate: datasource=github-releases depName=tianon/gosu versioning=semver-coerced extractVersion=^v(?.*)$ ARG GOSU_VERSION=1.16 COPY solr.sh / From 3f2a9b6973a246d92231cd2f7ddeb771413e95e6 Mon Sep 17 00:00:00 2001 From: Florian Hillebrand Date: Tue, 3 Oct 2023 20:54:45 +0200 Subject: [PATCH 57/72] Update ClamAV to latest LTS version 1.0.3 --- data/Dockerfiles/clamd/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/Dockerfiles/clamd/Dockerfile b/data/Dockerfiles/clamd/Dockerfile index f381e0ef..6d646664 100644 --- a/data/Dockerfiles/clamd/Dockerfile +++ b/data/Dockerfiles/clamd/Dockerfile @@ -1,4 +1,4 @@ -FROM clamav/clamav:1.0.1-1_base +FROM clamav/clamav:1.0.3_base LABEL maintainer "André Peters " From 257e104d2b05c9d44a060cb04c36731acfaa0cb3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 13:21:58 +0000 Subject: [PATCH 58/72] Update dependency nextcloud/server to v27.1.2 Signed-off-by: milkmaker --- helper-scripts/nextcloud.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helper-scripts/nextcloud.sh b/helper-scripts/nextcloud.sh index fed98e4e..730e6124 100755 --- a/helper-scripts/nextcloud.sh +++ b/helper-scripts/nextcloud.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash # renovate: datasource=github-releases depName=nextcloud/server versioning=semver extractVersion=^v(?.*)$ -NEXTCLOUD_VERSION=27.1.1 +NEXTCLOUD_VERSION=27.1.2 echo -ne "Checking prerequisites..." sleep 1 From 3851a48ea0833c29fcc8c663186d2216cdae3fee Mon Sep 17 00:00:00 2001 From: DerLinkman Date: Thu, 5 Oct 2023 15:49:19 +0200 Subject: [PATCH 59/72] Bumped clamd version in compose.yml --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 0137413d..5adb92b3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -58,7 +58,7 @@ services: - redis clamd-mailcow: - image: mailcow/clamd:1.61 + image: mailcow/clamd:1.62 restart: always depends_on: - unbound-mailcow From 0c0ec7be583e8a07ac63025ce386fcb05a21fcee Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 14:08:31 +0000 Subject: [PATCH 60/72] Update dependency phpredis/phpredis to v6 Signed-off-by: milkmaker --- data/Dockerfiles/phpfpm/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/Dockerfiles/phpfpm/Dockerfile b/data/Dockerfiles/phpfpm/Dockerfile index 6c53f28c..72ed6033 100644 --- a/data/Dockerfiles/phpfpm/Dockerfile +++ b/data/Dockerfiles/phpfpm/Dockerfile @@ -10,7 +10,7 @@ ARG MAILPARSE_PECL_VERSION=3.1.4 # renovate: datasource=github-tags depName=php-memcached-dev/php-memcached versioning=semver-coerced extractVersion=^v(?.*)$ ARG MEMCACHED_PECL_VERSION=3.2.0 # renovate: datasource=github-tags depName=phpredis/phpredis versioning=semver-coerced extractVersion=^v(?.*)$ -ARG REDIS_PECL_VERSION=5.3.7 +ARG REDIS_PECL_VERSION=6.0.1 # renovate: datasource=github-tags depName=composer/composer versioning=semver-coerced extractVersion=^v(?.*)$ ARG COMPOSER_VERSION=2.5.5 From e67ba60863d5fc4f999caab8a72ce4be3f80ffde Mon Sep 17 00:00:00 2001 From: DerLinkman Date: Thu, 5 Oct 2023 16:21:57 +0200 Subject: [PATCH 61/72] Added Colors, cause there fancy :) + Added in generate_config.sh --- generate_config.sh | 21 ++++++++++++++++++--- update.sh | 7 ++++--- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/generate_config.sh b/generate_config.sh index d09dae9e..5c00347d 100755 --- a/generate_config.sh +++ b/generate_config.sh @@ -109,9 +109,24 @@ echo "Press enter to confirm the detected value '[value]' where applicable or en while [ -z "${MAILCOW_HOSTNAME}" ]; do read -p "Mail server hostname (FQDN) - this is not your mail domain, but your mail servers hostname: " -e MAILCOW_HOSTNAME DOTS=${MAILCOW_HOSTNAME//[^.]}; - if [ ${#DOTS} -lt 2 ] && [ ! -z ${MAILCOW_HOSTNAME} ]; then - echo "${MAILCOW_HOSTNAME} is not a FQDN" - MAILCOW_HOSTNAME= + if [ ${#DOTS} -lt 1 ]; then + echo -e "\e[31mMAILCOW_HOSTNAME (${MAILCOW_HOSTNAME}) is not a FQDN!\e[0m" + sleep 1 + echo "Please change it to a FQDN and redeploy the stack with docker(-)compose up -d" + exit 1 + elif [[ "${MAILCOW_HOSTNAME: -1}" == "." ]]; then + echo "MAILCOW_HOSTNAME (${MAILCOW_HOSTNAME}) is ending with a dot. This is not a valid FQDN!" + exit 1 + elif [ ${#DOTS} -eq 1 ]; then + echo -e "\e[33mMAILCOW_HOSTNAME (${MAILCOW_HOSTNAME}) does not contain a Subdomain. This is not fully tested and may cause issues.\e[0m" + echo "Find more information about why this message exists here: https://github.com/mailcow/mailcow-dockerized/issues/1572" + read -r -p "Do you want to proceed anyway? [y/N] " response + if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]; then + echo "OK. Procceding." + else + echo "OK. Exiting." + exit 1 + fi fi done diff --git a/update.sh b/update.sh index db0db3b4..5204659e 100755 --- a/update.sh +++ b/update.sh @@ -419,14 +419,15 @@ detect_docker_compose_command [[ ! -f mailcow.conf ]] && { echo "mailcow.conf is missing! Is mailcow installed?"; exit 1;} DOTS=${MAILCOW_HOSTNAME//[^.]}; if [ ${#DOTS} -lt 1 ]; then - echo "MAILCOW_HOSTNAME (${MAILCOW_HOSTNAME}) is not a FQDN!" - echo "Please change it to a FQDN and run $COMPOSE_COMMAND down followed by $COMPOSE_COMMAND up -d" + echo -e "\e[31mMAILCOW_HOSTNAME (${MAILCOW_HOSTNAME}) is not a FQDN!\e[0m" + sleep 1 + echo "Please change it to a FQDN and redeploy the stack with $COMPOSE_COMMAND up -d" exit 1 elif [[ "${MAILCOW_HOSTNAME: -1}" == "." ]]; then echo "MAILCOW_HOSTNAME (${MAILCOW_HOSTNAME}) is ending with a dot. This is not a valid FQDN!" exit 1 elif [ ${#DOTS} -eq 1 ]; then - echo "MAILCOW_HOSTNAME (${MAILCOW_HOSTNAME}) does not contain a Subdomain. This is not fully tested and may cause issues." + echo -e "\e[33mMAILCOW_HOSTNAME (${MAILCOW_HOSTNAME}) does not contain a Subdomain. This is not fully tested and may cause issues.\e[0m" echo "Find more information about why this message exists here: https://github.com/mailcow/mailcow-dockerized/issues/1572" read -r -p "Do you want to proceed anyway? [y/N] " response if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]; then From 115d0681a729f554e46cb57031eeca8670e0f73f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 15:20:24 +0000 Subject: [PATCH 62/72] Update dependency php/pecl-mail-mailparse to v3.1.6 Signed-off-by: milkmaker --- data/Dockerfiles/phpfpm/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/Dockerfiles/phpfpm/Dockerfile b/data/Dockerfiles/phpfpm/Dockerfile index 6c53f28c..ca7d629a 100644 --- a/data/Dockerfiles/phpfpm/Dockerfile +++ b/data/Dockerfiles/phpfpm/Dockerfile @@ -6,7 +6,7 @@ ARG APCU_PECL_VERSION=5.1.22 # renovate: datasource=github-tags depName=Imagick/imagick versioning=semver-coerced extractVersion=^v(?.*)$ ARG IMAGICK_PECL_VERSION=3.7.0 # renovate: datasource=github-tags depName=php/pecl-mail-mailparse versioning=semver-coerced extractVersion=^v(?.*)$ -ARG MAILPARSE_PECL_VERSION=3.1.4 +ARG MAILPARSE_PECL_VERSION=v3.1.6 # renovate: datasource=github-tags depName=php-memcached-dev/php-memcached versioning=semver-coerced extractVersion=^v(?.*)$ ARG MEMCACHED_PECL_VERSION=3.2.0 # renovate: datasource=github-tags depName=phpredis/phpredis versioning=semver-coerced extractVersion=^v(?.*)$ From 5de151a966a3f5ee3c8a6bfdf66a54fd3beb0eef Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 6 Oct 2023 00:12:49 +0200 Subject: [PATCH 63/72] change column name --- generate_config.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generate_config.sh b/generate_config.sh index 25770ce2..2005ca40 100755 --- a/generate_config.sh +++ b/generate_config.sh @@ -290,7 +290,7 @@ REDIS_PORT=127.0.0.1:7654 # Your timezone # See https://en.wikipedia.org/wiki/List_of_tz_database_time_zones for a list of timezones -# Use the row named 'TZ database name' + pay attention for 'Notes' row +# Use the column named 'TZ identifier' + pay attention for the column named 'Notes' TZ=${MAILCOW_TZ} From 3d8f45db43fe1b7b3de852c83bce5aaf93a0f9cc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 09:17:46 +0000 Subject: [PATCH 64/72] Update dependency composer/composer to v2.6.5 Signed-off-by: milkmaker --- data/Dockerfiles/phpfpm/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/Dockerfiles/phpfpm/Dockerfile b/data/Dockerfiles/phpfpm/Dockerfile index 6c53f28c..5dacfc57 100644 --- a/data/Dockerfiles/phpfpm/Dockerfile +++ b/data/Dockerfiles/phpfpm/Dockerfile @@ -12,7 +12,7 @@ ARG MEMCACHED_PECL_VERSION=3.2.0 # renovate: datasource=github-tags depName=phpredis/phpredis versioning=semver-coerced extractVersion=^v(?.*)$ ARG REDIS_PECL_VERSION=5.3.7 # renovate: datasource=github-tags depName=composer/composer versioning=semver-coerced extractVersion=^v(?.*)$ -ARG COMPOSER_VERSION=2.5.5 +ARG COMPOSER_VERSION=2.6.5 RUN apk add -U --no-cache autoconf \ aspell-dev \ From 33a38e6fde83e10f5a7987fcc624d6edda8e39f2 Mon Sep 17 00:00:00 2001 From: FreddleSpl0it Date: Fri, 6 Oct 2023 11:31:28 +0200 Subject: [PATCH 65/72] [Web] Avoid setting default ACL on create when nothing is selected --- data/web/inc/functions.mailbox.inc.php | 46 ++++++++++++++++++-------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/data/web/inc/functions.mailbox.inc.php b/data/web/inc/functions.mailbox.inc.php index fe41028b..68cb50f1 100644 --- a/data/web/inc/functions.mailbox.inc.php +++ b/data/web/inc/functions.mailbox.inc.php @@ -1250,9 +1250,27 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { )); } else { - $stmt = $pdo->prepare("INSERT INTO `user_acl` (`username`) VALUES (:username)"); + $stmt = $pdo->prepare("INSERT INTO `user_acl` + (`username`, `spam_alias`, `tls_policy`, `spam_score`, `spam_policy`, `delimiter_action`, `syncjobs`, `eas_reset`, `sogo_profile_reset`, + `pushover`, `quarantine`, `quarantine_attachments`, `quarantine_notification`, `quarantine_category`, `app_passwds`) + VALUES (:username, :spam_alias, :tls_policy, :spam_score, :spam_policy, :delimiter_action, :syncjobs, :eas_reset, :sogo_profile_reset, + :pushover, :quarantine, :quarantine_attachments, :quarantine_notification, :quarantine_category, :app_passwds) "); $stmt->execute(array( - ':username' => $username + ':username' => $username, + ':spam_alias' => 0, + ':tls_policy' => 0, + ':spam_score' => 0, + ':spam_policy' => 0, + ':delimiter_action' => 0, + ':syncjobs' => 0, + ':eas_reset' => 0, + ':sogo_profile_reset' => 0, + ':pushover' => 0, + ':quarantine' => 0, + ':quarantine_attachments' => 0, + ':quarantine_notification' => 0, + ':quarantine_category' => 0, + ':app_passwds' => 0 )); } @@ -1533,20 +1551,20 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { $attr['acl_app_passwds'] = (in_array('app_passwds', $_data['acl'])) ? 1 : 0; } else { $_data['acl'] = (array)$_data['acl']; - $attr['acl_spam_alias'] = 1; - $attr['acl_tls_policy'] = 1; - $attr['acl_spam_score'] = 1; - $attr['acl_spam_policy'] = 1; - $attr['acl_delimiter_action'] = 1; + $attr['acl_spam_alias'] = 0; + $attr['acl_tls_policy'] = 0; + $attr['acl_spam_score'] = 0; + $attr['acl_spam_policy'] = 0; + $attr['acl_delimiter_action'] = 0; $attr['acl_syncjobs'] = 0; - $attr['acl_eas_reset'] = 1; + $attr['acl_eas_reset'] = 0; $attr['acl_sogo_profile_reset'] = 0; - $attr['acl_pushover'] = 1; - $attr['acl_quarantine'] = 1; - $attr['acl_quarantine_attachments'] = 1; - $attr['acl_quarantine_notification'] = 1; - $attr['acl_quarantine_category'] = 1; - $attr['acl_app_passwds'] = 1; + $attr['acl_pushover'] = 0; + $attr['acl_quarantine'] = 0; + $attr['acl_quarantine_attachments'] = 0; + $attr['acl_quarantine_notification'] = 0; + $attr['acl_quarantine_category'] = 0; + $attr['acl_app_passwds'] = 0; } From 87e3c91c26ee117d9ccd92df053bfc2f0ebcd1a2 Mon Sep 17 00:00:00 2001 From: Peter Date: Sun, 8 Oct 2023 11:41:39 +0200 Subject: [PATCH 66/72] Update Dockerfile --- data/Dockerfiles/phpfpm/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/Dockerfiles/phpfpm/Dockerfile b/data/Dockerfiles/phpfpm/Dockerfile index ca7d629a..9f8c8b7b 100644 --- a/data/Dockerfiles/phpfpm/Dockerfile +++ b/data/Dockerfiles/phpfpm/Dockerfile @@ -6,7 +6,7 @@ ARG APCU_PECL_VERSION=5.1.22 # renovate: datasource=github-tags depName=Imagick/imagick versioning=semver-coerced extractVersion=^v(?.*)$ ARG IMAGICK_PECL_VERSION=3.7.0 # renovate: datasource=github-tags depName=php/pecl-mail-mailparse versioning=semver-coerced extractVersion=^v(?.*)$ -ARG MAILPARSE_PECL_VERSION=v3.1.6 +ARG MAILPARSE_PECL_VERSION=3.1.6 # renovate: datasource=github-tags depName=php-memcached-dev/php-memcached versioning=semver-coerced extractVersion=^v(?.*)$ ARG MEMCACHED_PECL_VERSION=3.2.0 # renovate: datasource=github-tags depName=phpredis/phpredis versioning=semver-coerced extractVersion=^v(?.*)$ @@ -110,4 +110,4 @@ COPY ./docker-entrypoint.sh / ENTRYPOINT ["/docker-entrypoint.sh"] -CMD ["php-fpm"] \ No newline at end of file +CMD ["php-fpm"] From d7f3ee16aab2656d94c5d68ec4e5b448eaaad771 Mon Sep 17 00:00:00 2001 From: DerLinkman Date: Tue, 10 Oct 2023 16:13:28 +0200 Subject: [PATCH 67/72] Update Dovecot Wiki Link for new mailcows --- generate_config.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generate_config.sh b/generate_config.sh index 2005ca40..f25309ea 100755 --- a/generate_config.sh +++ b/generate_config.sh @@ -352,7 +352,7 @@ SKIP_LETS_ENCRYPT=n # Create seperate certificates for all domains - y/n # this will allow adding more than 100 domains, but some email clients will not be able to connect with alternative hostnames -# see https://wiki.dovecot.org/SSL/SNIClientSupport +# see https://doc.dovecot.org/admin_manual/ssl/sni_support ENABLE_SSL_SNI=n # Skip IPv4 check in ACME container - y/n From a02bd4beff7a550f25e018b61c652770e94845c5 Mon Sep 17 00:00:00 2001 From: DerLinkman Date: Wed, 11 Oct 2023 12:14:47 +0200 Subject: [PATCH 68/72] [Dovecot] Update to 2.3.21 --- data/Dockerfiles/dovecot/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/Dockerfiles/dovecot/Dockerfile b/data/Dockerfiles/dovecot/Dockerfile index fc4501a5..90a6af93 100644 --- a/data/Dockerfiles/dovecot/Dockerfile +++ b/data/Dockerfiles/dovecot/Dockerfile @@ -3,7 +3,7 @@ LABEL maintainer "The Infrastructure Company GmbH " ARG DEBIAN_FRONTEND=noninteractive # renovate: datasource=github-tags depName=dovecot/core versioning=semver-coerced extractVersion=^v(?.*)$ -ARG DOVECOT=2.3.20 +ARG DOVECOT=2.3.21 # renovate: datasource=github-releases depName=tianon/gosu versioning=semver-coerced extractVersion=^v(?.*)$ ARG GOSU_VERSION=1.16 ENV LC_ALL C From 1fda71e4fa6c457707c744f9820a94e965718691 Mon Sep 17 00:00:00 2001 From: DerLinkman Date: Wed, 11 Oct 2023 12:16:05 +0200 Subject: [PATCH 69/72] Update Images which contains Curl to fix CVEs --- docker-compose.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 5adb92b3..1666a48d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,7 +2,7 @@ version: '2.1' services: unbound-mailcow: - image: mailcow/unbound:1.17 + image: mailcow/unbound:1.18 environment: - TZ=${TZ} volumes: @@ -106,7 +106,7 @@ services: - rspamd php-fpm-mailcow: - image: mailcow/phpfpm:1.84 + image: mailcow/phpfpm:1.85 command: "php-fpm -d date.timezone=${TZ} -d expose_php=0" depends_on: - redis-mailcow @@ -217,7 +217,7 @@ services: - sogo dovecot-mailcow: - image: mailcow/dovecot:1.24 + image: mailcow/dovecot:1.25 depends_on: - mysql-mailcow dns: @@ -297,7 +297,7 @@ services: - dovecot postfix-mailcow: - image: mailcow/postfix:1.71 + image: mailcow/postfix:1.72 depends_on: - mysql-mailcow volumes: @@ -391,7 +391,7 @@ services: acme-mailcow: depends_on: - nginx-mailcow - image: mailcow/acme:1.84 + image: mailcow/acme:1.85 dns: - ${IPV4_NETWORK:-172.22.1}.254 environment: @@ -450,7 +450,7 @@ services: - /lib/modules:/lib/modules:ro watchdog-mailcow: - image: mailcow/watchdog:1.97 + image: mailcow/watchdog:1.98 dns: - ${IPV4_NETWORK:-172.22.1}.254 tmpfs: From eb3be80286b1fe80c64f407cb5ac692767955abc Mon Sep 17 00:00:00 2001 From: DerLinkman Date: Wed, 11 Oct 2023 15:48:25 +0200 Subject: [PATCH 70/72] [Unbound] Added Healthcheck (nslookup) --- data/Dockerfiles/unbound/Dockerfile | 5 +++++ data/Dockerfiles/unbound/healthcheck.sh | 12 ++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 data/Dockerfiles/unbound/healthcheck.sh diff --git a/data/Dockerfiles/unbound/Dockerfile b/data/Dockerfiles/unbound/Dockerfile index e853082d..b1909083 100644 --- a/data/Dockerfiles/unbound/Dockerfile +++ b/data/Dockerfiles/unbound/Dockerfile @@ -18,6 +18,11 @@ EXPOSE 53/udp 53/tcp COPY docker-entrypoint.sh /docker-entrypoint.sh +# healthcheck (nslookup) +COPY healthcheck.sh /healthcheck.sh +RUN chmod +x /healthcheck.sh +HEALTHCHECK --interval=30s --timeout=10s CMD [ "/healthcheck.sh" ] + ENTRYPOINT ["/docker-entrypoint.sh"] CMD ["/usr/sbin/unbound"] diff --git a/data/Dockerfiles/unbound/healthcheck.sh b/data/Dockerfiles/unbound/healthcheck.sh new file mode 100644 index 00000000..8c4508fb --- /dev/null +++ b/data/Dockerfiles/unbound/healthcheck.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +nslookup mailcow.email 127.0.0.1 1> /dev/null + +if [ $? == 0 ]; then + echo "DNS resolution is working!" + exit 0 +else + echo "DNS resolution is not working correctly..." + echo "Maybe check your outbound firewall, as it needs to resolve DNS over TCP AND UDP!" + exit 1 +fi From 0b627017e0658bc48234e001d2611cc50c5005d4 Mon Sep 17 00:00:00 2001 From: DerLinkman Date: Wed, 11 Oct 2023 15:49:00 +0200 Subject: [PATCH 71/72] [Compose] Added Healthcheck startup logics --- docker-compose.yml | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 1666a48d..c8cfd589 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -61,7 +61,9 @@ services: image: mailcow/clamd:1.62 restart: always depends_on: - - unbound-mailcow + unbound-mailcow: + condition: service_healthy + restart: true dns: - ${IPV4_NETWORK:-172.22.1}.254 environment: @@ -299,7 +301,11 @@ services: postfix-mailcow: image: mailcow/postfix:1.72 depends_on: - - mysql-mailcow + mysql-mailcow: + condition: service_started + unbound-mailcow: + condition: service_healthy + restart: true volumes: - ./data/hooks/postfix:/hooks:Z - ./data/conf/postfix:/opt/postfix/conf:z @@ -390,7 +396,10 @@ services: acme-mailcow: depends_on: - - nginx-mailcow + nginx-mailcow: + condition: service_started + unbound-mailcow: + condition: service_healthy image: mailcow/acme:1.85 dns: - ${IPV4_NETWORK:-172.22.1}.254 @@ -461,6 +470,13 @@ services: - postfix-vol-1:/var/spool/postfix - ./data/assets/ssl:/etc/ssl/mail/:ro,z restart: always + depends_on: + - postfix-mailcow + - dovecot-mailcow + - mysql-mailcow + - acme-mailcow + - redis-mailcow + environment: - IPV6_NETWORK=${IPV6_NETWORK:-fd4d:6169:6c63:6f77::/64} - LOG_LINES=${LOG_LINES:-9999} From c134078d601488e233b95a3ceb7a0b42ad711129 Mon Sep 17 00:00:00 2001 From: DerLinkman Date: Thu, 12 Oct 2023 11:11:50 +0200 Subject: [PATCH 72/72] Add comment about experimental thingy --- data/conf/sogo/sogo.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/conf/sogo/sogo.conf b/data/conf/sogo/sogo.conf index 4e18d80b..b424efd8 100644 --- a/data/conf/sogo/sogo.conf +++ b/data/conf/sogo/sogo.conf @@ -83,7 +83,7 @@ //SoDebugBaseURL = YES; //ImapDebugEnabled = YES; //SOGoEASDebugEnabled = YES; - SOGoEASSearchInBody = YES; + SOGoEASSearchInBody = YES; // Experimental. Enabled since 2023-10 //LDAPDebugEnabled = YES; //PGDebugEnabled = YES; //MySQL4DebugEnabled = YES;