diff --git a/data/conf/rspamd/meta_exporter/pushover.php b/data/conf/rspamd/meta_exporter/pushover.php index 974a282d..8db4d3d8 100644 --- a/data/conf/rspamd/meta_exporter/pushover.php +++ b/data/conf/rspamd/meta_exporter/pushover.php @@ -67,10 +67,12 @@ if (is_array($symbols_array)) { $json = json_decode(file_get_contents('php://input')); -$sender_address = $json->header_from ; -if (preg_match('/[a-zA-Z0-9.!#$%&’*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)/i', $sender, $matches)) +$sender_address = $json->header_from[0]; +$sender_name = '-'; +if (preg_match('/[a-zA-Z0-9.!#$%&’*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)/i', $sender_address, $matches)) { $sender_address = $matches[0]; -$sender_name = trim(str_replace('<' . $email . '>', '', $from)); + $sender_name = trim(str_replace('<' . $sender_address . '>', '', $json->header_from[0])); +} $rcpt_final_mailboxes = array(); @@ -238,7 +240,8 @@ foreach ($rcpt_final_mailboxes as $rcpt_final) { "user" => $api_data['key'], "title" => sprintf("%s", str_replace(array('{SUBJECT}', '{SENDER}', '{SENDER_NAME}', '{SENDER_ADDRESS}'), array($subject, $sender, $sender_name, $sender_address), $title)), "priority" => $priority, - "message" => sprintf("%s", str_replace(array('{SUBJECT}', '{SENDER}', '{SENDER_NAME}', '{SENDER_ADDRESS}'), array($subject, $sender, $sender_name, $sender_address), $text)) + "message" => sprintf("%s", str_replace(array('{SUBJECT}', '{SENDER}', '{SENDER_NAME}', '{SENDER_ADDRESS}'), array($subject, $sender, $sender_name, $sender_address), $text)), + "sound" => $attributes['sound'] ?? "pushover" ); if ($attributes['evaluate_x_prio'] == "1" && $priority == 1) { $post_fields['expire'] = 600; diff --git a/data/web/api/openapi.yaml b/data/web/api/openapi.yaml index c23380f1..6310aa58 100644 --- a/data/web/api/openapi.yaml +++ b/data/web/api/openapi.yaml @@ -3349,6 +3349,7 @@ paths: evaluate_x_prio: "0" key: 21e8918e1jksdjcpis712 only_x_prio: "0" + sound: "pushover" senders: "" senders_regex: "" text: "" @@ -3392,6 +3393,7 @@ paths: evaluate_x_prio: "0" key: 21e8918e1jksdjcpis712 only_x_prio: "0" + sound: "pushover" senders: "" senders_regex: "" text: "" @@ -3413,6 +3415,9 @@ paths: only_x_prio: description: Only send push for prio mails type: number + sound: + description: Set notification sound + type: string senders: description: Only send push for emails from these senders type: string diff --git a/data/web/inc/functions.pushover.inc.php b/data/web/inc/functions.pushover.inc.php index 74e8bb1c..5393c0d5 100644 --- a/data/web/inc/functions.pushover.inc.php +++ b/data/web/inc/functions.pushover.inc.php @@ -51,6 +51,7 @@ function pushover($_action, $_data = null) { $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active']; $evaluate_x_prio = (isset($_data['evaluate_x_prio'])) ? intval($_data['evaluate_x_prio']) : $is_now['evaluate_x_prio']; $only_x_prio = (isset($_data['only_x_prio'])) ? intval($_data['only_x_prio']) : $is_now['only_x_prio']; + $sound = (isset($_data['sound'])) ? $_data['sound'] : $is_now['sound']; } else { $_SESSION['return'][] = array( @@ -101,7 +102,8 @@ function pushover($_action, $_data = null) { $po_attributes = json_encode( array( 'evaluate_x_prio' => strval(intval($evaluate_x_prio)), - 'only_x_prio' => strval(intval($only_x_prio)) + 'only_x_prio' => strval(intval($only_x_prio)), + 'sound' => strval($sound) ) ); $stmt = $pdo->prepare("REPLACE INTO `pushover` (`username`, `key`, `attributes`, `senders_regex`, `senders`, `token`, `title`, `text`, `active`) diff --git a/data/web/inc/init_db.inc.php b/data/web/inc/init_db.inc.php index b47bd5c2..48db1a62 100644 --- a/data/web/inc/init_db.inc.php +++ b/data/web/inc/init_db.inc.php @@ -1264,6 +1264,7 @@ function init_db_schema() { $pdo->query("UPDATE `pushover` SET `attributes` = '{}' WHERE `attributes` = '' OR `attributes` IS NULL;"); $pdo->query("UPDATE `pushover` SET `attributes` = JSON_SET(`attributes`, '$.evaluate_x_prio', \"0\") WHERE JSON_VALUE(`attributes`, '$.evaluate_x_prio') IS NULL;"); $pdo->query("UPDATE `pushover` SET `attributes` = JSON_SET(`attributes`, '$.only_x_prio', \"0\") WHERE JSON_VALUE(`attributes`, '$.only_x_prio') IS NULL;"); + $pdo->query("UPDATE `pushover` SET `attributes` = JSON_SET(`attributes`, '$.sound', \"0\") WHERE JSON_VALUE(`attributes`, '$.sound') IS NULL;"); // mailbox $pdo->query("UPDATE `mailbox` SET `attributes` = '{}' WHERE `attributes` = '' OR `attributes` IS NULL;"); $pdo->query("UPDATE `mailbox` SET `attributes` = JSON_SET(`attributes`, '$.passwd_update', \"0\") WHERE JSON_VALUE(`attributes`, '$.passwd_update') IS NULL;"); diff --git a/data/web/lang/lang.en-gb.json b/data/web/lang/lang.en-gb.json index 0a384071..260997de 100644 --- a/data/web/lang/lang.en-gb.json +++ b/data/web/lang/lang.en-gb.json @@ -574,6 +574,7 @@ "pushover_sender_regex": "Consider the following sender regex", "pushover_text": "Notification text", "pushover_title": "Notification title", + "pushover_sound": "Sound", "pushover_vars": "When no sender filter is defined, all mails will be considered.
Regex filters as well as exact sender checks can be defined individually and will be considered sequentially. They do not depend on each other.
Useable variables for text and title (please take note of data protection policies)", "pushover_verify": "Verify credentials", "quota_mb": "Quota (MiB)", @@ -1097,6 +1098,7 @@ "pushover_sender_regex": "Match senders by the following regex", "pushover_text": "Notification text", "pushover_title": "Notification title", + "pushover_sound": "Sound", "pushover_vars": "When no sender filter is defined, all mails will be considered.
Regex filters as well as exact sender checks can be defined individually and will be considered sequentially. They do not depend on each other.
Useable variables for text and title (please take note of data protection policies)", "pushover_verify": "Verify credentials", "q_add_header": "Junk folder", diff --git a/data/web/lang/lang.nl-nl.json b/data/web/lang/lang.nl-nl.json index ecfee43d..af8e9834 100644 --- a/data/web/lang/lang.nl-nl.json +++ b/data/web/lang/lang.nl-nl.json @@ -536,6 +536,7 @@ "pushover_sender_regex": "Uitsluitend een afzender met de volgende regex", "pushover_text": "Meldingstekst ({SUBJECT} zal worden vervangen door het onderwerp)", "pushover_title": "Meldingstitel", + "pushover_sound": "Geluid", "pushover_vars": "Wanneer er geen afzenders zijn uitgesloten zullen alle mails doorkomen.
Regex-filters en afzendercontroles kunnen individueel worden ingesteld en zullen in volgorde worden verwerkt. Ze zijn niet afhankelijk van elkaar.
Bruikbare variabelen voor tekst en titel (neem het gegevensbeschermingsbeleid in acht)", "pushover_verify": "Verifieer aanmeldingsgegevens", "quota_mb": "Quota (MiB)", @@ -1002,6 +1003,7 @@ "pushover_sender_regex": "Uitsluitend een afzender met de volgende regex", "pushover_text": "Meldingstekst ({SUBJECT} zal worden vervangen door het onderwerp)", "pushover_title": "Meldingstitel", + "pushover_sound": "Geluid", "pushover_vars": "Wanneer er geen afzenders zijn uitgesloten zullen alle mails doorkomen.
Regex-filters en afzendercontroles kunnen individueel worden ingesteld en zullen in volgorde worden verwerkt. Ze zijn niet afhankelijk van elkaar.
Bruikbare variabelen voor tekst en titel (let op het gegevensbeschermingsbeleid)", "pushover_verify": "Verifieer aanmeldingsgegevens", "q_add_header": "Spamfolder", diff --git a/data/web/templates/edit/mailbox.twig b/data/web/templates/edit/mailbox.twig index d4154292..f0154584 100644 --- a/data/web/templates/edit/mailbox.twig +++ b/data/web/templates/edit/mailbox.twig @@ -308,6 +308,36 @@ +
+
+
+ +
+
diff --git a/data/web/templates/user/Pushover.twig b/data/web/templates/user/Pushover.twig index 8a6755a8..a1867a8b 100644 --- a/data/web/templates/user/Pushover.twig +++ b/data/web/templates/user/Pushover.twig @@ -9,7 +9,7 @@

{{ lang.user.pushover_info|format(mailcow_cc_username)|raw }}

-

{{ lang.user.pushover_vars|raw }}: {SUBJECT}, {SENDER}, {SENDER_ADDRESS}, {SENDER_NAME}

+

{{ lang.user.pushover_vars|raw }}: {SUBJECT}, {SENDER}, {SENDER_ADDRESS}, {SENDER_NAME}

@@ -42,6 +42,36 @@
+
+
+
+ +
+