From c1dcb529f3abeb983d52a66018b2fec496aca0b7 Mon Sep 17 00:00:00 2001 From: Kristian Feldsam Date: Wed, 1 Sep 2021 16:51:10 +0200 Subject: [PATCH] [Web] Add DKIM key when adding a domain or alias domain (#4254) Signed-off-by: Kristian Feldsam --- data/web/inc/functions.dkim.inc.php | 16 ++++++------- data/web/inc/functions.mailbox.inc.php | 6 +++++ data/web/modals/mailbox.php | 33 ++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 8 deletions(-) diff --git a/data/web/inc/functions.dkim.inc.php b/data/web/inc/functions.dkim.inc.php index 33ee49fc..85d3c6c1 100644 --- a/data/web/inc/functions.dkim.inc.php +++ b/data/web/inc/functions.dkim.inc.php @@ -5,14 +5,6 @@ function dkim($_action, $_data = null, $privkey = false) { global $lang; switch ($_action) { case 'add': - if ($_SESSION['mailcow_cc_role'] != "admin") { - $_SESSION['return'][] = array( - 'type' => 'danger', - 'log' => array(__FUNCTION__, $_action, $_data, ), - 'msg' => 'access_denied' - ); - return false; - } $key_length = intval($_data['key_size']); $dkim_selector = (isset($_data['dkim_selector'])) ? $_data['dkim_selector'] : 'dkim'; $domains = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['domains'])); @@ -42,6 +34,14 @@ function dkim($_action, $_data = null, $privkey = false) { ); continue; } + if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) { + $_SESSION['return'][] = array( + 'type' => 'danger', + 'log' => array(__FUNCTION__, $_action, $_data), + 'msg' => array('access_denied', $domain) + ); + continue; + } $config = array( "digest_alg" => "sha256", "private_key_bits" => $key_length, diff --git a/data/web/inc/functions.mailbox.inc.php b/data/web/inc/functions.mailbox.inc.php index 5010df9e..2daed39f 100644 --- a/data/web/inc/functions.mailbox.inc.php +++ b/data/web/inc/functions.mailbox.inc.php @@ -579,6 +579,9 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { if (!empty(intval($_data['rl_value']))) { ratelimit('edit', 'domain', array('rl_value' => $_data['rl_value'], 'rl_frame' => $_data['rl_frame'], 'object' => $domain)); } + if (!empty($_data['key_size']) && !empty($_data['dkim_selector'])) { + dkim('add', array('key_size' => $_data['key_size'], 'dkim_selector' => $_data['dkim_selector'], 'domains' => $domain)); + } if (!empty($restart_sogo)) { $restart_response = json_decode(docker('post', 'sogo-mailcow', 'restart'), true); if ($restart_response['type'] == "success") { @@ -906,6 +909,9 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { if (!empty(intval($_data['rl_value']))) { ratelimit('edit', 'domain', array('rl_value' => $_data['rl_value'], 'rl_frame' => $_data['rl_frame'], 'object' => $alias_domain)); } + if (!empty($_data['key_size']) && !empty($_data['dkim_selector'])) { + dkim('add', array('key_size' => $_data['key_size'], 'dkim_selector' => $_data['dkim_selector'], 'domains' => $alias_domain)); + } $_SESSION['return'][] = array( 'type' => 'success', 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), diff --git a/data/web/modals/mailbox.php b/data/web/modals/mailbox.php index 8751050c..1847ea64 100644 --- a/data/web/modals/mailbox.php +++ b/data/web/modals/mailbox.php @@ -165,6 +165,22 @@ if (!isset($_SESSION['mailcow_cc_role'])) {
+
+ +
+ +
+
+
+ +
+ +
+
+
@@ -381,6 +397,23 @@ if (!isset($_SESSION['mailcow_cc_role'])) {
+
+
+ +
+ +
+
+
+ +
+ +
+
+