This is an automated email from the ASF dual-hosted git repository. humbedooh pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-ponymail-foal.git
commit 1a1f2650f0046059bef1170648b99466d91a85b8 Author: Daniel Gruno <[email protected]> AuthorDate: Wed Mar 31 14:01:10 2021 +0200 regenerate --- webui/js/ponymail.js | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/webui/js/ponymail.js b/webui/js/ponymail.js index a5e6d98..23c1624 100644 --- a/webui/js/ponymail.js +++ b/webui/js/ponymail.js @@ -2428,6 +2428,9 @@ function listview_threaded_element(thread, idx) { ******************************************/ let admin_current_email = null; +let audit_entries = [] +let audit_page = 0; +let audit_size = 30; async function POST(url, formdata, state) { const resp = await fetch(url, { @@ -2564,6 +2567,61 @@ function admin_email_preview(stats, json) { div.inject(new HTML('small', {}, "Emails that are removed may still be recovered by the base system administrator. For complete expungement, please contact the system administrator.")) } +function admin_audit_view(state, json) { + let headers = ['Date', 'Author','Remote','Action','Target', 'Log']; + let cp = document.getElementById("panel"); + let div = document.getElementById('auditlog_entries'); + if (!div) { + div = new HTML('div', { id: "auditlog", style: { margin: '5px'}}); + cp.inject(div); + div.inject(new HTML('h1', {}, "Audit log:")); + } + let table = document.getElementById('auditlog_entries'); + if (json.entries && json.entries.length > 0 || table) { + if (!table) { + table = new HTML('table', {border: "1", id: "auditlog_entries", class:"auditlog_entries"}); + let trh = new HTML('tr'); + for (let i = 0; i < headers.length; i++) { + let th = new HTML('th', {}, headers[i] + ":"); + trh.inject(th); + } + table.inject(trh) + div.inject(table); + let btn = new HTML('button', {onclick: "admin_audit_next();"}, "Load more entries"); + div.inject(btn); + } + for (let i = 0; i < json.entries.length; i++) { + let entry = json.entries[i]; + let tr = new HTML('tr', {class: "auditlog_entry"}); + for (let i = 0; i < headers.length; i++) { + let key = headers[i].toLowerCase(); + let value = entry[key]; + if (key == 'target') { + value = new HTML('a', {href: "/admin/" +value}, value); + } + if (key == 'action') { + let action_colors = { + edit: 'blue', + delete: 'red', + default: 'black' + }; + value = new HTML('spam', {style: {color: action_colors[value] ? action_colors[value] : action_colors['default']}}, value); + } + let th = new HTML('td', {}, value); + tr.inject(th); + } + table.inject(tr); + } + } else { + div.inject("Audit log is empty"); + } +} + +function admin_audit_next() { + audit_page++; + GET('%sapi/mgmt.json?action=log&page=%u&size=%u'.format(apiURL, audit_page, audit_size), admin_audit_view, null); +} + function admin_init() { let mid = location.href.split('/').pop(); // Specific email/list handling? @@ -2576,6 +2634,8 @@ function admin_init() { else { GET('%sapi/email.json?id=%s'.format(apiURL, mid), admin_email_preview, null); } + } else { // View audit log + GET('%sapi/mgmt.json?action=log&page=%s&size=%u'.format(apiURL, audit_page, audit_size), admin_audit_view, null); } }
