From bdf82b78257bb330300e5445ac1cd896c8894ce1 Mon Sep 17 00:00:00 2001
From: Romain de Laage <romain.delaage@rdelaage.ovh>
Date: Wed, 28 Oct 2020 10:32:17 +0100
Subject: [PATCH] [CodiMD] Add a script to delete pads

---
 pica-codimd/Dockerfile         |  7 ++++--
 pica-codimd/deleteOldPad.py    | 41 ++++++++++++++++++++++++++++++++++
 pica-codimd/docker-compose.yml |  3 +++
 3 files changed, 49 insertions(+), 2 deletions(-)
 create mode 100755 pica-codimd/deleteOldPad.py

diff --git a/pica-codimd/Dockerfile b/pica-codimd/Dockerfile
index 805d68a8..fe3ce09c 100644
--- a/pica-codimd/Dockerfile
+++ b/pica-codimd/Dockerfile
@@ -23,10 +23,11 @@ RUN addgroup --gid 5010 codimd && \
     adduser -u 5010 -G codimd -D codimd && \
     mkdir /home/$USER_NAME/.npm && \
     echo "prefix=/home/codimd/.npm/" > /home/$USER_NAME/.npmrc && \
-    mkdir -p /home/codimd/app && \
+    mkdir -p /home/codimd/app/deletedPads && \
     chown -R codimd:codimd /home/codimd && \
     # Git needed so NPM can clone packages and Python for node-gyp
-    apk add --no-cache bash git python && \
+    apk add --no-cache bash git python3-dev py3-pip gcc postgresql-dev musl-dev && \
+    pip3 install psycopg2 && \
     wget https://github.com/hackmdio/portchecker/releases/download/${PORTCHECKER_VERSION}/portchecker-linux-amd64.tar.gz && \
     tar xvf portchecker-linux-amd64.tar.gz -C /usr/local/bin && \
     mv /usr/local/bin/portchecker-linux-amd64 /usr/local/bin/pcheck && \
@@ -38,6 +39,8 @@ WORKDIR /home/codimd/app
 
 COPY --chown=5010:5010 --from=BUILD /opt/codimd .
 
+COPY --chown=5010:5010 deleteOldPad.py .
+
 RUN npm install --production && npm cache clean --force && rm -rf /tmp/{core-js-banners,phantomjs}
 
 COPY entrypoint.sh .
diff --git a/pica-codimd/deleteOldPad.py b/pica-codimd/deleteOldPad.py
new file mode 100755
index 00000000..363f5297
--- /dev/null
+++ b/pica-codimd/deleteOldPad.py
@@ -0,0 +1,41 @@
+#! /usr/bin/python3
+
+import psycopg2
+import sys
+from os import environ
+
+INTERVAL = environ['OLD_INTERVAL']
+USER = environ['POSTGRES_USER']
+DATABASE = environ['POSTGRES_DB']
+PASSWORD = environ['POSTGRES_PASSWORD']
+HOST = ['DB_HOST']
+PORT = ['DB_PORT']
+
+print("===== Begin of deleteOldPad job =====")
+
+try:
+    db = psycopg2.connect("user = " + USER + " dbname = " +DATABASE + " password = " + PASSWORD + " host = " + HOST + " port = " + PORT)
+except:
+    sys.exit("deleteOldPad : Unable to connect database")
+
+with db :
+    with db.cursor() as cur:
+        #Make a backup of old pads in deletedPads
+        try:
+            cur.execute("SELECT \"Notes\".\"id\", \"Notes\".\"content\" FROM \"Notes\" WHERE \"Notes\".\"updatedAt\" < NOW() - interval %s", (INTERVAL,))
+        except:
+            sys.exit("deleteOldPad : unable to select old pads")
+        for oldPad in cur.fetchall():
+            with open("deletedPads/" + oldPad[0] + '.txt', "w") as f:
+                f.write(oldPad[1])
+
+        #Delete the old pads
+        try:
+            cur.execute("DELETE FROM \"Notes\" WHERE \"Notes\".\"updatedAt\" < NOW() - interval %s", (INTERVAL,))
+        except:
+            sys.exit("deleteOldPad: unable to delete old pads")
+        print("deleteOldPad : Deleted old pad")
+
+db.close()
+
+print("===== End of deleteOldPad job =====")
diff --git a/pica-codimd/docker-compose.yml b/pica-codimd/docker-compose.yml
index 16375fbb..37981b02 100644
--- a/pica-codimd/docker-compose.yml
+++ b/pica-codimd/docker-compose.yml
@@ -46,6 +46,9 @@ services:
       CMD_CSP_ENABLE: "false"
       CMD_MATTERMOST_BASEURL: https://team.picasoft.net
       CMD_DEFAULT_PERMISSION: freely
+      OLD_INTERVAL: "2 years"
+      DB_HOST: "codimd-db"
+      DB_PORT: 5432
     networks:
       - proxy
       - codimd
-- 
GitLab