|
@@ -2176,12 +2176,12 @@ function get_spam_score($username) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-function set_whitelist($postarray) {
|
|
|
+function set_spam_score($postarray) {
|
|
|
global $lang;
|
|
|
global $pdo;
|
|
|
- $username = $_SESSION['mailcow_cc_username'];
|
|
|
- $whitelist_from = trim(strtolower($postarray['whitelist_from']));
|
|
|
- $whitelist_from = preg_replace("/\.\*/", "*", $whitelist_from);
|
|
|
+ $username = $_SESSION['mailcow_cc_username'];
|
|
|
+ $lowspamlevel = explode(',', $postarray['score'])[0];
|
|
|
+ $highspamlevel = explode(',', $postarray['score'])[1];
|
|
|
if (!filter_var($username, FILTER_VALIDATE_EMAIL)) {
|
|
|
$_SESSION['return'] = array(
|
|
|
'type' => 'danger',
|
|
@@ -2189,41 +2189,32 @@ function set_whitelist($postarray) {
|
|
|
);
|
|
|
return false;
|
|
|
}
|
|
|
- if (!ctype_alnum(str_replace(array('@', '.', '-', '*'), '', $whitelist_from))) {
|
|
|
- $_SESSION['return'] = array(
|
|
|
- 'type' => 'danger',
|
|
|
- 'msg' => sprintf($lang['danger']['whitelist_from_invalid'])
|
|
|
- );
|
|
|
- return false;
|
|
|
- }
|
|
|
- try {
|
|
|
- $stmt = $pdo->prepare("SELECT `object` FROM `filterconf`
|
|
|
- WHERE `option` = 'whitelist_from'
|
|
|
- AND `object` = :username
|
|
|
- AND `value` = :whitelist_from");
|
|
|
- $stmt->execute(array(':username' => $username, ':whitelist_from' => $whitelist_from));
|
|
|
- $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
|
|
|
- }
|
|
|
- catch(PDOException $e) {
|
|
|
- $_SESSION['return'] = array(
|
|
|
- 'type' => 'danger',
|
|
|
- 'msg' => 'MySQL: '.$e
|
|
|
- );
|
|
|
- return false;
|
|
|
- }
|
|
|
- if ($num_results != 0) {
|
|
|
+ if (!is_numeric($lowspamlevel) || !is_numeric($highspamlevel)) {
|
|
|
$_SESSION['return'] = array(
|
|
|
'type' => 'danger',
|
|
|
- 'msg' => sprintf($lang['danger']['whitelist_exists'])
|
|
|
+ 'msg' => sprintf($lang['danger']['access_denied'])
|
|
|
);
|
|
|
return false;
|
|
|
}
|
|
|
try {
|
|
|
- $stmt = $pdo->prepare("INSERT INTO `filterconf` (`object`, `option` ,`value`)
|
|
|
- VALUES (:username, 'whitelist_from', :whitelist_from)");
|
|
|
+ $stmt = $pdo->prepare("DELETE FROM `filterconf` WHERE `object` = :username
|
|
|
+ AND (`option` = 'lowspamlevel' OR `option` = 'highspamlevel')");
|
|
|
+ $stmt->execute(array(
|
|
|
+ ':username' => $username
|
|
|
+ ));
|
|
|
+
|
|
|
+ $stmt = $pdo->prepare("INSERT INTO `filterconf` (`object`, `option`, `value`)
|
|
|
+ VALUES (:username, 'highspamlevel', :highspamlevel)");
|
|
|
$stmt->execute(array(
|
|
|
':username' => $username,
|
|
|
- ':whitelist_from' => $whitelist_from
|
|
|
+ ':highspamlevel' => $highspamlevel
|
|
|
+ ));
|
|
|
+
|
|
|
+ $stmt = $pdo->prepare("INSERT INTO `filterconf` (`object`, `option`, `value`)
|
|
|
+ VALUES (:username, 'lowspamlevel', :lowspamlevel)");
|
|
|
+ $stmt->execute(array(
|
|
|
+ ':username' => $username,
|
|
|
+ ':lowspamlevel' => $lowspamlevel
|
|
|
));
|
|
|
}
|
|
|
catch (PDOException $e) {
|
|
@@ -2238,70 +2229,70 @@ function set_whitelist($postarray) {
|
|
|
'msg' => sprintf($lang['success']['mailbox_modified'], $username)
|
|
|
);
|
|
|
}
|
|
|
-function delete_whitelist($postarray) {
|
|
|
+function set_policy_list($postarray) {
|
|
|
global $lang;
|
|
|
global $pdo;
|
|
|
- $username = $_SESSION['mailcow_cc_username'];
|
|
|
- $prefid = $postarray['wlid'];
|
|
|
- if (!filter_var($username, FILTER_VALIDATE_EMAIL)) {
|
|
|
+
|
|
|
+ (isset($postarray['domain'])) ? $object = $postarray['domain'] : $object = $_SESSION['mailcow_cc_username'];
|
|
|
+ ($postarray['object_list'] == "bl") ? $object_list = "blacklist_from" : $object_list = "whitelist_from";
|
|
|
+ $object_from = preg_replace('/\.+/', '.', rtrim(preg_replace("/\.\*/", "*", trim(strtolower($postarray['object_from']))), '.'));
|
|
|
+ if (!filter_var($object, FILTER_VALIDATE_EMAIL) && !is_valid_domain_name($object)) {
|
|
|
$_SESSION['return'] = array(
|
|
|
'type' => 'danger',
|
|
|
'msg' => sprintf($lang['danger']['username_invalid'])
|
|
|
);
|
|
|
return false;
|
|
|
}
|
|
|
- if (!is_numeric($prefid)) {
|
|
|
- $_SESSION['return'] = array(
|
|
|
- 'type' => 'danger',
|
|
|
- 'msg' => sprintf($lang['danger']['whitelist_from_invalid'])
|
|
|
- );
|
|
|
- return false;
|
|
|
- }
|
|
|
- try {
|
|
|
- $stmt = $pdo->prepare("DELETE FROM `filterconf` WHERE `object` = :username AND `prefid` = :prefid");
|
|
|
- $stmt->execute(array(
|
|
|
- ':username' => $username,
|
|
|
- ':prefid' => $prefid
|
|
|
- ));
|
|
|
- }
|
|
|
- catch (PDOException $e) {
|
|
|
- $_SESSION['return'] = array(
|
|
|
- 'type' => 'danger',
|
|
|
- 'msg' => 'MySQL: '.$e
|
|
|
- );
|
|
|
- return false;
|
|
|
+ if (is_valid_domain_name($object)) {
|
|
|
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $object)) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['access_denied'])
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|
|
|
- $_SESSION['return'] = array(
|
|
|
- 'type' => 'success',
|
|
|
- 'msg' => sprintf($lang['success']['mailbox_modified'], $username)
|
|
|
- );
|
|
|
-}
|
|
|
-function set_blacklist($postarray) {
|
|
|
- global $lang;
|
|
|
- global $pdo;
|
|
|
- $username = $_SESSION['mailcow_cc_username'];
|
|
|
- $blacklist_from = trim(strtolower($postarray['blacklist_from']));
|
|
|
- $blacklist_from = preg_replace("/\.\*/", "*", $blacklist_from);
|
|
|
- if (!filter_var($username, FILTER_VALIDATE_EMAIL)) {
|
|
|
+ if (isset($postarray['prefid'])) {
|
|
|
+ if (!is_numeric($postarray['prefid'])) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => sprintf($lang['danger']['access_denied'])
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ $stmt = $pdo->prepare("DELETE FROM `filterconf` WHERE `object` = :object AND `prefid` = :prefid");
|
|
|
+ $stmt->execute(array(
|
|
|
+ ':object' => $object,
|
|
|
+ ':prefid' => $postarray['prefid']
|
|
|
+ ));
|
|
|
+ }
|
|
|
+ catch (PDOException $e) {
|
|
|
+ $_SESSION['return'] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'msg' => 'MySQL: '.$e
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
$_SESSION['return'] = array(
|
|
|
- 'type' => 'danger',
|
|
|
- 'msg' => sprintf($lang['danger']['username_invalid'])
|
|
|
+ 'type' => 'success',
|
|
|
+ 'msg' => sprintf($lang['success']['mailbox_modified'], $object)
|
|
|
);
|
|
|
- return false;
|
|
|
+ return true;
|
|
|
}
|
|
|
- if (!ctype_alnum(str_replace(array('@', '.', '-', '*'), '', $blacklist_from))) {
|
|
|
+ if (!ctype_alnum(str_replace(array('@', '.', '-', '*'), '', $object_from))) {
|
|
|
$_SESSION['return'] = array(
|
|
|
'type' => 'danger',
|
|
|
- 'msg' => sprintf($lang['danger']['blacklist_from_invalid'])
|
|
|
+ 'msg' => sprintf($lang['danger']['policy_list_from_invalid'])
|
|
|
);
|
|
|
return false;
|
|
|
}
|
|
|
try {
|
|
|
$stmt = $pdo->prepare("SELECT `object` FROM `filterconf`
|
|
|
- WHERE `option` = 'blacklist_from'
|
|
|
- AND `object` = :username
|
|
|
- AND `value` = :blacklist_from");
|
|
|
- $stmt->execute(array(':username' => $username, ':blacklist_from' => $blacklist_from));
|
|
|
+ WHERE (`option` = 'whitelist_from' OR `option` = 'blacklist_from')
|
|
|
+ AND `object` = :object
|
|
|
+ AND `value` = :object_from");
|
|
|
+ $stmt->execute(array(':object' => $object, ':object_from' => $object_from));
|
|
|
$num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
|
|
|
}
|
|
|
catch(PDOException $e) {
|
|
@@ -2314,107 +2305,17 @@ function set_blacklist($postarray) {
|
|
|
if ($num_results != 0) {
|
|
|
$_SESSION['return'] = array(
|
|
|
'type' => 'danger',
|
|
|
- 'msg' => sprintf($lang['danger']['blacklist_exists'])
|
|
|
+ 'msg' => sprintf($lang['danger']['policy_list_from_exists'])
|
|
|
);
|
|
|
return false;
|
|
|
}
|
|
|
try {
|
|
|
$stmt = $pdo->prepare("INSERT INTO `filterconf` (`object`, `option` ,`value`)
|
|
|
- VALUES (:username, 'blacklist_from', :blacklist_from)");
|
|
|
- $stmt->execute(array(
|
|
|
- ':username' => $username,
|
|
|
- ':blacklist_from' => $blacklist_from
|
|
|
- ));
|
|
|
- }
|
|
|
- catch (PDOException $e) {
|
|
|
- $_SESSION['return'] = array(
|
|
|
- 'type' => 'danger',
|
|
|
- 'msg' => 'MySQL: '.$e
|
|
|
- );
|
|
|
- return false;
|
|
|
- }
|
|
|
- $_SESSION['return'] = array(
|
|
|
- 'type' => 'success',
|
|
|
- 'msg' => sprintf($lang['success']['mailbox_modified'], $username)
|
|
|
- );
|
|
|
-}
|
|
|
-function delete_blacklist($postarray) {
|
|
|
- global $lang;
|
|
|
- global $pdo;
|
|
|
- $username = $_SESSION['mailcow_cc_username'];
|
|
|
- $prefid = $postarray['blid'];
|
|
|
- if (!filter_var($username, FILTER_VALIDATE_EMAIL)) {
|
|
|
- $_SESSION['return'] = array(
|
|
|
- 'type' => 'danger',
|
|
|
- 'msg' => sprintf($lang['danger']['username_invalid'])
|
|
|
- );
|
|
|
- return false;
|
|
|
- }
|
|
|
- if (!is_numeric($prefid)) {
|
|
|
- $_SESSION['return'] = array(
|
|
|
- 'type' => 'danger',
|
|
|
- 'msg' => sprintf($lang['danger']['blacklist_from_invalid'])
|
|
|
- );
|
|
|
- return false;
|
|
|
- }
|
|
|
- try {
|
|
|
- $stmt = $pdo->prepare("DELETE FROM `filterconf` WHERE `object` = :username AND `prefid` = :prefid");
|
|
|
- $stmt->execute(array(
|
|
|
- ':username' => $username,
|
|
|
- ':prefid' => $prefid
|
|
|
- ));
|
|
|
- }
|
|
|
- catch (PDOException $e) {
|
|
|
- $_SESSION['return'] = array(
|
|
|
- 'type' => 'danger',
|
|
|
- 'msg' => 'MySQL: '.$e
|
|
|
- );
|
|
|
- return false;
|
|
|
- }
|
|
|
- $_SESSION['return'] = array(
|
|
|
- 'type' => 'success',
|
|
|
- 'msg' => sprintf($lang['success']['mailbox_modified'], $username)
|
|
|
- );
|
|
|
-}
|
|
|
-function set_spam_score($postarray) {
|
|
|
- global $lang;
|
|
|
- global $pdo;
|
|
|
- $username = $_SESSION['mailcow_cc_username'];
|
|
|
- $lowspamlevel = explode(',', $postarray['score'])[0];
|
|
|
- $highspamlevel = explode(',', $postarray['score'])[1];
|
|
|
- if (!filter_var($username, FILTER_VALIDATE_EMAIL)) {
|
|
|
- $_SESSION['return'] = array(
|
|
|
- 'type' => 'danger',
|
|
|
- 'msg' => sprintf($lang['danger']['username_invalid'])
|
|
|
- );
|
|
|
- return false;
|
|
|
- }
|
|
|
- if (!is_numeric($lowspamlevel) || !is_numeric($highspamlevel)) {
|
|
|
- $_SESSION['return'] = array(
|
|
|
- 'type' => 'danger',
|
|
|
- 'msg' => sprintf($lang['danger']['access_denied'])
|
|
|
- );
|
|
|
- return false;
|
|
|
- }
|
|
|
- try {
|
|
|
- $stmt = $pdo->prepare("DELETE FROM `filterconf` WHERE `object` = :username
|
|
|
- AND (`option` = 'lowspamlevel' OR `option` = 'highspamlevel')");
|
|
|
+ VALUES (:object, :object_list, :object_from)");
|
|
|
$stmt->execute(array(
|
|
|
- ':username' => $username
|
|
|
- ));
|
|
|
-
|
|
|
- $stmt = $pdo->prepare("INSERT INTO `filterconf` (`object`, `option`, `value`)
|
|
|
- VALUES (:username, 'highspamlevel', :highspamlevel)");
|
|
|
- $stmt->execute(array(
|
|
|
- ':username' => $username,
|
|
|
- ':highspamlevel' => $highspamlevel
|
|
|
- ));
|
|
|
-
|
|
|
- $stmt = $pdo->prepare("INSERT INTO `filterconf` (`object`, `option`, `value`)
|
|
|
- VALUES (:username, 'lowspamlevel', :lowspamlevel)");
|
|
|
- $stmt->execute(array(
|
|
|
- ':username' => $username,
|
|
|
- ':lowspamlevel' => $lowspamlevel
|
|
|
+ ':object' => $object,
|
|
|
+ ':object_list' => $object_list,
|
|
|
+ ':object_from' => $object_from
|
|
|
));
|
|
|
}
|
|
|
catch (PDOException $e) {
|
|
@@ -2426,7 +2327,7 @@ function set_spam_score($postarray) {
|
|
|
}
|
|
|
$_SESSION['return'] = array(
|
|
|
'type' => 'success',
|
|
|
- 'msg' => sprintf($lang['success']['mailbox_modified'], $username)
|
|
|
+ 'msg' => sprintf($lang['success']['mailbox_modified'], $object)
|
|
|
);
|
|
|
}
|
|
|
function set_tls_policy($postarray) {
|