public
nobgit
read
NobMail
Based on mailcow: dockerized
Languages
Repository composition by tracked source files.
PHP
49%
JavaScript
35%
HTML
9%
CSS
4%
Shell
2%
Python
1%
Lua
0%
Perl
0%
Ruby
0%
SCSS
0%
Create file
Wiki Documentation
Clone
https://nobgit.com/orgs/nobgit/nobmail.git
ssh://[email protected]:2222/orgs/nobgit/nobmail.git
Commit
[Web] Read default actions from Rspamd instead of using/printing "5,15" [Web] Allow to reset spam score to server default (which deletes the custom spam score from the database and prints the default action values of Rspamd in use)
67658c1a
data/web/inc/functions.mailbox.inc.php | 52 ++++++++++++++++++++++++++++++++--
data/web/lang/lang.de.php | 1 +
data/web/lang/lang.en.php | 1 +
data/web/user.php | 19 +++++++++----
4 files changed, 65 insertions(+), 8 deletions(-)
Diff
diff --git a/data/web/inc/functions.mailbox.inc.php b/data/web/inc/functions.mailbox.inc.php
index 045fa011..21676c64 100644
--- a/data/web/inc/functions.mailbox.inc.php
+++ b/data/web/inc/functions.mailbox.inc.php
@@ -1151,13 +1151,21 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
return false;
}
foreach ($usernames as $username) {
+ if ($_data['spam_score'] == "default") {
+ $stmt = $pdo->prepare("DELETE FROM `filterconf` WHERE `object` = :username
+ AND (`option` = 'lowspamlevel' OR `option` = 'highspamlevel')");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ continue;
+ }
$lowspamlevel = explode(',', $_data['spam_score'])[0];
$highspamlevel = explode(',', $_data['spam_score'])[1];
if (!is_numeric($lowspamlevel) || !is_numeric($highspamlevel)) {
$_SESSION['return'][] = array(
'type' => 'danger',
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
- 'msg' => 'access_denied'
+ 'msg' => 'Invalid spam score, format must be "1,2" where first is low and second is high spam value.'
);
continue;
}
@@ -2455,7 +2463,47 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
return $syncjobdata;
break;
case 'spam_score':
- $default = "5, 15";
+ $curl = curl_init();
+ curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');
+ curl_setopt($curl, CURLOPT_URL,"http://rspamd/actions");
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+ $default_actions = curl_exec($curl);
+ if (!curl_errno($curl)) {
+ $data_array = json_decode($default_actions, true);
+ curl_close($curl);
+ foreach ($data_array as $data) {
+ if ($data['action'] == 'reject') {
+ $reject = $data['value'];
+ continue;
+ }
+ elseif ($data['action'] == 'add header') {
+ $add_header = $data['value'];
+ continue;
+ }
+ }
+ if (empty($add_header) || empty($reject)) {
+ // Assume default, set warning
+ $default = "5, 15";
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'Could not determine servers default spam score, assuming default'
+ );
+ }
+ else {
+ $default = $add_header . ', ' . $reject;
+ }
+ }
+ else {
+ // Assume default, set warning
+ $default = "5, 15";
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'Could not determine servers default spam score, assuming default'
+ );
+ }
+ curl_close($curl);
$policydata = array();
if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {
if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
diff --git a/data/web/lang/lang.de.php b/data/web/lang/lang.de.php
index 5c0c6412..8b63c45e 100644
--- a/data/web/lang/lang.de.php
+++ b/data/web/lang/lang.de.php
@@ -598,6 +598,7 @@ $lang['admin']['reset_default'] = "Zurücksetzen auf Standard";
$lang['admin']['merged_vars_hint'] = 'Ausgegraute Reihen wurden aus der Datei <code>vars.(local.)inc.php</code> gelesen und können hier nicht verändert werden.';
$lang['edit']['spam_score'] = "Einen benutzerdefiniterten Spam-Score festlegen";
+$lang['user']['spam_score_reset'] = "Auf Server-Standard zurücksetzen";
$lang['edit']['spam_policy'] = "Hinzufügen und Entfernen von Einträgen in White- und Blacklists";
$lang['edit']['spam_alias'] = "Anpassen temporärer Alias-Adressen";
diff --git a/data/web/lang/lang.en.php b/data/web/lang/lang.en.php
index 904d87cb..9cdf15da 100644
--- a/data/web/lang/lang.en.php
+++ b/data/web/lang/lang.en.php
@@ -614,6 +614,7 @@ $lang['mailbox']['status'] = "Status";
$lang['mailbox']['running'] = "Running";
$lang['edit']['spam_score'] = "Set a custom spam score";
+$lang['user']['spam_score_reset'] = "Reset to server default";
$lang['edit']['spam_policy'] = "Add or remove items to white-/blacklist";
$lang['edit']['spam_alias'] = "Create or change time limited alias addresses";
diff --git a/data/web/user.php b/data/web/user.php
index bbdd2c6f..1eb5d322 100644
--- a/data/web/user.php
+++ b/data/web/user.php
@@ -305,19 +305,26 @@ elseif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == '
<li><?=$lang['user']['spamfilter_yellow'];?></li>
<li><?=$lang['user']['spamfilter_red'];?></li>
</ul>
- <p><i><?=$lang['user']['spamfilter_default_score'];?> 5:15</i></p>
<p><?=$lang['user']['spamfilter_hint'];?></p>
</div>
</div>
<div class="form-group">
<div class="col-sm-10">
- <button data-acl="<?=$_SESSION['acl']['spam_score'];?>" type="button" class="btn btn-sm btn-success" data-action="edit_selected"
- data-item="<?= htmlentities($username); ?>"
- data-id="spam_score"
- data-api-url='edit/spam-score'
- data-api-attr='{}'><?=$lang['user']['save_changes'];?></button>
+
</div>
+ <div class="btn-group" data-acl="<?=$_SESSION['acl']['spam_policy'];?>">
+ <a data-acl="<?=$_SESSION['acl']['spam_score'];?>" type="button" class="btn btn-sm btn-success" data-action="edit_selected"
+ data-item="<?= htmlentities($username); ?>"
+ data-id="spam_score"
+ data-api-url='edit/spam-score'
+ data-api-attr='{}'><?=$lang['user']['save_changes'];?></a>
+ <a data-acl="<?=$_SESSION['acl']['spam_score'];?>" type="button" class="btn btn-sm btn-default" data-action="edit_selected"
+ data-item="<?= htmlentities($username); ?>"
+ data-id="spam_score_reset"
+ data-api-url='edit/spam-score'
+ data-api-attr='{"spam_score":"default"}'><?=$lang['user']['spam_score_reset'];?></a>
+ </div>
</div>
</form>