Skip to content

Commit c4a6fa9

Browse files
authored
Merge pull request #1518 from kroky/bugfix/sieve-init
fix(backend): sieve initialization
2 parents 2bdd091 + d306a63 commit c4a6fa9

File tree

5 files changed

+28
-27
lines changed

5 files changed

+28
-27
lines changed

modules/imap/functions.php

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1526,20 +1526,6 @@ function forward_dropdown($output,$reply_args) {
15261526
}
15271527
}
15281528

1529-
/**
1530-
* @subpackage imap/functions
1531-
*/
1532-
if (!hm_exists('parse_sieve_config_host')) {
1533-
function parse_sieve_config_host($host) {
1534-
$url = parse_url($host);
1535-
if ($url === false) {
1536-
return $host;
1537-
}
1538-
$host = $url['host'] ?? $url['path'];
1539-
$port = $url['port'] ?? '4190';
1540-
return [$host, $port];
1541-
}}
1542-
15431529
if (!hm_exists('connect_to_imap_server')) {
15441530
function connect_to_imap_server($address, $name, $port, $user, $pass, $tls, $imap_sieve_host, $enableSieve, $type, $context, $hidden = false, $server_id = false, $sieve_tls = false, $show_errors = true) {
15451531
$imap_list = array(

modules/imap/handler_modules.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1905,10 +1905,9 @@ public function process() {
19051905
$imap_details = Hm_IMAP_List::dump($form['imap_server_id'], true);
19061906
if ($success && $imap_details) {
19071907
if ($this->module_is_supported('sievefilters') && $this->user_config->get('enable_sieve_filter_setting', DEFAULT_ENABLE_SIEVE_FILTER)) {
1908+
$factory = get_sieve_client_factory($this->site_config);
19081909
try {
1909-
list($sieve_host, $sieve_port) = parse_sieve_config_host($imap_details['sieve_config_host']);
1910-
$client = new \PhpSieveManager\ManageSieve\Client($sieve_host, $sieve_port);
1911-
$client->connect($imap_details['user'], $imap_details['pass'], $imap_details['sieve_tls'], "", "PLAIN");
1910+
$client = $factory->init($this->user_config, $imap_details, $this->module_is_supported('nux'));
19121911
} catch (Exception $e) {
19131912
Hm_Msgs::add("Failed to authenticate to the Sieve host", "danger");
19141913
return;

modules/imap_folders/modules.php

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -211,10 +211,9 @@ public function process() {
211211
$imap_account = $imap_servers[$form['imap_server_id']];
212212
$linked_mailboxes = get_sieve_linked_mailbox($imap_account, $this);
213213
if ($linked_mailboxes && in_array($old_folder, $linked_mailboxes)) {
214-
list($sieve_host, $sieve_port) = parse_sieve_config_host($imap_account['sieve_config_host']);
214+
$factory = get_sieve_client_factory($this->site_config);
215215
try {
216-
$client = new \PhpSieveManager\ManageSieve\Client($sieve_host, $sieve_port);
217-
$client->connect($imap_account['user'], $imap_account['pass'], $imap_account['sieve_tls'], "", "PLAIN");
216+
$client = $factory->init($this->user_config, $imap_account, $this->module_is_supported('nux'));
218217
$script_names = array_filter(
219218
$linked_mailboxes,
220219
function ($value) use($old_folder) {
@@ -835,14 +834,12 @@ protected function output() {
835834

836835
if (!hm_exists('get_sieve_linked_mailbox')) {
837836
function get_sieve_linked_mailbox ($imap_account, $module) {
838-
if (!$module->module_is_supported('sievefilters') && $module->user_config->get('enable_sieve_filter_setting', DEFAULT_ENABLE_SIEVE_FILTER)) {
837+
if (! ($module->module_is_supported('sievefilters') && $module->user_config->get('enable_sieve_filter_setting', DEFAULT_ENABLE_SIEVE_FILTER))) {
839838
return;
840839
}
841-
list($sieve_host, $sieve_port) = parse_sieve_config_host($imap_account['sieve_config_host']);
842-
$client = new \PhpSieveManager\ManageSieve\Client($sieve_host, $sieve_port);
840+
$factory = get_sieve_client_factory($site_config);
843841
try {
844-
$tls = isset($imap_account['sieve_tls']) ? $imap_account['sieve_tls'] : false;
845-
$client->connect($imap_account['user'], $imap_account['pass'], $tls, "", "PLAIN");
842+
$client = $factory->init($module->user_config, $imap_account, $module->module_is_supported('nux'));
846843
$scripts = $client->listScripts();
847844
$folders = [];
848845
foreach ($scripts as $s) {

modules/sievefilters/functions.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,23 @@ function get_sieve_client_factory($site_config)
284284
}
285285
}
286286

287+
if (!hm_exists('parse_sieve_config_host')) {
288+
function parse_sieve_config_host($imap_account) {
289+
$host = $imap_account['sieve_config_host'];
290+
$url = parse_url($host);
291+
if ($url === false) {
292+
return $host;
293+
}
294+
$host = $url['host'] ?? $url['path'];
295+
$port = $url['port'] ?? '4190';
296+
if (isset($url['scheme'])) {
297+
$tls = $url['scheme'] == 'tls';
298+
} else {
299+
$tls = $imap_account['tls'] ?? true;
300+
}
301+
return [$host, $port, $tls];
302+
}}
303+
287304
if (!hm_exists('prepare_sieve_script ')) {
288305
function prepare_sieve_script ($script, $index = 1, $action = "decode")
289306
{
@@ -554,6 +571,7 @@ function get_sieve_host_from_services($imap_host) {
554571
return [
555572
'host' => $service['sieve']['host'],
556573
'port' => $service['sieve']['port'] ?? 4190,
574+
'tls' => $service['sieve']['tls'] ?? true,
557575
];
558576
}
559577
}

modules/sievefilters/hm-sieve.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ public function init($user_config = null, $imap_account = null, $is_nux_supporte
1111
if($is_nux_supported && $sieve_config = get_sieve_host_from_services($imap_account['server'])) {
1212
$sieve_host = $sieve_config['host'];
1313
$sieve_port = $sieve_config['port'];
14+
$sieve_tls = $sieve_config['tls'];
1415
} else {
15-
list($sieve_host, $sieve_port) = parse_sieve_config_host($imap_account['sieve_config_host']);
16+
list($sieve_host, $sieve_port, $sieve_tls) = parse_sieve_config_host($imap_account);
1617
}
1718
$client = new PhpSieveManager\ManageSieve\Client($sieve_host, $sieve_port);
18-
$client->connect($imap_account['user'], $imap_account['pass'], $imap_account['sieve_tls'], "", "PLAIN");
19+
$client->connect($imap_account['user'], $imap_account['pass'], $sieve_tls, "", "PLAIN");
1920
return $client;
2021
} else {
2122
$errorMsg = 'Invalid config host';

0 commit comments

Comments
 (0)