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);
     }
 }
 

Reply via email to