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] Add smtp and header from to quarantine items, add more info to qhandler, allow to open qhandler links from qitem details
b93371ca
data/web/inc/ajax/qitem_details.php | 62 ++++++++++++++++++++++++++++---
data/web/inc/functions.quarantine.inc.php | 43 ++++++++++++++++-----
data/web/inc/header.inc.php | 2 +-
data/web/js/site/qhandler.js | 52 ++++++++++++++++++++++++++
data/web/js/site/quarantine.js | 3 +-
data/web/lang/lang.ca.json | 2 +-
data/web/lang/lang.cs.json | 2 +-
data/web/lang/lang.de.json | 5 ++-
data/web/lang/lang.en.json | 5 ++-
data/web/lang/lang.es.json | 2 +-
data/web/lang/lang.fi.json | 2 +-
data/web/lang/lang.lv.json | 2 +-
data/web/lang/lang.nl.json | 2 +-
data/web/lang/lang.ro.json | 2 +-
data/web/lang/lang.ru.json | 2 +-
data/web/lang/lang.sk.json | 2 +-
data/web/lang/lang.sv.json | 2 +-
data/web/modals/quarantine.php | 11 ++++++
data/web/qhandler.php | 53 +++++++++++++++++++++++++-
19 files changed, 225 insertions(+), 31 deletions(-)
create mode 100644 data/web/js/site/qhandler.js
Diff
diff --git a/data/web/inc/ajax/qitem_details.php b/data/web/inc/ajax/qitem_details.php
index 0a256703..8607388d 100644
--- a/data/web/inc/ajax/qitem_details.php
+++ b/data/web/inc/ajax/qitem_details.php
@@ -2,9 +2,6 @@
session_start();
header("Content-Type: application/json");
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
-if (!isset($_SESSION['mailcow_cc_role'])) {
- exit();
-}
function rrmdir($src) {
$dir = opendir($src);
@@ -22,6 +19,7 @@ function rrmdir($src) {
closedir($dir);
rmdir($src);
}
+
function addAddresses(&$list, $mail, $headerName) {
$addresses = $mail->getAddresses($headerName);
foreach ($addresses as $address) {
@@ -29,7 +27,49 @@ function addAddresses(&$list, $mail, $headerName) {
}
}
-if (!empty($_GET['id']) && ctype_alnum($_GET['id'])) {
+if (!empty($_GET['hash']) && ctype_alnum($_GET['hash'])) {
+ $mailc = quarantine('hash_details', $_GET['hash']);
+ if ($mailc === false) {
+ echo json_encode(array('error' => 'Message invalid'));
+ exit;
+ }
+ if (strlen($mailc['msg']) > 10485760) {
+ echo json_encode(array('error' => 'Message size exceeds 10 MiB.'));
+ exit;
+ }
+ if (!empty($mailc['msg'])) {
+ // Init message array
+ $data = array();
+ // Init parser
+ $mail_parser = new PhpMimeMailParser\Parser();
+ $html2text = new Html2Text\Html2Text();
+ // Load msg to parser
+ $mail_parser->setText($mailc['msg']);
+ // Get mail recipients
+ {
+ $recipientsList = array();
+ addAddresses($recipientsList, $mail_parser, 'to');
+ addAddresses($recipientsList, $mail_parser, 'cc');
+ addAddresses($recipientsList, $mail_parser, 'bcc');
+ $data['recipients'] = $recipientsList;
+ }
+ // Get from
+ $data['header_from'] = $mail_parser->getHeader('from');
+ $data['env_from'] = $mailc['sender'];
+ // Get rspamd score
+ $data['score'] = $mailc['score'];
+ // Get rspamd symbols
+ $data['symbols'] = json_decode($mailc['symbols']);
+ $data['subject'] = $mail_parser->getHeader('subject');
+ (empty($data['subject'])) ? $data['subject'] = '-' : null;
+ echo json_encode($data);
+ }
+}
+elseif (!empty($_GET['id']) && ctype_alnum($_GET['id'])) {
+ if (!isset($_SESSION['mailcow_cc_role'])) {
+ echo json_encode(array('error' => 'Access denied'));
+ exit();
+ }
$tmpdir = '/tmp/' . $_GET['id'] . '/';
$mailc = quarantine('details', $_GET['id']);
if (strlen($mailc['msg']) > 10485760) {
@@ -37,6 +77,16 @@ if (!empty($_GET['id']) && ctype_alnum($_GET['id'])) {
exit;
}
if (!empty($mailc['msg'])) {
+ if (isset($_GET['quick_release'])) {
+ $hash = hash('sha256', $mailc['id'] . $mailc['qid']);
+ header('Location: /qhandler/release/' . $hash);
+ exit;
+ }
+ if (isset($_GET['quick_delete'])) {
+ $hash = hash('sha256', $mailc['id'] . $mailc['qid']);
+ header('Location: /qhandler/delete/' . $hash);
+ exit;
+ }
// Init message array
$data = array();
// Init parser
@@ -53,7 +103,9 @@ if (!empty($_GET['id']) && ctype_alnum($_GET['id'])) {
addAddresses($recipientsList, $mail_parser, 'bcc');
$data['recipients'] = $recipientsList;
}
-
+ // Get from
+ $data['header_from'] = $mail_parser->getHeader('from');
+ $data['env_from'] = $mailc['sender'];
// Get rspamd score
$data['score'] = $mailc['score'];
// Get rspamd symbols
diff --git a/data/web/inc/functions.quarantine.inc.php b/data/web/inc/functions.quarantine.inc.php
index 69fd4e01..bf43851c 100644
--- a/data/web/inc/functions.quarantine.inc.php
+++ b/data/web/inc/functions.quarantine.inc.php
@@ -16,7 +16,7 @@ function quarantine($_action, $_data = null) {
'msg' => 'access_denied'
)
)));
- return;
+ return false;
}
$stmt = $pdo->prepare('SELECT `id` FROM `quarantine` LEFT OUTER JOIN `user_acl` ON `user_acl`.`username` = `rcpt`
WHERE SHA2(CONCAT(`id`, `qid`), 256) = :hash
@@ -32,7 +32,7 @@ function quarantine($_action, $_data = null) {
'msg' => 'access_denied'
)
)));
- return;
+ return false;
}
else {
$stmt = $pdo->prepare("DELETE FROM `quarantine` WHERE id = :id");
@@ -59,7 +59,7 @@ function quarantine($_action, $_data = null) {
'msg' => 'access_denied'
)
)));
- return;
+ return false;
}
$stmt = $pdo->prepare('SELECT `id` FROM `quarantine` LEFT OUTER JOIN `user_acl` ON `user_acl`.`username` = `rcpt`
WHERE SHA2(CONCAT(`id`, `qid`), 256) = :hash
@@ -75,7 +75,7 @@ function quarantine($_action, $_data = null) {
'msg' => 'access_denied'
)
)));
- return;
+ return false;
}
else {
$stmt = $pdo->prepare('SELECT `msg`, `qid`, `sender`, `rcpt` FROM `quarantine` WHERE `id` = :id');
@@ -96,7 +96,7 @@ function quarantine($_action, $_data = null) {
'msg' => array('release_send_failed', 'Cannot determine Postfix host')
)
)));
- return;
+ return false;
}
try {
$release_format = $redis->Get('Q_RELEASE_FORMAT');
@@ -109,7 +109,7 @@ function quarantine($_action, $_data = null) {
'msg' => array('redis_error', $e)
)
)));
- return;
+ return false;
}
if ($release_format == 'attachment') {
try {
@@ -137,7 +137,7 @@ function quarantine($_action, $_data = null) {
'msg' => array('release_send_failed', 'Cannot determine Postfix host')
)
)));
- return;
+ return false;
}
$mail->Host = $postfix;
$mail->Port = 590;
@@ -162,7 +162,7 @@ function quarantine($_action, $_data = null) {
'msg' => array('release_send_failed', $e->errorMessage())
)
)));
- return;
+ return false;
}
}
elseif ($release_format == 'raw') {
@@ -199,7 +199,7 @@ function quarantine($_action, $_data = null) {
'msg' => 'Postfix returned SMTP code ' . $smtp_resource . ', expected ' . $postfix_talk[$i][0]
)
)));
- return;
+ return false;
}
if ($postfix_talk[$i][1] !== '') {
fputs($smtp_connection, $postfix_talk[$i][1]);
@@ -809,13 +809,36 @@ function quarantine($_action, $_data = null) {
if (!is_numeric($_data) || empty($_data)) {
return false;
}
- $stmt = $pdo->prepare('SELECT `rcpt`, `score`, `symbols`, `msg`, `domain` FROM `quarantine` WHERE `id`= :id');
+ $stmt = $pdo->prepare('SELECT * FROM `quarantine` WHERE `id`= :id');
$stmt->execute(array(':id' => $_data));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if (hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt'])) {
return $row;
}
+ logger(array('return' => array(
+ array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ )
+ )));
return false;
break;
+ case 'hash_details':
+ $hash = trim($_data);
+ if (preg_match("/^([a-f0-9]{64})$/", $hash) === false) {
+ logger(array('return' => array(
+ array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ )
+ )));
+ return false;
+ }
+ $stmt = $pdo->prepare('SELECT * FROM `quarantine` WHERE SHA2(CONCAT(`id`, `qid`), 256) = :hash');
+ $stmt->execute(array(':hash' => $hash));
+ return $stmt->fetch(PDO::FETCH_ASSOC);
+ break;
}
}
diff --git a/data/web/inc/header.inc.php b/data/web/inc/header.inc.php
index 79e76de7..d2add25e 100644
--- a/data/web/inc/header.inc.php
+++ b/data/web/inc/header.inc.php
@@ -20,7 +20,7 @@
if (preg_match("/edit/i", $_SERVER['REQUEST_URI'])) {
$css_minifier->add('/web/css/site/edit.css');
}
- if (preg_match("/quarantine/i", $_SERVER['REQUEST_URI'])) {
+ if (preg_match("/(quarantine|qhandler)/i", $_SERVER['REQUEST_URI'])) {
$css_minifier->add('/web/css/site/quarantine.css');
}
if (preg_match("/debug/i", $_SERVER['REQUEST_URI'])) {
diff --git a/data/web/js/site/qhandler.js b/data/web/js/site/qhandler.js
new file mode 100644
index 00000000..5253e6db
--- /dev/null
+++ b/data/web/js/site/qhandler.js
@@ -0,0 +1,52 @@
+jQuery(function($){
+ var qitem = $('legend').data('hash');
+ var qError = $("#qid_error");
+ $.ajax({
+ url: '/inc/ajax/qitem_details.php',
+ data: { hash: qitem },
+ dataType: 'json',
+ success: function(data){
+ if (typeof data.error !== 'undefined') {
+ qError.text(data.error);
+ qError.show();
+ }
+ $('[data-id="qitems_single"]').each(function(index) {
+ $(this).attr("data-item", qitem);
+ });
+ $('#qid_detail_subj').text(data.subject);
+ $('#qid_detail_hfrom').text(data.header_from);
+ $('#qid_detail_efrom').text(data.env_from);
+ $('#qid_detail_score').text(data.score);
+ $('#qid_detail_symbols').html('');
+ if (typeof data.symbols !== 'undefined') {
+ data.symbols.sort(function (a, b) {
+ if (a.score === 0) return 1
+ if (b.score === 0) return -1
+ if (b.score < 0 && a.score < 0) {
+ return a.score - b.score
+ }
+ if (b.score > 0 && a.score > 0) {
+ return b.score - a.score
+ }
+ return b.score - a.score
+ })
+ $.each(data.symbols, function (index, value) {
+ var highlightClass = ''
+ if (value.score > 0) highlightClass = 'negative'
+ else if (value.score < 0) highlightClass = 'positive'
+ else highlightClass = 'neutral'
+ $('#qid_detail_symbols').append('<span data-toggle="tooltip" class="rspamd-symbol ' + highlightClass + '" title="' + (value.options ? value.options.join(', ') : '') + '">' + value.name + ' (<span class="score">' + value.score + '</span>)</span>');
+ });
+ $('[data-toggle="tooltip"]').tooltip()
+ }
+ $('#qid_detail_recipients').html('');
+ if (typeof data.recipients !== 'undefined') {
+ $.each(data.recipients, function(index, value) {
+ var elem = $('<span class="mail-address-item"></span>');
+ elem.text(value.address + (value.type != 'to' ? (' (' + value.type.toUpperCase() + ')') : ''));
+ $('#qid_detail_recipients').append(elem);
+ });
+ }
+ }
+ });
+});
\ No newline at end of file
diff --git a/data/web/js/site/quarantine.js b/data/web/js/site/quarantine.js
index d25c0de6..af871dec 100644
--- a/data/web/js/site/quarantine.js
+++ b/data/web/js/site/quarantine.js
@@ -144,7 +144,8 @@ jQuery(function($){
$('#qid_detail_subj').text(data.subject);
$('#qid_detail_text').text(data.text_plain);
$('#qid_detail_text_from_html').text(data.text_html);
-
+ $('#qid_detail_hfrom').text(data.header_from);
+ $('#qid_detail_efrom').text(data.env_from);
$('#qid_detail_score').text(data.score);
$('#qid_detail_symbols').html('');
if (typeof data.symbols !== 'undefined') {
diff --git a/data/web/lang/lang.ca.json b/data/web/lang/lang.ca.json
index 1008ab58..6c85b9b0 100644
--- a/data/web/lang/lang.ca.json
+++ b/data/web/lang/lang.ca.json
@@ -387,7 +387,7 @@
"release_body": "Hem adjuntat el teu missatge com a eml en aquest missatge.",
"release_subject": "Element potencialment perillós %s en quarantena",
"remove": "Esborrar",
- "sender": "Emissor",
+ "sender": "Emissor (SMTP)",
"show_item": "Mostrar",
"subj": "Assumpte",
"text_from_html_content": "Contingut (a partir del HTML)",
diff --git a/data/web/lang/lang.cs.json b/data/web/lang/lang.cs.json
index f6a5877d..642a9ccb 100644
--- a/data/web/lang/lang.cs.json
+++ b/data/web/lang/lang.cs.json
@@ -676,7 +676,7 @@
"release_subject": "Potenciálně škodlivá položka v karanténě %s",
"remove": "Smazat",
"rspamd_result": "Skóre Rspamd",
- "sender": "Odesílatel",
+ "sender": "Odesílatel (SMTP)",
"show_item": "Zobrazit položku",
"spam_score": "Skóre",
"subj": "Předmět",
diff --git a/data/web/lang/lang.de.json b/data/web/lang/lang.de.json
index 27ff48a1..fade6109 100644
--- a/data/web/lang/lang.de.json
+++ b/data/web/lang/lang.de.json
@@ -758,7 +758,10 @@
"release_subject": "Potentiell schädliche Nachricht aus Quarantäne: %s",
"remove": "Entfernen",
"rspamd_result": "Rspamd Ergebnis",
- "sender": "Sender",
+ "quick_release_link": "Quick-Release Link öffnen",
+ "quick_delete_link": "Quick-Delete Link öffnen",
+ "sender": "Sender (SMTP)",
+ "sender_header": "Sender (From-Header)",
"show_item": "Details",
"spam_score": "Bewertung",
"subj": "Betreff",
diff --git a/data/web/lang/lang.en.json b/data/web/lang/lang.en.json
index fd788a28..8b9aaf83 100644
--- a/data/web/lang/lang.en.json
+++ b/data/web/lang/lang.en.json
@@ -757,7 +757,10 @@
"release_subject": "Potentially damaging quarantine item %s",
"remove": "Remove",
"rspamd_result": "Rspamd result",
- "sender": "Sender",
+ "sender": "Sender (SMTP)",
+ "sender_header": "Sender (From header)",
+ "quick_release_link": "Open quick release link",
+ "quick_delete_link": "Open quick delete link",
"show_item": "Show item",
"spam_score": "Score",
"subj": "Subject",
diff --git a/data/web/lang/lang.es.json b/data/web/lang/lang.es.json
index da69adb6..b98921d0 100644
--- a/data/web/lang/lang.es.json
+++ b/data/web/lang/lang.es.json
@@ -602,7 +602,7 @@
"release_body": "Adjuntamos el mensaje en formato eml a este correo.",
"release_subject": "Mensaje de cuarentena potencialmente dañino %s",
"remove": "Remover",
- "sender": "Remitente",
+ "sender": "Remitente (SMTP)",
"show_item": "Mostrar item",
"spam_score": "Puntaje",
"subj": "Asunto",
diff --git a/data/web/lang/lang.fi.json b/data/web/lang/lang.fi.json
index e9c8683a..12f70ee1 100644
--- a/data/web/lang/lang.fi.json
+++ b/data/web/lang/lang.fi.json
@@ -677,7 +677,7 @@
"release_subject": "Mahdollisesti vahingoittava karanteeni aihe %s",
"remove": "Poista",
"rspamd_result": "Rspamd-tulos",
- "sender": "Lähettäjä",
+ "sender": "Lähettäjä (SMTP)",
"show_item": "Näytä tuote",
"spam_score": "Pisteet",
"subj": "Aihe",
diff --git a/data/web/lang/lang.lv.json b/data/web/lang/lang.lv.json
index 28b93c6c..02e9b521 100644
--- a/data/web/lang/lang.lv.json
+++ b/data/web/lang/lang.lv.json
@@ -388,7 +388,7 @@
"release_body": "Šim ziņojumam mēs esam pievienojuši jūsu ziņojumu kā eml failu.",
"release_subject": "Potenciāli kaitīgs karantīnas vienums %s",
"remove": "Noņemt",
- "sender": "Sūtītājs",
+ "sender": "Sūtītājs (SMTP)",
"show_item": "Parādīt vienumus",
"subj": "Priekšmets",
"text_from_html_content": "Saturs (konvertēts html)",
diff --git a/data/web/lang/lang.nl.json b/data/web/lang/lang.nl.json
index edcd2fb9..e668eb6c 100644
--- a/data/web/lang/lang.nl.json
+++ b/data/web/lang/lang.nl.json
@@ -753,7 +753,7 @@
"release_subject": "Mogelijk schadelijk quarantaine-item %s",
"remove": "Verwijder",
"rspamd_result": "Rspamd-resultaat",
- "sender": "Afzender",
+ "sender": "Afzender (SMTP)",
"show_item": "Toon item",
"spam_score": "Score",
"subj": "Onderwerp",
diff --git a/data/web/lang/lang.ro.json b/data/web/lang/lang.ro.json
index f2eab8ca..06cf0de9 100644
--- a/data/web/lang/lang.ro.json
+++ b/data/web/lang/lang.ro.json
@@ -757,7 +757,7 @@
"release_subject": "Element în carantină potențial dăunător %s",
"remove": "Elimină",
"rspamd_result": "Rezultat Rspamd",
- "sender": "Expeditor",
+ "sender": "Expeditor (SMTP)",
"show_item": "Afișează elementul",
"spam_score": "Scor",
"subj": "Subiect",
diff --git a/data/web/lang/lang.ru.json b/data/web/lang/lang.ru.json
index 8b15ac58..d83efca2 100644
--- a/data/web/lang/lang.ru.json
+++ b/data/web/lang/lang.ru.json
@@ -759,7 +759,7 @@
"release_subject": "Потенциально опасное письмо %s",
"remove": "Удалить",
"rspamd_result": "Результат Rspamd",
- "sender": "Отправитель",
+ "sender": "Отправитель (SMTP)",
"show_item": "Показать",
"spam_score": "Оценка",
"subj": "Тема письма",
diff --git a/data/web/lang/lang.sk.json b/data/web/lang/lang.sk.json
index b023fe19..c74fa1ec 100644
--- a/data/web/lang/lang.sk.json
+++ b/data/web/lang/lang.sk.json
@@ -750,7 +750,7 @@
"release_subject": "Potenciálne nebezpečná položka v karanténne %s",
"remove": "Odstrániť",
"rspamd_result": "Rspamd výsledok",
- "sender": "Odosielateľ",
+ "sender": "Odosielateľ (SMTP)",
"show_item": "Ukázať súbor",
"spam_score": "Výsledok",
"subj": "Predmet",
diff --git a/data/web/lang/lang.sv.json b/data/web/lang/lang.sv.json
index bbe4015a..ac29ecee 100644
--- a/data/web/lang/lang.sv.json
+++ b/data/web/lang/lang.sv.json
@@ -757,7 +757,7 @@
"release_subject": "Potentiellt skadlig karantänsmeddelande %s",
"remove": "Ta bort",
"rspamd_result": "Rspamd resultat",
- "sender": "Avsändare",
+ "sender": "Avsändare (SMTP)",
"show_item": "Visa objekt",
"spam_score": "Betyg",
"subj": "Ämne",
diff --git a/data/web/modals/quarantine.php b/data/web/modals/quarantine.php
index d907aba7..2ec40b85 100644
--- a/data/web/modals/quarantine.php
+++ b/data/web/modals/quarantine.php
@@ -26,6 +26,14 @@ if (!isset($_SESSION['mailcow_cc_role'])) {
<label for="qid_detail_recipients"><h4><?=$lang['quarantine']['recipients'];?>:</h4></label>
<p id="qid_detail_recipients"></p>
</div>
+ <div class="form-group">
+ <label for="qid_detail_hfrom"><h4><?=$lang['quarantine']['sender_header'];?>:</h4></label>
+ <p><span class="mail-address-item" id="qid_detail_hfrom"></span></p>
+ </div>
+ <div class="form-group">
+ <label for="qid_detail_efrom"><h4><?=$lang['quarantine']['sender'];?>:</h4></label>
+ <p><span class="mail-address-item" id="qid_detail_efrom"></span></p>
+ </div>
<div class="form-group">
<label for="qid_detail_text"><h4><?=$lang['quarantine']['text_plain_content'];?>:</h4></label>
<pre id="qid_detail_text"></pre>
@@ -53,6 +61,9 @@ if (!isset($_SESSION['mailcow_cc_role'])) {
<li role="separator" class="divider"></li>
<li><a data-id="qitems_single" data-item="" onclick="window.open('/inc/ajax/qitem_details.php?id=' + $(this).data('item') + '&eml', '_blank')" href="#"><?=$lang['quarantine']['download_eml'];?></a></li>
<li role="separator" class="divider"></li>
+ <li><a data-id="qitems_single" data-item="" onclick="window.open('/inc/ajax/qitem_details.php?id=' + $(this).data('item') + '&quick_release', '_blank')" href="#"><?=$lang['quarantine']['quick_release_link'];?></a></li>
+ <li><a data-id="qitems_single" data-item="" onclick="window.open('/inc/ajax/qitem_details.php?id=' + $(this).data('item') + '&quick_delete', '_blank')" href="#"><?=$lang['quarantine']['quick_delete_link'];?></a></li>
+ <li role="separator" class="divider"></li>
<li><a data-action="delete_selected" data-id="qitems_single" data-item="" data-api-url='delete/qitem' href="#"><?=$lang['quarantine']['remove'];?></a></li>
</ul>
</div>
diff --git a/data/web/qhandler.php b/data/web/qhandler.php
index fd4dc235..91fcd4af 100644
--- a/data/web/qhandler.php
+++ b/data/web/qhandler.php
@@ -1,6 +1,10 @@
<?php
session_start();
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
+if (quarantine('hash_details', $_GET['hash']) === false) {
+ header('Location: /admin');
+ exit();
+}
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/header.inc.php';
if (preg_match("/^([a-f0-9]{64})$/", $_POST['quick_release']) || preg_match("/^([a-f0-9]{64})$/", $_POST['quick_delete'])) {
?>
@@ -29,7 +33,29 @@ elseif (in_array($_GET['action'], array('release', 'delete'))) {
<div class="panel panel-default">
<div class="panel-heading"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> <?= $lang['header']['quarantine']; ?></div>
<div class="panel-body">
- <legend><?=$lang['quarantine']['release'];?></legend>
+ <legend data-hash="<?=$_GET['hash'];?>"><?=$lang['quarantine']['release'];?></legend>
+ <div id="qid_error" style="display:none" class="alert alert-danger"></div>
+ <div class="form-group">
+ <label for="qid_detail_symbols"><h4><?=$lang['quarantine']['rspamd_result'];?>:</h4></label>
+ <p><?=$lang['quarantine']['spam_score'];?>: <span id="qid_detail_score"></span></p>
+ <p id="qid_detail_symbols"></p>
+ </div>
+ <div class="form-group">
+ <label for="qid_detail_subj"><h4><?=$lang['quarantine']['subj'];?>:</h4></label>
+ <p id="qid_detail_subj"></p>
+ </div>
+ <div class="form-group">
+ <label for="qid_detail_hfrom"><h4><?=$lang['quarantine']['sender_header'];?>:</h4></label>
+ <p><span class="mail-address-item" id="qid_detail_hfrom"></span></p>
+ </div>
+ <div class="form-group">
+ <label for="qid_detail_efrom"><h4><?=$lang['quarantine']['sender'];?>:</h4></label>
+ <p><span class="mail-address-item" id="qid_detail_efrom"></span></p>
+ </div>
+ <div class="form-group">
+ <label for="qid_detail_recipients"><h4><?=$lang['quarantine']['recipients'];?>:</h4></label>
+ <p id="qid_detail_recipients"></p>
+ </div>
<form method="post" autofill="off">
<div class="form-group">
<button type="submit" class="btn btn-success" name="quick_release" value="<?=$_GET['hash'];?>"><?= $lang['tfa']['confirm']; ?></button>
@@ -49,7 +75,29 @@ elseif (in_array($_GET['action'], array('release', 'delete'))) {
<div class="panel panel-default">
<div class="panel-heading"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> <?= $lang['header']['quarantine']; ?></div>
<div class="panel-body">
- <legend><?=$lang['quarantine']['remove'];?></legend>
+ <legend data-hash="<?=$_GET['hash'];?>"><?=$lang['quarantine']['remove'];?></legend>
+ <div id="qid_error" style="display:none" class="alert alert-danger"></div>
+ <div class="form-group">
+ <label for="qid_detail_symbols"><h4><?=$lang['quarantine']['rspamd_result'];?>:</h4></label>
+ <p><?=$lang['quarantine']['spam_score'];?>: <span id="qid_detail_score"></span></p>
+ <p id="qid_detail_symbols"></p>
+ </div>
+ <div class="form-group">
+ <label for="qid_detail_subj"><h4><?=$lang['quarantine']['subj'];?>:</h4></label>
+ <p id="qid_detail_subj"></p>
+ </div>
+ <div class="form-group">
+ <label for="qid_detail_hfrom"><h4><?=$lang['quarantine']['sender_header'];?>:</h4></label>
+ <p><span class="mail-address-item" id="qid_detail_hfrom"></span></p>
+ </div>
+ <div class="form-group">
+ <label for="qid_detail_efrom"><h4><?=$lang['quarantine']['sender'];?>:</h4></label>
+ <p><span class="mail-address-item" id="qid_detail_efrom"></span></p>
+ </div>
+ <div class="form-group">
+ <label for="qid_detail_recipients"><h4><?=$lang['quarantine']['recipients'];?>:</h4></label>
+ <p id="qid_detail_recipients"></p>
+ </div>
<form method="post" autofill="off">
<div class="form-group">
<button type="submit" class="btn btn-success" name="quick_delete" value="<?=$_GET['hash'];?>"><?= $lang['tfa']['confirm']; ?></button>
@@ -64,5 +112,6 @@ elseif (in_array($_GET['action'], array('release', 'delete'))) {
endif;
}
}
+$js_minifier->add('/web/js/site/qhandler.js');
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php';
?>