|
@@ -203,8 +203,9 @@ function check_login($user, $pass) {
|
|
|
}
|
|
|
}
|
|
|
$stmt = $pdo->prepare("SELECT `password` FROM `mailbox`
|
|
|
- WHERE `active`='1'
|
|
|
- AND `username` = :user");
|
|
|
+ WHERE `kind` NOT REGEXP 'location|thing|group'
|
|
|
+ AND `active`='1'
|
|
|
+ AND `username` = :user");
|
|
|
$stmt->execute(array(':user' => $user));
|
|
|
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
foreach ($rows as $row) {
|
|
@@ -555,7 +556,8 @@ function edit_user_account($postarray) {
|
|
|
}
|
|
|
|
|
|
$stmt = $pdo->prepare("SELECT `password` FROM `mailbox`
|
|
|
- WHERE `username` = :user");
|
|
|
+ WHERE `kind` NOT REGEXP 'location|thing|group'
|
|
|
+ AND `username` = :user");
|
|
|
$stmt->execute(array(':user' => $username));
|
|
|
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
if (!verify_ssha256($row['password'], $password_old)) {
|
|
@@ -1842,7 +1844,7 @@ function set_tfa($postarray) {
|
|
|
case "u2f":
|
|
|
try {
|
|
|
$reg = $u2f->doRegister(json_decode($_SESSION['regReq']), json_decode($postarray['token']));
|
|
|
- $stmt = $pdo->prepare("INSERT INTO `tfa` (`username`, `authmech`, `keyHandle`, `publicKey`, `certificate`, `counter`) values (?, 'u2f', ?, ?, ?, ?)");
|
|
|
+ $stmt = $pdo->prepare("INSERT INTO `tfa` (`username`, `authmech`, `keyHandle`, `publicKey`, `certificate`, `counter`) VALUES (?, 'u2f', ?, ?, ?, ?)");
|
|
|
$stmt->execute(array($username, $reg->keyHandle, $reg->publicKey, $reg->certificate, $reg->counter));
|
|
|
$_SESSION['return'] = array(
|
|
|
'type' => 'success',
|
|
@@ -2573,6 +2575,19 @@ function mailbox_add_alias($postarray) {
|
|
|
$goto_local_part = strstr($goto, '@', true);
|
|
|
$goto = $goto_local_part.'@'.$goto_domain;
|
|
|
|
|
|
+ $stmt = $pdo->prepare("SELECT `username` FROM `mailbox`
|
|
|
+ WHERE `kind` REGEXP 'location|thing|group'
|
|
|
+ AND `username`= :goto");
|
|
|
+ $stmt->execute(array(':goto' => $goto));
|
|
|
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
|
|
|
+ if ($num_results != 0) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['goto_invalid'])
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
if (!filter_var($goto, FILTER_VALIDATE_EMAIL) === true) {
|
|
|
$_SESSION['return'] = array(
|
|
|
'type' => 'danger',
|
|
@@ -2806,7 +2821,8 @@ function mailbox_add_mailbox($postarray) {
|
|
|
COUNT(*) as count,
|
|
|
COALESCE(ROUND(SUM(`quota`)/1048576), 0) as `quota`
|
|
|
FROM `mailbox`
|
|
|
- WHERE `domain` = :domain");
|
|
|
+ WHERE `kind` NOT REGEXP 'location|thing|group'
|
|
|
+ AND `domain` = :domain");
|
|
|
$stmt->execute(array(':domain' => $domain));
|
|
|
$MailboxData = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
|
@@ -2950,7 +2966,147 @@ function mailbox_add_mailbox($postarray) {
|
|
|
);
|
|
|
}
|
|
|
catch (PDOException $e) {
|
|
|
- mailbox_delete_mailbox(array('address' => $username));
|
|
|
+ mailbox_delete_mailbox(array('username' => $username));
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => 'MySQL: '.$e
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+}
|
|
|
+function mailbox_add_resource($postarray) {
|
|
|
+ // Array elements
|
|
|
+ // active int
|
|
|
+ // domain string
|
|
|
+ // description string
|
|
|
+ // multiple_bookings int
|
|
|
+ // kind string
|
|
|
+
|
|
|
+ global $pdo;
|
|
|
+ global $lang;
|
|
|
+ $domain = idn_to_ascii(strtolower(trim($postarray['domain'])));
|
|
|
+ $description = $postarray['description'];
|
|
|
+ $local_part = preg_replace('/[^\da-z]/i', '', preg_quote($description, '/'));
|
|
|
+ $name = $local_part . '@' . $domain;
|
|
|
+ $kind = $postarray['kind'];
|
|
|
+ isset($postarray['active']) ? $active = '1' : $active = '0';
|
|
|
+ isset($postarray['multiple_bookings']) ? $multiple_bookings = '1' : $multiple_bookings = '0';
|
|
|
+
|
|
|
+ if (!filter_var($name, FILTER_VALIDATE_EMAIL)) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['resource_invalid'])
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (empty($description)) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['description_invalid'])
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($kind != 'location' && $kind != 'group' && $kind != 'thing') {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['resource_invalid'])
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!is_valid_domain_name($domain)) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['domain_invalid'])
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['access_denied'])
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ $stmt = $pdo->prepare("SELECT `username` FROM `mailbox` WHERE `username` = :name");
|
|
|
+ $stmt->execute(array(':name' => $name));
|
|
|
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
|
|
|
+ if ($num_results != 0) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['object_exists'], htmlspecialchars($name))
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $stmt = $pdo->prepare("SELECT `address` FROM `alias` WHERE address= :name");
|
|
|
+ $stmt->execute(array(':name' => $name));
|
|
|
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
|
|
|
+ if ($num_results != 0) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['is_alias'], htmlspecialchars($name))
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $stmt = $pdo->prepare("SELECT `address` FROM `spamalias` WHERE `address`= :name");
|
|
|
+ $stmt->execute(array(':name' => $name));
|
|
|
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
|
|
|
+ if ($num_results != 0) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['is_spam_alias'], htmlspecialchars($name))
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $stmt = $pdo->prepare("SELECT `domain` FROM `domain` WHERE `domain`= :domain");
|
|
|
+ $stmt->execute(array(':domain' => $domain));
|
|
|
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
|
|
|
+ if ($num_results == 0) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['domain_not_found'], $domain)
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch(PDOException $e) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => 'MySQL: '.$e
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ $stmt = $pdo->prepare("INSERT INTO `mailbox` (`username`, `password`, `name`, `maildir`, `quota`, `local_part`, `domain`, `created`, `modified`, `active`, `multiple_bookings`, `kind`)
|
|
|
+ VALUES (:name, 'RESOURCE', :description, 'RESOURCE', 0, :local_part, :domain, :created, :modified, :active, :multiple_bookings, :kind)");
|
|
|
+ $stmt->execute(array(
|
|
|
+ ':name' => $name,
|
|
|
+ ':description' => $description,
|
|
|
+ ':local_part' => $local_part,
|
|
|
+ ':domain' => $domain,
|
|
|
+ ':created' => date('Y-m-d H:i:s'),
|
|
|
+ ':modified' => date('Y-m-d H:i:s'),
|
|
|
+ ':active' => $active,
|
|
|
+ ':kind' => $kind,
|
|
|
+ ':multiple_bookings' => $multiple_bookings
|
|
|
+ ));
|
|
|
+
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'success',
|
|
|
+ 'msg' => sprintf($lang['success']['resource_added'], htmlspecialchars($name))
|
|
|
+ );
|
|
|
+ }
|
|
|
+ catch (PDOException $e) {
|
|
|
+ mailbox_delete_resource(array('name' => $name));
|
|
|
$_SESSION['return'] = array(
|
|
|
'type' => 'danger',
|
|
|
'msg' => 'MySQL: '.$e
|
|
@@ -3200,7 +3356,8 @@ function mailbox_edit_domain($postarray) {
|
|
|
MAX(COALESCE(ROUND(`quota`/1048576), 0)) AS `maxquota`,
|
|
|
COALESCE(ROUND(SUM(`quota`)/1048576), 0) AS `quota`
|
|
|
FROM `mailbox`
|
|
|
- WHERE domain= :domain");
|
|
|
+ WHERE `kind` NOT REGEXP 'location|thing|group'
|
|
|
+ AND domain = :domain");
|
|
|
$stmt->execute(array(':domain' => $domain));
|
|
|
$MailboxData = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
// GET ALIAS DATA
|
|
@@ -3562,6 +3719,78 @@ function mailbox_edit_mailbox($postarray) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
+function mailbox_edit_resource($postarray) {
|
|
|
+ global $lang;
|
|
|
+ global $pdo;
|
|
|
+
|
|
|
+ isset($postarray['active']) ? $active = '1' : $active = '0';
|
|
|
+ isset($postarray['multiple_bookings']) ? $multiple_bookings = '1' : $multiple_bookings = '0';
|
|
|
+ $name = $postarray['name'];
|
|
|
+ $kind = $postarray['kind'];
|
|
|
+ $description = $postarray['description'];
|
|
|
+
|
|
|
+ if (!filter_var($name, FILTER_VALIDATE_EMAIL)) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['resource_invalid'])
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (empty($description)) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['description_invalid'])
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($kind != 'location' && $kind != 'group' && $kind != 'thing') {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['resource_invalid'])
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $name)) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['access_denied'])
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ $stmt = $pdo->prepare("UPDATE `mailbox` SET
|
|
|
+ `modified` = :modified,
|
|
|
+ `active` = :active,
|
|
|
+ `name`= :description,
|
|
|
+ `kind`= :kind,
|
|
|
+ `multiple_bookings`= :multiple_bookings
|
|
|
+ WHERE `username` = :name");
|
|
|
+ $stmt->execute(array(
|
|
|
+ ':active' => $active,
|
|
|
+ ':modified' => date('Y-m-d H:i:s'),
|
|
|
+ ':description' => $description,
|
|
|
+ ':multiple_bookings' => $multiple_bookings,
|
|
|
+ ':kind' => $kind,
|
|
|
+ ':name' => $name
|
|
|
+ ));
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'success',
|
|
|
+ 'msg' => sprintf($lang['success']['resource_modified'], $name)
|
|
|
+ );
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ catch (PDOException $e) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => 'MySQL: '.$e
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+}
|
|
|
function mailbox_get_mailboxes($domain = null) {
|
|
|
global $lang;
|
|
|
global $pdo;
|
|
@@ -3575,7 +3804,7 @@ function mailbox_get_mailboxes($domain = null) {
|
|
|
}
|
|
|
elseif (isset($domain) && hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {
|
|
|
try {
|
|
|
- $stmt = $pdo->prepare("SELECT `username` FROM `mailbox` WHERE `domain` != 'ALL' AND `domain` = :domain");
|
|
|
+ $stmt = $pdo->prepare("SELECT `username` FROM `mailbox` WHERE `kind` NOT REGEXP 'location|thing|group' AND `domain` != 'ALL' AND `domain` = :domain");
|
|
|
$stmt->execute(array(
|
|
|
':domain' => $domain,
|
|
|
));
|
|
@@ -3594,7 +3823,7 @@ function mailbox_get_mailboxes($domain = null) {
|
|
|
}
|
|
|
else {
|
|
|
try {
|
|
|
- $stmt = $pdo->prepare("SELECT `username` FROM `mailbox` WHERE `domain` IN (SELECT `domain` FROM `domain_admins` WHERE `active` = '1' AND `username` = :username) OR 'admin' = :role");
|
|
|
+ $stmt = $pdo->prepare("SELECT `username` FROM `mailbox` WHERE `kind` NOT REGEXP 'location|thing|group' AND `domain` IN (SELECT `domain` FROM `domain_admins` WHERE `active` = '1' AND `username` = :username) OR 'admin' = :role");
|
|
|
$stmt->execute(array(
|
|
|
':username' => $_SESSION['mailcow_cc_username'],
|
|
|
':role' => $_SESSION['mailcow_cc_role'],
|
|
@@ -3614,6 +3843,58 @@ function mailbox_get_mailboxes($domain = null) {
|
|
|
}
|
|
|
return $mailboxes;
|
|
|
}
|
|
|
+function mailbox_get_resources($domain = null) {
|
|
|
+ global $lang;
|
|
|
+ global $pdo;
|
|
|
+ $resources = array();
|
|
|
+ if (isset($domain) && !hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['access_denied'])
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ elseif (isset($domain) && hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {
|
|
|
+ try {
|
|
|
+ $stmt = $pdo->prepare("SELECT `username` FROM `mailbox` WHERE `kind` REGEXP 'location|thing|group' AND `domain` != 'ALL' AND `domain` = :domain");
|
|
|
+ $stmt->execute(array(
|
|
|
+ ':domain' => $domain,
|
|
|
+ ));
|
|
|
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
+ while($row = array_shift($rows)) {
|
|
|
+ $resources[] = $row['username'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (PDOException $e) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => 'MySQL: '.$e
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ try {
|
|
|
+ $stmt = $pdo->prepare("SELECT `username` FROM `mailbox` WHERE `kind` REGEXP 'location|thing|group' AND `domain` IN (SELECT `domain` FROM `domain_admins` WHERE `active` = '1' AND `username` = :username) OR 'admin' = :role");
|
|
|
+ $stmt->execute(array(
|
|
|
+ ':username' => $_SESSION['mailcow_cc_username'],
|
|
|
+ ':role' => $_SESSION['mailcow_cc_role'],
|
|
|
+ ));
|
|
|
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
+ while($row = array_shift($rows)) {
|
|
|
+ $resources[] = $row['username'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (PDOException $e) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => 'MySQL: '.$e
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $resources;
|
|
|
+}
|
|
|
function mailbox_get_alias_domains($domain = null) {
|
|
|
// Get all domains assigned to mailcow_cc_username or domain, if set
|
|
|
// Domain admin needs to be active
|
|
@@ -3853,7 +4134,7 @@ function mailbox_get_domain_details($domain) {
|
|
|
':domain' => $domain,
|
|
|
));
|
|
|
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
- $stmt = $pdo->prepare("SELECT COUNT(*) AS `count`, COALESCE(SUM(`quota`), 0) as `in_use` FROM `mailbox` WHERE `domain` = :domain");
|
|
|
+ $stmt = $pdo->prepare("SELECT COUNT(*) AS `count`, COALESCE(SUM(`quota`), 0) as `in_use` FROM `mailbox` WHERE `kind` NOT REGEXP 'location|thing|group' AND `domain` = :domain");
|
|
|
$stmt->execute(array(':domain' => $row['domain']));
|
|
|
$MailboxDataDomain = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
|
@@ -3901,6 +4182,13 @@ function mailbox_get_domain_details($domain) {
|
|
|
function mailbox_get_mailbox_details($mailbox) {
|
|
|
global $lang;
|
|
|
global $pdo;
|
|
|
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $mailbox)) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['access_denied'])
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
$mailboxdata = array();
|
|
|
try {
|
|
|
$stmt = $pdo->prepare("SELECT
|
|
@@ -3914,7 +4202,7 @@ function mailbox_get_mailbox_details($mailbox) {
|
|
|
`quota2`.`bytes`,
|
|
|
`quota2`.`messages`
|
|
|
FROM `mailbox`, `quota2`, `domain`
|
|
|
- WHERE `mailbox`.`username` = `quota2`.`username` AND `domain`.`domain` = `mailbox`.`domain` AND `mailbox`.`username` = :mailbox");
|
|
|
+ WHERE `mailbox`.`kind` NOT REGEXP 'location|thing|group' AND `mailbox`.`username` = `quota2`.`username` AND `domain`.`domain` = `mailbox`.`domain` AND `mailbox`.`username` = :mailbox");
|
|
|
$stmt->execute(array(
|
|
|
':mailbox' => $mailbox,
|
|
|
));
|
|
@@ -3924,7 +4212,7 @@ function mailbox_get_mailbox_details($mailbox) {
|
|
|
$stmt->execute(array(':domain' => $row['domain']));
|
|
|
$DomainQuota = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
|
|
- $stmt = $pdo->prepare("SELECT COUNT(*) AS `count`, COALESCE(SUM(`quota`), 0) as `in_use` FROM `mailbox` WHERE `domain` = :domain AND `username` != :username");
|
|
|
+ $stmt = $pdo->prepare("SELECT COALESCE(SUM(`quota`), 0) as `in_use` FROM `mailbox` WHERE `kind` NOT REGEXP 'location|thing|group' AND `domain` = :domain AND `username` != :username");
|
|
|
$stmt->execute(array(':domain' => $row['domain'], ':username' => $row['username']));
|
|
|
$MailboxUsage = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
|
@@ -3960,8 +4248,54 @@ function mailbox_get_mailbox_details($mailbox) {
|
|
|
);
|
|
|
return false;
|
|
|
}
|
|
|
- if (!isset($mailboxdata['domain']) ||
|
|
|
- (isset($mailboxdata['domain']) && !hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $mailboxdata['domain']))) {
|
|
|
+ return $mailboxdata;
|
|
|
+}
|
|
|
+function mailbox_get_resource_details($resource) {
|
|
|
+ global $lang;
|
|
|
+ global $pdo;
|
|
|
+ $resourcedata = array();
|
|
|
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $resource)) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['access_denied'])
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ $stmt = $pdo->prepare("SELECT
|
|
|
+ `username`,
|
|
|
+ `name`,
|
|
|
+ `kind`,
|
|
|
+ `multiple_bookings` AS `multiple_bookings_int`,
|
|
|
+ `local_part`,
|
|
|
+ `active` AS `active_int`,
|
|
|
+ CASE `multiple_bookings` WHEN 1 THEN '".$lang['mailbox']['yes']."' ELSE '".$lang['mailbox']['no']."' END AS `multiple_bookings`,
|
|
|
+ CASE `active` WHEN 1 THEN '".$lang['mailbox']['yes']."' ELSE '".$lang['mailbox']['no']."' END AS `active`,
|
|
|
+ `domain`
|
|
|
+ FROM `mailbox` WHERE `kind` REGEXP 'location|thing|group' AND `username` = :resource");
|
|
|
+ $stmt->execute(array(
|
|
|
+ ':resource' => $resource,
|
|
|
+ ));
|
|
|
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
+ $resourcedata['name'] = $row['username'];
|
|
|
+ $resourcedata['kind'] = $row['kind'];
|
|
|
+ $resourcedata['multiple_bookings'] = $row['multiple_bookings'];
|
|
|
+ $resourcedata['multiple_bookings_int'] = $row['multiple_bookings'];
|
|
|
+ $resourcedata['description'] = $row['name'];
|
|
|
+ $resourcedata['active'] = $row['active'];
|
|
|
+ $resourcedata['active_int'] = $row['active_int'];
|
|
|
+ $resourcedata['domain'] = $row['domain'];
|
|
|
+ $resourcedata['local_part'] = $row['local_part'];
|
|
|
+ }
|
|
|
+ catch (PDOException $e) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => 'MySQL: '.$e
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (!isset($resourcedata['domain']) ||
|
|
|
+ (isset($resourcedata['domain']) && !hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $resourcedata['domain']))) {
|
|
|
$_SESSION['return'] = array(
|
|
|
'type' => 'danger',
|
|
|
'msg' => sprintf($lang['danger']['access_denied'])
|
|
@@ -3969,7 +4303,7 @@ function mailbox_get_mailbox_details($mailbox) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- return $mailboxdata;
|
|
|
+ return $resourcedata;
|
|
|
}
|
|
|
function mailbox_delete_domain($postarray) {
|
|
|
global $lang;
|
|
@@ -3989,8 +4323,7 @@ function mailbox_delete_domain($postarray) {
|
|
|
);
|
|
|
return false;
|
|
|
}
|
|
|
- $domain = strtolower(trim($domain));
|
|
|
-
|
|
|
+ $domain = idn_to_ascii(strtolower(trim($domain)));
|
|
|
|
|
|
try {
|
|
|
$stmt = $pdo->prepare("SELECT `username` FROM `mailbox`
|
|
@@ -4113,6 +4446,7 @@ function mailbox_delete_alias($postarray) {
|
|
|
function mailbox_delete_alias_domain($postarray) {
|
|
|
global $lang;
|
|
|
global $pdo;
|
|
|
+ $alias_domain = $postarray['alias_domain'];
|
|
|
if (!is_valid_domain_name($postarray['alias_domain'])) {
|
|
|
$_SESSION['return'] = array(
|
|
|
'type' => 'danger',
|
|
@@ -4120,7 +4454,6 @@ function mailbox_delete_alias_domain($postarray) {
|
|
|
);
|
|
|
return false;
|
|
|
}
|
|
|
- $alias_domain = $postarray['alias_domain'];
|
|
|
try {
|
|
|
$stmt = $pdo->prepare("SELECT `target_domain` FROM `alias_domain`
|
|
|
WHERE `alias_domain`= :alias_domain");
|
|
@@ -4169,7 +4502,7 @@ function mailbox_delete_mailbox($postarray) {
|
|
|
global $lang;
|
|
|
global $pdo;
|
|
|
$username = $postarray['username'];
|
|
|
- $domain = mailbox_get_mailbox_details($username)['domain'];
|
|
|
+
|
|
|
if (!filter_var($postarray['username'], FILTER_VALIDATE_EMAIL)) {
|
|
|
$_SESSION['return'] = array(
|
|
|
'type' => 'danger',
|
|
@@ -4177,7 +4510,8 @@ function mailbox_delete_mailbox($postarray) {
|
|
|
);
|
|
|
return false;
|
|
|
}
|
|
|
- if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {
|
|
|
+
|
|
|
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {
|
|
|
$_SESSION['return'] = array(
|
|
|
'type' => 'danger',
|
|
|
'msg' => sprintf($lang['danger']['access_denied'])
|
|
@@ -4214,6 +4548,34 @@ function mailbox_delete_mailbox($postarray) {
|
|
|
$stmt->execute(array(
|
|
|
':username' => $username
|
|
|
));
|
|
|
+ $stmt = $pdo->prepare("DELETE FROM `sogo_user_profile` WHERE `c_uid` = :username");
|
|
|
+ $stmt->execute(array(
|
|
|
+ ':username' => $username
|
|
|
+ ));
|
|
|
+ $stmt = $pdo->prepare("DELETE FROM `sogo_cache_folder` WHERE `c_uid` = :username");
|
|
|
+ $stmt->execute(array(
|
|
|
+ ':username' => $username
|
|
|
+ ));
|
|
|
+ $stmt = $pdo->prepare("DELETE FROM `sogo_acl` WHERE `c_object` LIKE '%/" . $username . "/%' OR `c_uid` = :username");
|
|
|
+ $stmt->execute(array(
|
|
|
+ ':username' => $username
|
|
|
+ ));
|
|
|
+ $stmt = $pdo->prepare("DELETE FROM `sogo_store` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)");
|
|
|
+ $stmt->execute(array(
|
|
|
+ ':username' => $username
|
|
|
+ ));
|
|
|
+ $stmt = $pdo->prepare("DELETE FROM `sogo_quick_contact` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)");
|
|
|
+ $stmt->execute(array(
|
|
|
+ ':username' => $username
|
|
|
+ ));
|
|
|
+ $stmt = $pdo->prepare("DELETE FROM `sogo_quick_appointment` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)");
|
|
|
+ $stmt->execute(array(
|
|
|
+ ':username' => $username
|
|
|
+ ));
|
|
|
+ $stmt = $pdo->prepare("DELETE FROM `sogo_folder_info` WHERE `c_path2` = :username");
|
|
|
+ $stmt->execute(array(
|
|
|
+ ':username' => $username
|
|
|
+ ));
|
|
|
$stmt = $pdo->prepare("SELECT `address`, `goto` FROM `alias`
|
|
|
WHERE `goto` LIKE :username");
|
|
|
$stmt->execute(array(':username' => '%'.$username.'%'));
|
|
@@ -4247,6 +4609,44 @@ function mailbox_delete_mailbox($postarray) {
|
|
|
'msg' => sprintf($lang['success']['mailbox_removed'], htmlspecialchars($username))
|
|
|
);
|
|
|
}
|
|
|
+function mailbox_delete_resource($postarray) {
|
|
|
+ global $lang;
|
|
|
+ global $pdo;
|
|
|
+ $name = $postarray['name'];
|
|
|
+ if (!filter_var($postarray['name'], FILTER_VALIDATE_EMAIL)) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['access_denied'])
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $name)) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['access_denied'])
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ $stmt = $pdo->prepare("DELETE FROM `mailbox` WHERE `username` = :name");
|
|
|
+ $stmt->execute(array(
|
|
|
+ ':name' => $name
|
|
|
+ ));
|
|
|
+ }
|
|
|
+ catch (PDOException $e) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => 'MySQL: '.$e
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'success',
|
|
|
+ 'msg' => sprintf($lang['success']['resource_removed'], htmlspecialchars($name))
|
|
|
+ );
|
|
|
+}
|
|
|
function mailbox_get_sender_acl_handles($mailbox) {
|
|
|
global $pdo;
|
|
|
global $lang;
|
|
@@ -4369,7 +4769,7 @@ function get_u2f_registrations($username) {
|
|
|
function add_u2f_registration($username, $reg) {
|
|
|
global $pdo;
|
|
|
global $lang;
|
|
|
- $ins = $pdo->prepare("INSERT INTO `tfa` (`username`, `authmech`, `keyHandle`, `publicKey`, `certificate`, `counter`) values (?, 'u2f', ?, ?, ?, ?)");
|
|
|
+ $ins = $pdo->prepare("INSERT INTO `tfa` (`username`, `authmech`, `keyHandle`, `publicKey`, `certificate`, `counter`) VALUES (?, 'u2f', ?, ?, ?, ?)");
|
|
|
$ins->execute(array($username, $reg->keyHandle, $reg->publicKey, $reg->certificate, $reg->counter));
|
|
|
$_SESSION['return'] = array(
|
|
|
'type' => 'success',
|