浏览代码

Expiry of pleroma posts

Bob Mottram 7 年前
父节点
当前提交
05f195ac99
共有 1 个文件被更改,包括 74 次插入1 次删除
  1. 74
    1
      src/freedombone-app-pleroma

+ 74
- 1
src/freedombone-app-pleroma 查看文件

@@ -58,6 +58,7 @@ PLEROMA_TITLE='Pleroma Server'
58 58
 
59 59
 # Number of months after which posts expire
60 60
 PLEROMA_EXPIRE_MONTHS=3
61
+pleroma_expire_posts_script=/usr/bin/pleroma-expire-posts
61 62
 
62 63
 pleroma_variables=(ONION_ONLY
63 64
                    PLEROMA_DOMAIN_NAME
@@ -70,6 +71,69 @@ pleroma_variables=(ONION_ONLY
70 71
                    MY_EMAIL_ADDRESS
71 72
                    MY_USERNAME)
72 73
 
74
+function expire_pleroma_posts {
75
+    domain_name=$1
76
+    expire_months=$3
77
+
78
+    if [ ! $expire_months ]; then
79
+        expire_months=3
80
+    fi
81
+
82
+    expire_days=$((expire_months * 30))
83
+
84
+    # files are what take up most of the backup time, so don't keep them for very long
85
+    expire_days_files=7
86
+
87
+    # To prevent the database size from growing endlessly this script expires posts
88
+    # after a number of months
89
+    if [ ! -d /etc/pleroma ]; then
90
+        return
91
+    fi
92
+
93
+    echo '<?php' > $pleroma_expire_posts_script
94
+    echo '' >> $pleroma_expire_posts_script
95
+    echo "\$oldate=date((\"Y-m-d\"), strtotime(\"-${expire_months} months\"));" >> $pleroma_expire_posts_script
96
+    echo '$username="root";' >> $pleroma_expire_posts_script
97
+    echo "\$password=shell_exec('${PROJECT_NAME}-pass -u root -a postgresql');" >> $pleroma_expire_posts_script
98
+    echo "\$database=\"pleroma\";" >> $pleroma_expire_posts_script
99
+    echo '' >> $pleroma_expire_posts_script
100
+    echo 'if (!$link = pg_connect("host=localhost dbname=pleroma user=$username password=$password")) {' >> $pleroma_expire_posts_script
101
+    echo '    echo "Could not connect to postgresql";' >> $pleroma_expire_posts_script
102
+    echo '    exit;' >> $pleroma_expire_posts_script
103
+    echo '}' >> $pleroma_expire_posts_script
104
+    echo '' >> $pleroma_expire_posts_script
105
+    echo "\$notice_query=\"DELETE FROM notifications WHERE inserted_at <= '\$oldate 01:01:01'\";" >> $pleroma_expire_posts_script
106
+    echo 'pg_exec($link, $notice_query);' >> $pleroma_expire_posts_script
107
+    echo '$rowaff1=pg_affected_rows($link);' >> $pleroma_expire_posts_script
108
+    echo 'pg_close($link);' >> $pleroma_expire_posts_script
109
+    echo '' >> $pleroma_expire_posts_script
110
+    echo "\$objects_query=\"DELETE FROM objects WHERE inserted_at <= '\$oldate 01:01:01'\";" >> $pleroma_expire_posts_script
111
+    echo 'pg_exec($link, $objects_query);' >> $pleroma_expire_posts_script
112
+    echo '$rowaff2=pg_affected_rows($link);' >> $pleroma_expire_posts_script
113
+    echo 'pg_close($link);' >> $pleroma_expire_posts_script
114
+    echo '' >> $pleroma_expire_posts_script
115
+    echo -n "echo \"Expire pleroma posts: " >> $pleroma_expire_posts_script
116
+    echo '$rowaff1 notifications and $rowaff2 objects deleted from database.\n";' >> $pleroma_expire_posts_script
117
+    chmod +x $pleroma_expire_posts_script
118
+
119
+    pleroma_expire_script=/etc/cron.daily/pleroma-expire
120
+    echo '#!/bin/bash' > $pleroma_expire_script
121
+    echo "find /etc/pleroma/uploads/* -mtime +${expire_days_files} -exec rm -rf {} +" >> $pleroma_expire_script
122
+    echo "/usr/bin/php $pleroma_expire_posts_script" >> $pleroma_expire_script
123
+    chmod +x $pleroma_expire_script
124
+
125
+    # remove any old cron job
126
+    if grep -q "pleroma-expire" /etc/crontab; then
127
+        sed -i "/pleroma-expire/d" /etc/crontab
128
+        rm /usr/bin/pleroma-expire
129
+    fi
130
+
131
+    # remove old expire script
132
+    if [ -f /etc/cron.weekly/clear-pleroma-database ]; then
133
+        rm /etc/cron.weekly/clear-pleroma-database
134
+    fi
135
+}
136
+
73 137
 function pleroma_recompile {
74 138
     # necessary after parameter changes
75 139
     chown -R pleroma:pleroma $PLEROMA_DIR
@@ -353,6 +417,7 @@ function pleroma_set_title {
353 417
 
354 418
 function pleroma_set_expire_months {
355 419
     PLEROMA_DOMAIN_NAME=$(get_completion_param "pleroma domain")
420
+    read_config_param "PLEROMA_DOMAIN_NAME"
356 421
     read_config_param "PLEROMA_EXPIRE_MONTHS"
357 422
 
358 423
     data=$(tempfile 2>/dev/null)
@@ -378,7 +443,7 @@ function pleroma_set_expire_months {
378 443
                 PLEROMA_EXPIRE_MONTHS=$new_expiry_months
379 444
                 write_config_param "PLEROMA_EXPIRE_MONTHS" "$PLEROMA_EXPIRE_MONTHS"
380 445
 
381
-                # TODO
446
+                expire_pleroma_posts $PLEROMA_DOMAIN_NAME $PLEROMA_EXPIRE_MONTHS
382 447
 
383 448
                 dialog --title $"Set Pleroma post expiry period" \
384 449
                        --msgbox $"Expiry period set to $PLEROMA_EXPIRE_MONTHS months" 6 60
@@ -499,6 +564,7 @@ function pleroma_add_emoji {
499 564
 }
500 565
 
501 566
 function configure_interactive_pleroma {
567
+    read_config_param PLEROMA_DOMAIN_NAME
502 568
     read_config_param PLEROMA_EXPIRE_MONTHS
503 569
     while true
504 570
     do
@@ -531,6 +597,11 @@ function configure_interactive_pleroma {
531 597
 }
532 598
 
533 599
 function upgrade_pleroma {
600
+    read_config_param PLEROMA_DOMAIN_NAME
601
+    if [ ! -f $pleroma_expire_posts_script ]; then
602
+        expire_pleroma_posts $PLEROMA_DOMAIN_NAME $PLEROMA_EXPIRE_MONTHS
603
+    fi
604
+
534 605
     CURR_PLEROMA_COMMIT=$(get_completion_param "pleroma commit")
535 606
     if [[ "$CURR_PLEROMA_COMMIT" == "$PLEROMA_COMMIT" ]]; then
536 607
         return
@@ -542,6 +613,8 @@ function upgrade_pleroma {
542 613
 
543 614
     sudo -u pleroma mix deps.get
544 615
     pleroma_recompile
616
+
617
+    expire_pleroma_posts $PLEROMA_DOMAIN_NAME $PLEROMA_EXPIRE_MONTHS
545 618
 }
546 619
 
547 620
 function backup_local_pleroma {