diff --git a/data/web/admin.php b/data/web/admin.php index f402fd61..0e0003a8 100644 --- a/data/web/admin.php +++ b/data/web/admin.php @@ -231,7 +231,7 @@ $tfa_data = get_tfa(); - +
diff --git a/data/web/css/admin.css b/data/web/css/admin.css index d2bb2489..7f8897a0 100644 --- a/data/web/css/admin.css +++ b/data/web/css/admin.css @@ -31,3 +31,14 @@ body.modal-open { .inputMissingAttr { border-color: #FF4136; } +.rotate { + -moz-transition: all 0.3s linear; + -webkit-transition: all 0.3s linear; + transition: all 0.3s linear; +} +.rotate.animation { + -ms-transform:rotateX(180deg); + -moz-transform:rotateX(180deg); + -webkit-transform:rotateX(180deg); + transform:rotateX(180deg); +} \ No newline at end of file diff --git a/data/web/css/mailcow.css b/data/web/css/mailcow.css index 09ece249..eeade3c7 100644 --- a/data/web/css/mailcow.css +++ b/data/web/css/mailcow.css @@ -91,4 +91,11 @@ body.modal-open { max-width: 550px; z-index: 2000; } -.input-group-sm .btn { margin-top: 0px !important } \ No newline at end of file +.input-group-sm .btn { margin-top: 0px !important } +legend { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none + -o-user-select: none; + user-select: none; +} \ No newline at end of file diff --git a/data/web/inc/functions.inc.php b/data/web/inc/functions.inc.php index 8e7b7cfd..b3420530 100644 --- a/data/web/inc/functions.inc.php +++ b/data/web/inc/functions.inc.php @@ -168,6 +168,7 @@ function doveadm_authenticate($hash, $algorithm, $password) { } function check_login($user, $pass) { global $pdo; + global $redis; if (!filter_var($user, FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $user))) { return false; } @@ -229,10 +230,12 @@ function check_login($user, $pass) { } if (!isset($_SESSION['ldelay'])) { $_SESSION['ldelay'] = "0"; + $redis->publish("F2B_CHANNEL", "mailcow UI: Invalid password for " . $user . " by " . $_SERVER['REMOTE_ADDR']); error_log("mailcow UI: Invalid password for " . $user . " by " . $_SERVER['REMOTE_ADDR']); } elseif (!isset($_SESSION['mailcow_cc_username'])) { $_SESSION['ldelay'] = $_SESSION['ldelay']+0.5; + $redis->publish("F2B_CHANNEL", "mailcow UI: Invalid password for " . $user . " by " . $_SERVER['REMOTE_ADDR']); error_log("mailcow UI: Invalid password for " . $user . " by " . $_SERVER['REMOTE_ADDR']); } sleep($_SESSION['ldelay']); diff --git a/data/web/js/admin.js b/data/web/js/admin.js index 55ffcc0a..371b287f 100644 --- a/data/web/js/admin.js +++ b/data/web/js/admin.js @@ -47,6 +47,10 @@ jQuery(function($){ e.preventDefault(); draw_rspamd_history(); }); + $("#import_dkim_legend").on('click', function(e) { + e.preventDefault(); + $('#import_dkim_arrow').toggleClass("animation"); + }); function draw_postfix_logs() { ft_postfix_logs = FooTable.init('#postfix_log', { "columns": [ diff --git a/docker-compose.yml b/docker-compose.yml index 12003749..cfd5a4ec 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -66,9 +66,11 @@ services: - redis clamd-mailcow: - image: mailcow/clamd:1.0 + image: mailcow/clamd:1.1 build: ./data/Dockerfiles/clamd restart: always + environment: + - SKIP_CLAMD=${SKIP_CLAMD:-n} dns: - 172.22.1.254 dns_search: mailcow-network @@ -143,7 +145,7 @@ services: - phpfpm sogo-mailcow: - image: mailcow/sogo:1.0 + image: mailcow/sogo:1.1 build: ./data/Dockerfiles/sogo depends_on: unbound-mailcow: @@ -171,7 +173,7 @@ services: - sogo dovecot-mailcow: - image: mailcow/dovecot:1.1 + image: mailcow/dovecot:1.2 build: ./data/Dockerfiles/dovecot depends_on: unbound-mailcow: @@ -206,7 +208,7 @@ services: - dovecot postfix-mailcow: - image: mailcow/postfix:1.0 + image: mailcow/postfix:1.1 build: ./data/Dockerfiles/postfix depends_on: unbound-mailcow: @@ -319,7 +321,7 @@ services: - acme fail2ban-mailcow: - image: mailcow/fail2ban:1.4 + image: mailcow/fail2ban:1.5 build: ./data/Dockerfiles/fail2ban depends_on: - dovecot-mailcow