From d3922572892bf857027bbd41b22daa6f8d164fc5 Mon Sep 17 00:00:00 2001 From: andryyy <andre.peters@debinux.de> Date: Mon, 27 Apr 2020 17:27:47 +0200 Subject: [PATCH] [Web] Some changes [SOGo] Allow to not spawn SOGo but an idling shell [Rspamd] Remove X-CSA-Complaints from bulk headers... --- data/Dockerfiles/sogo/bootstrap-sogo.sh | 6 +++ data/Dockerfiles/watchdog/watchdog.sh | 2 + data/conf/rspamd/custom/bulk_header.map | 1 - data/conf/rspamd/local.d/multimap.conf | 8 +++ data/web/autodiscover.php | 10 ++++ data/web/edit.php | 12 +++++ data/web/inc/header.inc.php | 2 +- data/web/inc/vars.inc.php | 1 + data/web/index.php | 65 ++++++++++++------------- data/web/lang/lang.ca.json | 2 + data/web/lang/lang.cs.json | 2 + data/web/lang/lang.de.json | 2 + data/web/lang/lang.en.json | 2 + data/web/lang/lang.es.json | 2 + data/web/lang/lang.fi.json | 2 + data/web/lang/lang.fr.json | 2 + data/web/lang/lang.it.json | 2 + data/web/lang/lang.lv.json | 2 + data/web/lang/lang.nl.json | 2 + data/web/lang/lang.pl.json | 2 + data/web/lang/lang.pt.json | 2 + data/web/lang/lang.ru.json | 2 + data/web/lang/lang.sk.json | 2 + data/web/lang/lang.sv.json | 2 + data/web/mailbox.php | 9 +++- data/web/modals/mailbox.php | 30 ++++++++++++ docker-compose.yml | 9 ++-- generate_config.sh | 4 ++ update.sh | 1 + 29 files changed, 151 insertions(+), 39 deletions(-) diff --git a/data/Dockerfiles/sogo/bootstrap-sogo.sh b/data/Dockerfiles/sogo/bootstrap-sogo.sh index 443b836e..612a4e00 100755 --- a/data/Dockerfiles/sogo/bootstrap-sogo.sh +++ b/data/Dockerfiles/sogo/bootstrap-sogo.sh @@ -258,4 +258,10 @@ else rm /etc/cron.d/sogo fi +if [[ "${SKIP_SOGO}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then + echo "SKIP_SOGO=y, skipping SOGo..." + sleep 365d + exit 0 +fi + exec gosu sogo /usr/sbin/sogod diff --git a/data/Dockerfiles/watchdog/watchdog.sh b/data/Dockerfiles/watchdog/watchdog.sh index 7cf7530b..17acf56f 100755 --- a/data/Dockerfiles/watchdog/watchdog.sh +++ b/data/Dockerfiles/watchdog/watchdog.sh @@ -770,6 +770,7 @@ PID=$! echo "Spawned phpfpm_checks with PID ${PID}" BACKGROUND_TASKS+=(${PID}) +if [[ "${SKIP_SOGO}" =~ ^([nN][oO]|[nN])+$ ]]; then ( while true; do if ! sogo_checks; then @@ -781,6 +782,7 @@ done PID=$! echo "Spawned sogo_checks with PID ${PID}" BACKGROUND_TASKS+=(${PID}) +fi if [ ${CHECK_UNBOUND} -eq 1 ]; then ( diff --git a/data/conf/rspamd/custom/bulk_header.map b/data/conf/rspamd/custom/bulk_header.map index bebdba3d..ed1997c2 100644 --- a/data/conf/rspamd/custom/bulk_header.map +++ b/data/conf/rspamd/custom/bulk_header.map @@ -1,4 +1,3 @@ -/X-CSA-Complaints: .*/i /X-EMV-Platform; .*/i /.*nur-1-click*/i /.*episerver.*/i diff --git a/data/conf/rspamd/local.d/multimap.conf b/data/conf/rspamd/local.d/multimap.conf index a7df7304..25551422 100644 --- a/data/conf/rspamd/local.d/multimap.conf +++ b/data/conf/rspamd/local.d/multimap.conf @@ -96,6 +96,7 @@ SIEVE_HOST { type = "ip"; map = "$LOCAL_CONFDIR/custom/dovecot_trusted.map"; symbols_set = ["SIEVE_HOST"]; + score = -15; } RSPAMD_HOST { @@ -150,3 +151,10 @@ BAD_LANG { regexp = true; score = 5.0; } + +BAZAR_ABUSE_CH { + type = "selector"; + selector = "attachments(hex,sha256)"; + map = "https://bazaar.abuse.ch/export/txt/md5/recent/"; + score = 10.0; +} diff --git a/data/web/autodiscover.php b/data/web/autodiscover.php index 3f258e86..c18edbfc 100644 --- a/data/web/autodiscover.php +++ b/data/web/autodiscover.php @@ -37,6 +37,10 @@ if (strpos($data, 'autodiscover/outlook/responseschema') !== false) { } } +if (getenv('SKIP_SOGO') == "y") { + $autodiscover_config['autodiscoverType'] = 'imap'; +} + //$dsn = $database_type . ":host=" . $database_host . ";dbname=" . $database_name; $dsn = $database_type . ":unix_socket=" . $database_sock . ";dbname=" . $database_name; $opt = [ @@ -176,6 +180,9 @@ if ($login_role === "user") { <UsePOPAuth>on</UsePOPAuth> <SMTPLast>off</SMTPLast> </Protocol> + <?php + if (getenv('SKIP_SOGO') != "y") { + ?> <Protocol> <Type>CalDAV</Type> <Server>https://<?=$autodiscover_config['caldav']['server'];?><?php if ($autodiscover_config['caldav']['port'] != 443) echo ':'.$autodiscover_config['caldav']['port']; ?>/SOGo/dav/<?=$email;?>/</Server> @@ -188,6 +195,9 @@ if ($login_role === "user") { <DomainRequired>off</DomainRequired> <LoginName><?=$email;?></LoginName> </Protocol> + <?php + } + ?> </Account> </Response> <?php diff --git a/data/web/edit.php b/data/web/edit.php index 2fc6bfe0..4d880629 100644 --- a/data/web/edit.php +++ b/data/web/edit.php @@ -48,11 +48,17 @@ if (isset($_SESSION['mailcow_cc_role'])) { <div class="checkbox"> <label><input class="goto_checkbox" type="checkbox" value="1" name="goto_ham" <?= ($result['goto'] == "ham@localhost") ? "checked" : null; ?>> <?=$lang['add']['goto_ham'];?></label> </div> + <?php + if (getenv('SKIP_SOGO') != "y") { + ?> <hr> <div class="checkbox"> <label><input type="checkbox" value="1" name="sogo_visible" <?php if (isset($result['sogo_visible_int']) && $result['sogo_visible_int']=="1") { echo "checked"; }; ?>> <?=$lang['edit']['sogo_visible'];?></label> </div> <p class="help-block"><?=$lang['edit']['sogo_visible_info'];?></p> + <?php + } + ?> </div> </div> <hr> @@ -719,6 +725,9 @@ if (isset($_SESSION['mailcow_cc_role'])) { </div> </div> </div> + <?php + if (getenv('SKIP_SOGO') != "y") { + ?> <div data-acl="<?=$_SESSION['acl']['sogo_access'];?>" class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <div class="checkbox"> @@ -727,6 +736,9 @@ if (isset($_SESSION['mailcow_cc_role'])) { </div> </div> </div> + <?php + } + ?> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button class="btn btn-success" data-action="edit_selected" data-id="editmailbox" data-item="<?=htmlspecialchars($result['username']);?>" data-api-url='edit/mailbox' data-api-attr='{}' href="#"><?=$lang['edit']['save'];?></button> diff --git a/data/web/inc/header.inc.php b/data/web/inc/header.inc.php index 4f58833b..429745c2 100644 --- a/data/web/inc/header.inc.php +++ b/data/web/inc/header.inc.php @@ -108,7 +108,7 @@ <li<?= (preg_match("/quarantine/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/quarantine"><span class="glyphicon glyphicon-briefcase"></span> <?= $lang['header']['quarantine']; ?></a></li> <?php } - if ($_SESSION['mailcow_cc_role'] == 'admin') { + if ($_SESSION['mailcow_cc_role'] == 'admin' && getenv('SKIP_SOGO') != "y") { ?> <li><a href data-toggle="modal" data-container="sogo-mailcow" data-target="#RestartContainer"><span class="glyphicon glyphicon-refresh"></span> <?= $lang['header']['restart_sogo']; ?></a></li> <?php diff --git a/data/web/inc/vars.inc.php b/data/web/inc/vars.inc.php index c7e2174f..b45c340a 100644 --- a/data/web/inc/vars.inc.php +++ b/data/web/inc/vars.inc.php @@ -34,6 +34,7 @@ if ($https_port === FALSE) { $autodiscover_config = array( // General autodiscover service type: "activesync" or "imap" // emClient uses autodiscover, but does not support ActiveSync. mailcow excludes emClient from ActiveSync. + // With SOGo disabled, the type will always fallback to imap. CalDAV and CardDAV will be excluded, too. 'autodiscoverType' => 'activesync', // If autodiscoverType => activesync, also use ActiveSync (EAS) for Outlook desktop clients (>= Outlook 2013 on Windows) // Outlook for Mac does not support ActiveSync diff --git a/data/web/index.php b/data/web/index.php index 83482c63..f0f622ed 100644 --- a/data/web/index.php +++ b/data/web/index.php @@ -34,11 +34,11 @@ $_SESSION['index_query_string'] = $_SERVER['QUERY_STRING']; <div class="text-center mailcow-logo"><img src="<?=($main_logo = customize('get', 'main_logo')) ? $main_logo : '/img/cow_mailcow.svg';?>" alt="mailcow"></div> <legend><?= isset($_SESSION['oauth2_request']) ? $lang['oauth2']['authorize_app'] : $UI_TEXTS['main_name'];?></legend> <?php - if (strpos($_SESSION['index_query_string'], 'mobileconfig') !== false): + if (strpos($_SESSION['index_query_string'], 'mobileconfig') !== false) { ?> <div class="alert alert-info"><?= $lang['login']['mobileconfig_info']; ?></div> <?php - endif; + } ?> <form method="post" autofill="off"> <div class="form-group"> @@ -57,55 +57,54 @@ $_SESSION['index_query_string'] = $_SERVER['QUERY_STRING']; </div> <div class="form-group"> <button type="submit" class="btn btn-success" value="Login"><?= $lang['login']['login']; ?></button> - <?php if(!isset($_SESSION['oauth2_request'])): ?> + <?php if(!isset($_SESSION['oauth2_request'])) { ?> <div class="btn-group pull-right"> <button type="button" <?=(isset($_SESSION['mailcow_locale']) && count($AVAILABLE_LANGUAGES) === 1) ? 'disabled="true"' : '' ?> class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <span class="lang-sm lang-lbl" lang="<?= $_SESSION['mailcow_locale']; ?>"></span> <span class="caret"></span> </button> <ul class="dropdown-menu"> <?php - foreach ($AVAILABLE_LANGUAGES as $language): + foreach ($AVAILABLE_LANGUAGES as $language) { ?> <li<?= ($_SESSION['mailcow_locale'] == $language) ? ' class="active"' : ''; ?>><a href="?<?= http_build_query(array_merge($_GET, array('lang' => $language))) ?>"><span class="lang-xs lang-lbl-full" lang="<?= $language; ?>"></span></a></li> - <?php - endforeach; - ?> + <?php } ?> </ul> </div> - <?php endif ?> + <?php } ?> </div> </form> <?php - if (isset($_SESSION['ldelay']) && $_SESSION['ldelay'] != '0'): + if (isset($_SESSION['ldelay']) && $_SESSION['ldelay'] != '0') { ?> <p><div class="alert alert-info"><?= sprintf($lang['login']['delayed'], $_SESSION['ldelay']); ?></b></div></p> + <?php } ?> + <?php if(!isset($_SESSION['oauth2_request'])) { ?> + <legend><span class="glyphicon glyphicon-link" aria-hidden="true"></span> <?=$UI_TEXTS['apps_name'];?></legend> <?php - endif; - ?> - <?php if(!isset($_SESSION['oauth2_request'])): ?> - <legend><span class="glyphicon glyphicon-link" aria-hidden="true"></span> <?=$UI_TEXTS['apps_name'];?></legend> - <?php - foreach ($MAILCOW_APPS as $app): - ?> - <a href="<?= htmlspecialchars($app['link']); ?>" role="button" style="margin-bottom:3pt" title="<?= htmlspecialchars($app['description']); ?>" class="btn btn-primary"><?= htmlspecialchars($app['name']); ?></a> - <?php - endforeach; - $app_links = customize('get', 'app_links'); - if (!empty($app_links)) { - foreach ($app_links as $row) { - foreach ($row as $key => $val): - ?> - <a href="<?= htmlspecialchars($val); ?>" role="button" style="margin-bottom:3pt" class="btn btn-primary"><?= htmlspecialchars($key); ?></a> - <?php - endforeach; + if (!empty($MAILCOW_APPS)) { + foreach ($MAILCOW_APPS as $app) { + if (getenv('SKIP_SOGO') == "y" && preg_match('/^\/SOGo/i', $app['link'])) { continue; } + ?> + <a href="<?= htmlspecialchars($app['link']); ?>" role="button" style="margin-bottom:3pt" title="<?= htmlspecialchars($app['description']); ?>" class="btn btn-primary"><?= htmlspecialchars($app['name']); ?></a> + <?php + } + $app_links = customize('get', 'app_links'); + if (!empty($app_links)) { + foreach ($app_links as $row) { + foreach ($row as $key => $val) { + ?> + <a href="<?= htmlspecialchars($val); ?>" role="button" style="margin-bottom:3pt" class="btn btn-primary"><?= htmlspecialchars($key); ?></a> + <?php + } + } + } } } - endif; ?> </div> </div> </div> - <?php if(!isset($_SESSION['oauth2_request'])): ?> + <?php if(!isset($_SESSION['oauth2_request'])) { ?> <div class="col-md-offset-3 col-md-6"> <div class="panel panel-default"> <div class="panel-heading"> @@ -113,19 +112,19 @@ $_SESSION['index_query_string'] = $_SERVER['QUERY_STRING']; </div> <div id="collapse1" class="panel-collapse collapse"> <div class="panel-body"> - <?php if ($UI_TEXTS['help_text']): ?> + <?php if ($UI_TEXTS['help_text']) { ?> <p><?=$UI_TEXTS['help_text'];?></p> - <?php else: ?> + <?php } else { ?> <p><span style="border-bottom: 1px dotted #999;"><?=$UI_TEXTS['main_name'];?></span></p> <p><?= $lang['start']['mailcow_panel_detail']; ?></p> <p><span style="border-bottom: 1px dotted #999;"><?=$UI_TEXTS['apps_name'];?></span></p> <p><?= $lang['start']['mailcow_apps_detail']; ?></p> - <?php endif; ?> + <?php } ?> </div> </div> </div> </div> - <?php endif ?> + <?php } ?> </div> </div><!-- /.container --> <?php diff --git a/data/web/lang/lang.ca.json b/data/web/lang/lang.ca.json index 5b66daae..5020ff8d 100644 --- a/data/web/lang/lang.ca.json +++ b/data/web/lang/lang.ca.json @@ -8,6 +8,7 @@ "add": { "activate_filter_warn": "All other filters will be deactivated, when active is checked.", "active": "Actiu", + "add": "Afegir", "add_domain_only": "Afegir el domini", "add_domain_restart": "Afegir el domini i reiniciar SOGo", "alias_address": "Dirección/es àlies:", @@ -292,6 +293,7 @@ "action": "Acció", "activate": "Activar", "active": "Actiu", + "add": "Afegir", "add_alias": "Afegir àlies", "add_bcc_entry": "Afegir BCC map", "add_domain": "Afegir domini", diff --git a/data/web/lang/lang.cs.json b/data/web/lang/lang.cs.json index 6b1aea73..884208c4 100644 --- a/data/web/lang/lang.cs.json +++ b/data/web/lang/lang.cs.json @@ -25,6 +25,7 @@ "add": { "activate_filter_warn": "Pokud je zaškrtlá volba \"Aktivní\", budou všechny ostatní filtry deaktivovány.", "active": "Aktivní", + "add": "Přidat", "add_domain_only": "Přidat doménu", "add_domain_restart": "Přidat doménu a restartovat SOGo", "alias_address": "Adresa/y aliasů", @@ -526,6 +527,7 @@ "action": "Akce", "activate": "Zapnout", "active": "Aktivní", + "add": "Přidat", "add_alias": "Přidat alias", "add_bcc_entry": "Přidat BCC mapu", "add_domain": "Přidat doménu", diff --git a/data/web/lang/lang.de.json b/data/web/lang/lang.de.json index 129bfeb1..9780e111 100644 --- a/data/web/lang/lang.de.json +++ b/data/web/lang/lang.de.json @@ -27,6 +27,7 @@ "add": { "activate_filter_warn": "Alle anderen Filter diesen Typs werden deaktiviert, falls dieses Script aktiv markiert wird.", "active": "Aktiv", + "add": "Hinzufügen", "add_domain_only": "Nur Domain hinzufügen", "add_domain_restart": "Domain hinzufügen und SOGo neustarten", "alias_address": "Alias-Adresse(n)", @@ -573,6 +574,7 @@ "action": "Aktion", "activate": "Aktivieren", "active": "Aktiv", + "add": "Hinzufügen", "add_alias": "Alias hinzufügen", "add_bcc_entry": "BCC-Eintrag hinzufügen", "add_domain": "Domain hinzufügen", diff --git a/data/web/lang/lang.en.json b/data/web/lang/lang.en.json index dfd598e3..fb3ad31b 100644 --- a/data/web/lang/lang.en.json +++ b/data/web/lang/lang.en.json @@ -27,6 +27,7 @@ "add": { "activate_filter_warn": "All other filters will be deactivated, when active is checked.", "active": "Active", + "add": "Add", "add_domain_only": "Add domain only", "add_domain_restart": "Add domain and restart SOGo", "alias_address": "Alias address/es", @@ -572,6 +573,7 @@ "action": "Action", "activate": "Activate", "active": "Active", + "add": "Add", "add_alias": "Add alias", "add_bcc_entry": "Add BCC map", "add_domain": "Add domain", diff --git a/data/web/lang/lang.es.json b/data/web/lang/lang.es.json index ff60bfc5..83ea9119 100644 --- a/data/web/lang/lang.es.json +++ b/data/web/lang/lang.es.json @@ -23,6 +23,7 @@ "add": { "activate_filter_warn": "Todos los demás filtros se desactivarán cuando este filtro se active.", "active": "Activo", + "add": "Agregar", "add_domain_only": "Agregar dominio solamente", "add_domain_restart": "Agregar dominio y reiniciar SOGo", "alias_address": "Dirección(es) alias:", @@ -465,6 +466,7 @@ "action": "Acción", "activate": "Activar", "active": "Activo", + "add": "Agregar", "add_alias": "Agregar alias", "add_bcc_entry": "Añadir regla de BCC", "add_domain": "Agregar dominio", diff --git a/data/web/lang/lang.fi.json b/data/web/lang/lang.fi.json index 9431bd50..25c69b22 100644 --- a/data/web/lang/lang.fi.json +++ b/data/web/lang/lang.fi.json @@ -25,6 +25,7 @@ "add": { "activate_filter_warn": "Kaikki muut suodattimet deaktivoidaan, kun aktiivinen on valittu.", "active": "Aktiivinen", + "add": "Lisää", "add_domain_only": "Lisää vain verkkotunnus alue", "add_domain_restart": "Lisää verkkotunnus alue ja käynnistä SOGo uudelleen", "alias_address": "Alias osoite", @@ -526,6 +527,7 @@ "action": "Toiminnot", "activate": "Aktivoi", "active": "Aktiivinen", + "add": "Lisää", "add_alias": "Lisää alias", "add_bcc_entry": "Lisää piilo kopio kartta", "add_domain": "Lisää verkkotunnus alue", diff --git a/data/web/lang/lang.fr.json b/data/web/lang/lang.fr.json index f2d587ca..f4d227b0 100644 --- a/data/web/lang/lang.fr.json +++ b/data/web/lang/lang.fr.json @@ -4,6 +4,7 @@ }, "add": { "active": "Actif", + "add": "Ajouter", "alias_address": "Adresse(s) alias", "alias_address_info": "<small>Adresse de courriel complète ou @exemple.com pour recevoir tous les messages d'un domaine (séparés par de virgules). <b>Domaines mailcow seulement</b></small>", "alias_domain": "Alias de domaine", @@ -240,6 +241,7 @@ "action": "Action", "activate": "Activer", "active": "Actif", + "add": "Ajouter", "add_alias": "Ajouter un alias", "add_domain": "Ajouter un domaine", "add_domain_alias": "Ajouter un alias de domaine", diff --git a/data/web/lang/lang.it.json b/data/web/lang/lang.it.json index 503ca951..7180a8ef 100644 --- a/data/web/lang/lang.it.json +++ b/data/web/lang/lang.it.json @@ -4,6 +4,7 @@ }, "add": { "active": "Attiva", + "add": "Aggiungi", "alias_address": "Indirizzo alias/es:", "alias_address_info": "<small>Indirizzo e-mail completo/es @example.com, per catturare tutti i messaggi di un dominio (separati da virgola). <b>solo domini mailcow</b>.</small>", "alias_domain": "Dominio alias", @@ -203,6 +204,7 @@ "action": "Azione", "activate": "Attiva", "active": "Attiva", + "add": "Aggiungi", "add_alias": "Aggiungi alias", "add_domain": "Aggiungi Dominio", "add_domain_alias": "Aggiungi alias Dominio", diff --git a/data/web/lang/lang.lv.json b/data/web/lang/lang.lv.json index 0ba17ed0..1e2d025c 100644 --- a/data/web/lang/lang.lv.json +++ b/data/web/lang/lang.lv.json @@ -8,6 +8,7 @@ "add": { "activate_filter_warn": "Visi pārējie filtri tiks deaktivizēti, kad aktīvs ir atzīmēts.", "active": "Aktīvs", + "add": "Pievienot", "add_domain_only": "Tikai pievienot domēnu", "add_domain_restart": "Pievienot domēnu un restartēt SOGo", "alias_address": "Alias addrese/s", @@ -295,6 +296,7 @@ "action": "Rīcība", "activate": "Activate", "active": "Aktīvs", + "add": "Pievienot", "add_alias": "Pievienot alias", "add_bcc_entry": "Pievienot BCC karti", "add_domain": "Pievienot domēnu", diff --git a/data/web/lang/lang.nl.json b/data/web/lang/lang.nl.json index 84c1d53e..0f0e18cd 100644 --- a/data/web/lang/lang.nl.json +++ b/data/web/lang/lang.nl.json @@ -27,6 +27,7 @@ "add": { "activate_filter_warn": "Alle andere filters worden gedeactiveerd zolang deze geactiveerd is.", "active": "Actief", + "add": "Toevoegen", "add_domain_only": "Voeg alleen domein toe", "add_domain_restart": "Voeg domein toe en herstart SOGo", "alias_address": "Aliasadres(sen)", @@ -570,6 +571,7 @@ "action": "Handeling", "activate": "Activeer", "active": "Actief", + "add": "Toevoegen", "add_alias": "Voeg alias toe", "add_bcc_entry": "Voeg BCC-map toe", "add_domain": "Voeg domein toe", diff --git a/data/web/lang/lang.pl.json b/data/web/lang/lang.pl.json index 4cd595a0..995f088c 100644 --- a/data/web/lang/lang.pl.json +++ b/data/web/lang/lang.pl.json @@ -5,6 +5,7 @@ }, "add": { "active": "Aktywny", + "add": "Dodaj", "alias_address": "Alias/y:", "alias_address_info": "<small>Pełny/e adres/y email lub @example.com, aby przejąć wszystkie wiadomości dla domeny (oddzielone przecinkami). <b>tylko domeny mailcow</b>.</small>", "alias_domain": "Alias domeny", @@ -219,6 +220,7 @@ "action": "Działanie", "activate": "Aktywuj", "active": "Aktywny", + "add": "Dodaj", "add_alias": "Dodaj alias", "add_domain": "Dodaj domenę", "add_domain_alias": "Dodaj alias domeny", diff --git a/data/web/lang/lang.pt.json b/data/web/lang/lang.pt.json index bad1a9ba..e791ae37 100644 --- a/data/web/lang/lang.pt.json +++ b/data/web/lang/lang.pt.json @@ -1,6 +1,7 @@ { "add": { "active": "Ativo", + "add": "Salvar", "alias_address": "Apelidos:", "alias_address_info": "<small>Endereço de email completo ou @example.com, para uma conta coringa -catch all. (separado por vírgula). <b>apenas domínios cadastrados</b>.</small>", "alias_domain": "Encaminhamento de Domínio", @@ -164,6 +165,7 @@ "mailbox": { "action": "Ação", "active": "Ativo", + "add": "Salvar", "add_alias": "Adicionar Apelido", "add_domain": "Adicionar Domínio", "add_domain_alias": "Adicionar Apelido de Domínio", diff --git a/data/web/lang/lang.ru.json b/data/web/lang/lang.ru.json index 4c85e170..be181dad 100644 --- a/data/web/lang/lang.ru.json +++ b/data/web/lang/lang.ru.json @@ -27,6 +27,7 @@ "add": { "activate_filter_warn": "Активация этого фильтра отключит все остальные фильтры этого типа.", "active": "Активный", + "add": "Добавить", "add_domain_only": "Только добавить домен", "add_domain_restart": "Добавить домен и перезапустить SOGo", "alias_address": "Псевдоним/ы", @@ -571,6 +572,7 @@ "action": "Действия", "activate": "Включить", "active": "Активный", + "add": "Добавить", "add_alias": "Добавить псевдоним", "add_bcc_entry": "Добавить правило BBC", "add_domain": "Добавить домен", diff --git a/data/web/lang/lang.sk.json b/data/web/lang/lang.sk.json index 24759993..2523a065 100644 --- a/data/web/lang/lang.sk.json +++ b/data/web/lang/lang.sk.json @@ -27,6 +27,7 @@ "add": { "activate_filter_warn": "Všetky ostatné filtre budú deaktivované, ak bude zaškrtnuté pole \"Aktívny\".", "active": "Aktívne", + "add": "Pridať", "add_domain_only": "Pridať iba doménu", "add_domain_restart": "Pridať doménu a reštartovať SOGo", "alias_address": "Alias adresa/y", @@ -567,6 +568,7 @@ "action": "Akcia", "activate": "Aktivovať", "active": "Aktívny", + "add": "Pridať", "add_alias": "Pridať alias", "add_bcc_entry": "Pridať BCC mapu", "add_domain": "Pridať doménu", diff --git a/data/web/lang/lang.sv.json b/data/web/lang/lang.sv.json index 1b8bca08..55e1a831 100644 --- a/data/web/lang/lang.sv.json +++ b/data/web/lang/lang.sv.json @@ -27,6 +27,7 @@ "add": { "activate_filter_warn": "Alla andra filter av den här typen kommer inaktiveras om det här skriptet markeras som aktivt.", "active": "Aktiv", + "add": "Lägg till", "add_domain_only": "Lägg bara till domänen", "add_domain_restart": "Lägg till domänen, och starta om SOGo", "alias_address": "Alias-adress/adresser", @@ -573,6 +574,7 @@ "action": "Åtgärd", "activate": "Aktivera", "active": "Aktiv", + "add": "Lägg till", "add_alias": "Lägg till alias", "add_bcc_entry": "Lägg till ny koppling", "add_domain": "Lägg till domän", diff --git a/data/web/mailbox.php b/data/web/mailbox.php index 2831dfac..f8313b58 100644 --- a/data/web/mailbox.php +++ b/data/web/mailbox.php @@ -93,7 +93,7 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI']; </div> </div> <?php - if (preg_match("/^([yY][eE][sS]|[yY])+$/", $_ENV["ALLOW_ADMIN_EMAIL_LOGIN"])): + if (preg_match("/^([yY][eE][sS]|[yY])+$/", $_ENV["ALLOW_ADMIN_EMAIL_LOGIN"]) && getenv('SKIP_SOGO') != "y"): ?> <div class="panel-body help-block"> <?=$lang['mailbox']['sogo_allow_admin_hint'];?> @@ -256,9 +256,16 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI']; <li><a data-action="edit_selected" data-id="alias" data-api-url='edit/alias' data-api-attr='{"active":"0"}' href="#"><?=$lang['mailbox']['deactivate'];?></a></li> <li role="separator" class="divider"></li> <li><a data-action="delete_selected" data-id="alias" data-api-url='delete/alias' href="#"><?=$lang['mailbox']['remove'];?></a></li> + <?php + if (getenv('SKIP_SOGO') != "y") { + ?> <li role="separator" class="divider"></li> <li><a data-action="edit_selected" data-id="alias" data-api-url='edit/alias' data-api-attr='{"sogo_visible":"1"}' href="#"><?=$lang['mailbox']['sogo_visible_y'];?></a></li> <li><a data-action="edit_selected" data-id="alias" data-api-url='edit/alias' data-api-attr='{"sogo_visible":"0"}' href="#"><?=$lang['mailbox']['sogo_visible_n'];?></a></li> + <?php + } + ?> + </ul> <a class="btn btn-sm btn-success" href="#" data-toggle="modal" data-target="#addAliasModal"><span class="glyphicon glyphicon-plus"></span> <?=$lang['mailbox']['add_alias'];?></a> </div> diff --git a/data/web/modals/mailbox.php b/data/web/modals/mailbox.php index 2e00a273..4f5ed4df 100644 --- a/data/web/modals/mailbox.php +++ b/data/web/modals/mailbox.php @@ -129,6 +129,9 @@ if (!isset($_SESSION['mailcow_cc_role'])) { <input type="number" class="form-control" name="quota" value="10240" required> </div> </div> + <?php + if (getenv('SKIP_SOGO') != "y") { + ?> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <div class="checkbox"> @@ -137,6 +140,9 @@ if (!isset($_SESSION['mailcow_cc_role'])) { </div> </div> </div> + <?php + } + ?> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <div class="checkbox"> @@ -177,11 +183,29 @@ if (!isset($_SESSION['mailcow_cc_role'])) { <hr> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> + <?php + if (getenv('SKIP_SOGO') != "y") { + ?> <button class="btn btn-default" data-action="add_item" data-id="add_domain" data-api-url='add/domain' data-api-attr='{}' href="#"><?=$lang['add']['add_domain_only'];?></button> <button class="btn btn-default" data-action="add_item" data-id="add_domain" data-api-url='add/domain' data-api-attr='{"restart_sogo":"1"}' href="#"><?=$lang['add']['add_domain_restart'];?></button> + <?php + } + else { + ?> + <button class="btn btn-default" data-action="add_item" data-id="add_domain" data-api-url='add/domain' data-api-attr='{}' href="#"><?=$lang['add']['add'];?></button> + <?php + } + ?> </div> </div> + <?php + // TODO: Separate SOGo-related text + if (getenv('SKIP_SOGO') != "y") { + ?> <p><span class="glyphicon glyphicon-exclamation-sign text-danger"></span> <?=$lang['add']['post_domain_add'];?></p> + <?php + } + ?> </form> </div> </div> @@ -289,11 +313,17 @@ if (!isset($_SESSION['mailcow_cc_role'])) { <div class="checkbox"> <label><input class="goto_checkbox" type="checkbox" value="1" name="goto_ham"> <?=$lang['add']['goto_ham'];?></label> </div> + <?php + if (getenv('SKIP_SOGO') != "y") { + ?> <hr> <div class="checkbox"> <label><input type="checkbox" value="1" name="sogo_visible" checked> <?=$lang['edit']['sogo_visible'];?></label> </div> <p class="help-block"><?=$lang['edit']['sogo_visible_info'];?></p> + <?php + } + ?> </div> </div> <div class="form-group"> diff --git a/docker-compose.yml b/docker-compose.yml index 5da3f419..144a4014 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -148,6 +148,7 @@ services: - COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME:-mailcow-dockerized} - SKIP_SOLR=${SKIP_SOLR:-y} - SKIP_CLAMD=${SKIP_CLAMD:-n} + - SKIP_SOGO=${SKIP_SOGO:-n} - ALLOW_ADMIN_EMAIL_LOGIN=${ALLOW_ADMIN_EMAIL_LOGIN:-n} - MASTER=${MASTER:-y} restart: always @@ -157,7 +158,7 @@ services: - phpfpm sogo-mailcow: - image: mailcow/sogo:1.73 + image: mailcow/sogo:1.74 environment: - DBNAME=${DBNAME} - DBUSER=${DBUSER} @@ -169,6 +170,7 @@ services: - ALLOW_ADMIN_EMAIL_LOGIN=${ALLOW_ADMIN_EMAIL_LOGIN:-n} - IPV4_NETWORK=${IPV4_NETWORK:-172.22.1} - SOGO_EXPIRE_SESSION=${SOGO_EXPIRE_SESSION:-480} + - SKIP_SOGO=${SKIP_SOGO:-n} - MASTER=${MASTER:-y} - REDIS_SLAVEOF_IP=${REDIS_SLAVEOF_IP:-} - REDIS_SLAVEOF_PORT=${REDIS_SLAVEOF_PORT:-} @@ -189,7 +191,7 @@ services: - sogo dovecot-mailcow: - image: mailcow/dovecot:1.120 + image: mailcow/dovecot:1.121 depends_on: - mysql-mailcow dns: @@ -394,7 +396,7 @@ services: - /lib/modules:/lib/modules:ro watchdog-mailcow: - image: mailcow/watchdog:1.74 + image: mailcow/watchdog:1.75 # Debug #command: /watchdog.sh dns: @@ -423,6 +425,7 @@ services: - CHECK_UNBOUND=${CHECK_UNBOUND:-1} - SKIP_CLAMD=${SKIP_CLAMD:-n} - SKIP_LETS_ENCRYPT=${SKIP_LETS_ENCRYPT:-n} + - SKIP_SOGO=${SKIP_SOGO:-n} - HTTPS_PORT=${HTTPS_PORT:-443} - REDIS_SLAVEOF_IP=${REDIS_SLAVEOF_IP:-} - REDIS_SLAVEOF_PORT=${REDIS_SLAVEOF_PORT:-} diff --git a/generate_config.sh b/generate_config.sh index c225a255..2b8e3405 100755 --- a/generate_config.sh +++ b/generate_config.sh @@ -218,6 +218,10 @@ SKIP_HTTP_VERIFICATION=n SKIP_CLAMD=${SKIP_CLAMD} +# Skip SOGo: Will disable SOGo integration and therefore webmail, DAV protocols and ActiveSync support (experimental) - y/n + +SKIP_SOGO=n + # Skip Solr on low-memory systems or if you do not want to store a readable index of your mails in solr-vol-1. SKIP_SOLR=${SKIP_SOLR} diff --git a/update.sh b/update.sh index d1fb19f2..fab4b1c9 100755 --- a/update.sh +++ b/update.sh @@ -169,6 +169,7 @@ if cp --help 2>&1 | head -n 1 | grep -q -i "busybox"; then echo "BusybBox cp det CONFIG_ARRAY=( "SKIP_LETS_ENCRYPT" + "SKIP_SOGO" "USE_WATCHDOG" "WATCHDOG_NOTIFY_EMAIL" "WATCHDOG_NOTIFY_BAN"