You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ponymail.apache.org by hu...@apache.org on 2021/09/27 18:50:07 UTC

[incubator-ponymail-foal] 02/05: Allow for hide/unhide

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 61b1865dcbb810b2f9e9b854d0bd2ba3d4b3ac3f
Author: Daniel Gruno <hu...@apache.org>
AuthorDate: Mon Sep 27 13:44:21 2021 -0500

    Allow for hide/unhide
---
 server/endpoints/mgmt.py | 38 ++++++++++++++++++++++++++++++++++----
 1 file changed, 34 insertions(+), 4 deletions(-)

diff --git a/server/endpoints/mgmt.py b/server/endpoints/mgmt.py
index 3c761f5..b2ad597 100644
--- a/server/endpoints/mgmt.py
+++ b/server/endpoints/mgmt.py
@@ -42,13 +42,13 @@ async def process(
         numentries = int(indata.get("size", 50))
         page = int(indata.get("page", 0))
         out = []
-        async for entry in plugins.auditlog.view(session, page=page, num_entries=numentries, raw=True, filter=("edit", "delete",)):
+        async for entry in plugins.auditlog.view(session, page=page, num_entries=numentries, raw=True, filter=("edit","delete","hide","unhide")):
             out.append(entry)
         return {
             "entries": out
         }
 
-    # Deleting/hiding a document?
+    # Deleting a document?
     elif action == "delete":
         delcount = 0
         for doc in docs:
@@ -64,13 +64,43 @@ async def process(
                         index=session.database.dbs.source, id=email["dbid"],
                     )
                 else:  # Standard behavior: hide the email from everyone.
-                    await session.database.index(
-                        index=session.database.dbs.mbox, body=email, id=email["id"],
+                    await session.database.update(
+                        index=session.database.dbs.mbox, body={"doc": email}, id=email["id"],
                     )
                 lid = email.get("list_raw", "??")
                 await plugins.auditlog.add_entry(session, action="delete", target=doc, lid=lid, log=f"Removed email {doc} from {lid} archives")
                 delcount += 1
         return aiohttp.web.Response(headers={}, status=200, text=f"Removed {delcount} emails from archives.")
+    # Hiding one or more emails?
+    elif action == "hide":
+        hidecount = 0
+        for doc in docs:
+            assert isinstance(doc, str), "Document ID must be a string"
+            email = await plugins.messages.get_email(session, permalink=doc)
+            if email and isinstance(email, dict) and plugins.aaa.can_access_email(session, email):
+                email["deleted"] = True
+                await session.database.update(
+                    index=session.database.dbs.mbox, body={"doc": email}, id=email["id"],
+                )
+                lid = email.get("list_raw", "??")
+                await plugins.auditlog.add_entry(session, action="hide", target=doc, lid=lid, log=f"Hid email {doc} from {lid} archives")
+                hidecount += 1
+        return aiohttp.web.Response(headers={}, status=200, text=f"Hid {hidecount} emails from archives.")
+    # Exposing (unhiding) one or more emails?
+    elif action == "unhide":
+        hidecount = 0
+        for doc in docs:
+            assert isinstance(doc, str), "Document ID must be a string"
+            email = await plugins.messages.get_email(session, permalink=doc)
+            if email and isinstance(email, dict) and plugins.aaa.can_access_email(session, email):
+                email["deleted"] = False
+                await session.database.update(
+                    index=session.database.dbs.mbox, body={"doc": email}, id=email["id"],
+                )
+                lid = email.get("list_raw", "??")
+                await plugins.auditlog.add_entry(session, action="unhide", target=doc, lid=lid, log=f"Unhid email {doc} from {lid} archives")
+                hidecount += 1
+        return aiohttp.web.Response(headers={}, status=200, text=f"Unhid {hidecount} emails from archives.")
     # Editing an email in place
     elif action == "edit":
         new_from = indata.get("from")