From e784c98a5a88cfcaf13e45071cc6038b3dee59fa Mon Sep 17 00:00:00 2001 From: FreddleSpl0it Date: Tue, 16 May 2023 12:32:51 +0200 Subject: [PATCH] [Web] add "add mailbox_from_template" function --- data/web/inc/functions.mailbox.inc.php | 42 ++++++++++++++++++++++-- data/web/inc/functions.ratelimit.inc.php | 6 ++-- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/data/web/inc/functions.mailbox.inc.php b/data/web/inc/functions.mailbox.inc.php index afa952e68f..7ba0a2f495 100644 --- a/data/web/inc/functions.mailbox.inc.php +++ b/data/web/inc/functions.mailbox.inc.php @@ -1044,7 +1044,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { $password2 = ''; $password_hashed = ''; } - if (!$_SESSION['iam_create_login'] && ((!isset($_SESSION['acl']['unlimited_quota']) || $_SESSION['acl']['unlimited_quota'] != "1") && $quota_m === 0)) { + if (!$_extra['iam_create_login'] && ((!isset($_SESSION['acl']['unlimited_quota']) || $_SESSION['acl']['unlimited_quota'] != "1") && $quota_m === 0)) { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), @@ -1098,7 +1098,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { ); return false; } - if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain) && !$_SESSION['iam_create_login']) { + if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain) && !$_extra['iam_create_login']) { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), @@ -1318,7 +1318,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { 'object' => $username, 'rl_frame' => $_data['rl_frame'], 'rl_value' => $_data['rl_value'] - )); + ), $_extra); } update_sogo_static_view($username); @@ -1328,6 +1328,42 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { 'msg' => array('mailbox_added', htmlspecialchars($username)) ); break; + case 'mailbox_from_template': + $stmt = $pdo->prepare("SELECT * FROM `templates` + WHERE `template` = :template AND type = 'mailbox'"); + $stmt->execute(array( + ":template" => $_data['template'] + )); + $mbox_template_data = $stmt->fetch(PDO::FETCH_ASSOC); + if (empty($mbox_template_data)){ + $_SESSION['return'][] = array( + 'type' => 'danger', + 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), + 'msg' => 'template_missing' + ); + return false; + } + + $mbox_template_data = json_decode($mbox_template_data["attributes"], true); + $mbox_template_data['domain'] = $_data['domain']; + $mbox_template_data['local_part'] = $_data['local_part']; + $mbox_template_data['authsource'] = $_data['authsource']; + $mbox_template_data['quota'] = intval($mbox_template_data['quota'] / 1048576); + + $mailbox_attributes = array('acl' => array()); + foreach ($mbox_template_data as $key => $value){ + switch (true) { + case (strpos($key, 'acl_') === 0 && $value != 0): + array_push($mailbox_attributes['acl'], str_replace('acl_' , '', $key)); + break; + default: + $mailbox_attributes[$key] = $value; + break; + } + } + + return mailbox('add', 'mailbox', $mailbox_attributes, array('iam_create_login' => true)); + break; case 'resource': $domain = idn_to_ascii(strtolower(trim($_data['domain'])), 0, INTL_IDNA_VARIANT_UTS46); $description = $_data['description']; diff --git a/data/web/inc/functions.ratelimit.inc.php b/data/web/inc/functions.ratelimit.inc.php index 93840b5ebe..bc05cd362a 100644 --- a/data/web/inc/functions.ratelimit.inc.php +++ b/data/web/inc/functions.ratelimit.inc.php @@ -1,10 +1,10 @@ 'danger', 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), @@ -93,7 +93,7 @@ function ratelimit($_action, $_scope, $_data = null) { continue; } if ((!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $object) - || ($_SESSION['mailcow_cc_role'] != 'admin' && $_SESSION['mailcow_cc_role'] != 'domainadmin')) && !$_SESSION['iam_create_login']) { + || ($_SESSION['mailcow_cc_role'] != 'admin' && $_SESSION['mailcow_cc_role'] != 'domainadmin')) && !$_extra['iam_create_login']) { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),