From f483e4d4883efd7a2f2c410998dc067ef9fa04bf Mon Sep 17 00:00:00 2001
From: Bob Mottram <bob@freedombone.net>
Date: Thu, 27 Apr 2017 12:43:50 +0100
Subject: [PATCH] Remove gnusocial files associated with blocked domains or
 users

---
 src/freedombone-utils-gnusocialtools | 50 ++++++++++++++++++++++++++--
 1 file changed, 48 insertions(+), 2 deletions(-)

diff --git a/src/freedombone-utils-gnusocialtools b/src/freedombone-utils-gnusocialtools
index 89517329b..b091950f2 100755
--- a/src/freedombone-utils-gnusocialtools
+++ b/src/freedombone-utils-gnusocialtools
@@ -368,6 +368,7 @@ function gnusocial_block_user_script {
     echo '' >> /usr/bin/gnusocial-delete-user
     echo 'database_name=$1' >> /usr/bin/gnusocial-delete-user
     echo 'remove_user=$2' >> /usr/bin/gnusocial-delete-user
+    echo 'domain_name=$3' >> /usr/bin/gnusocial-delete-user
     echo 'MARIADB_PASSWORD=$(freedombone-pass -u root -a mariadb)' >> /usr/bin/gnusocial-delete-user
     echo '' >> /usr/bin/gnusocial-delete-user
     echo 'if [ ${#remove_user} -lt 2 ]; then' >> /usr/bin/gnusocial-delete-user
@@ -407,6 +408,27 @@ function gnusocial_block_user_script {
     echo '      database_query="delete from reply where replied_id=${id};"' >> /usr/bin/gnusocial-delete-user
     echo '      mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-user
     echo '' >> /usr/bin/gnusocial-delete-user
+    echo '      if [ $domain_name ]; then' >> /usr/bin/gnusocial-delete-user
+    echo '          database_query="select rendered from notice where profile_id=${id} and rendered like '"'"'%/file/%'"'"';"' >> /usr/bin/gnusocial-delete-user
+    echo '          declare -a stored_files=$(mysql -u root --password="$MARIADB_PASSWORD" << EOF' >> /usr/bin/gnusocial-delete-user
+    echo 'use $database_name;' >> /usr/bin/gnusocial-delete-user
+    echo '$database_query' >> /usr/bin/gnusocial-delete-user
+    echo 'EOF' >> /usr/bin/gnusocial-delete-user
+    echo ')' >> /usr/bin/gnusocial-delete-user
+    echo -n "          files_to_delete=\$(echo \"\$stored_files\" | " >> /usr/bin/gnusocial-delete-user
+    echo 'sed -n '"'"'s/.*href="\([^"]*\).*/\1/p'"'"' | awk -F '"'"'file/'"'"' '"'"'{print $2}'"'"')' >> /usr/bin/gnusocial-delete-user
+    echo '          filectr=0' >> /usr/bin/gnusocial-delete-user
+    echo '          for f in $files_to_delete' >> /usr/bin/gnusocial-delete-user
+    echo '          do' >> /usr/bin/gnusocial-delete-user
+    echo '              if [ $filectr -gt 0 ]; then' >> /usr/bin/gnusocial-delete-user
+    echo '                  if [ -f /var/www/${domain_name}/htdocs/file/${f} ]; then' >> /usr/bin/gnusocial-delete-user
+    echo '                      rm /var/www/${domain_name}/htdocs/file/${f}' >> /usr/bin/gnusocial-delete-user
+    echo '                  fi' >> /usr/bin/gnusocial-delete-user
+    echo '              fi' >> /usr/bin/gnusocial-delete-user
+    echo '              filectr=$((filectr + 1))' >> /usr/bin/gnusocial-delete-user
+    echo '          done' >> /usr/bin/gnusocial-delete-user
+    echo '      fi' >> /usr/bin/gnusocial-delete-user
+    echo '' >> /usr/bin/gnusocial-delete-user
     echo '      database_query="delete from notice where profile_id=${id};"' >> /usr/bin/gnusocial-delete-user
     echo '      mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-user
     echo '' >> /usr/bin/gnusocial-delete-user
@@ -423,11 +445,13 @@ function gnusocial_block_user_script {
 
 function gnusocial_block_domain_script {
     database_name=$1
+    gnusoc_domain=$2
 
     echo '#!/bin/bash' > /usr/bin/gnusocial-delete-domain
     echo '' >> /usr/bin/gnusocial-delete-domain
     echo 'database_name=$1' >> /usr/bin/gnusocial-delete-domain
     echo 'remove_domain=$2' >> /usr/bin/gnusocial-delete-domain
+    echo 'domain_name=$3' >> /usr/bin/gnusocial-delete-domain
     echo "MARIADB_PASSWORD=\$(${PROJECT_NAME}-pass -u root -a mariadb)" >> /usr/bin/gnusocial-delete-domain
     echo '' >> /usr/bin/gnusocial-delete-domain
     echo 'if [ ${#remove_domain} -lt 2 ]; then' >> /usr/bin/gnusocial-delete-domain
@@ -467,6 +491,27 @@ function gnusocial_block_domain_script {
     echo '        database_query="delete from reply where replied_id=${id};"' >> /usr/bin/gnusocial-delete-domain
     echo '        mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-domain
     echo '' >> /usr/bin/gnusocial-delete-domain
+    echo '        if [ $domain_name ]; then' >> /usr/bin/gnusocial-delete-domain
+    echo '          database_query="select rendered from notice where profile_id=${id} and rendered like '"'"'%/file/%'"'"';"' >> /usr/bin/gnusocial-delete-domain
+    echo '          declare -a stored_files=$(mysql -u root --password="$MARIADB_PASSWORD" << EOF' >> /usr/bin/gnusocial-delete-domain
+    echo 'use $database_name;' >> /usr/bin/gnusocial-delete-domain
+    echo '$database_query' >> /usr/bin/gnusocial-delete-domain
+    echo 'EOF' >> /usr/bin/gnusocial-delete-domain
+    echo ')' >> /usr/bin/gnusocial-delete-domain
+    echo -n "           files_to_delete=\$(echo \"\$stored_files\" | " >> /usr/bin/gnusocial-delete-domain
+    echo 'sed -n '"'"'s/.*href="\([^"]*\).*/\1/p'"'"' | awk -F '"'"'file/'"'"' '"'"'{print $2}'"'"')' >> /usr/bin/gnusocial-delete-domain
+    echo '            filectr=0' >> /usr/bin/gnusocial-delete-domain
+    echo '            for f in $files_to_delete' >> /usr/bin/gnusocial-delete-domain
+    echo '            do' >> /usr/bin/gnusocial-delete-domain
+    echo '                if [ $filectr -gt 0 ]; then' >> /usr/bin/gnusocial-delete-domain
+    echo '                    if [ -f /var/www/${domain_name}/htdocs/file/${f} ]; then' >> /usr/bin/gnusocial-delete-domain
+    echo '                        rm /var/www/${domain_name}/htdocs/file/${f}' >> /usr/bin/gnusocial-delete-domain
+    echo '                    fi' >> /usr/bin/gnusocial-delete-domain
+    echo '                fi' >> /usr/bin/gnusocial-delete-domain
+    echo '                filectr=$((filectr + 1))' >> /usr/bin/gnusocial-delete-domain
+    echo '            done' >> /usr/bin/gnusocial-delete-domain
+    echo '        fi' >> /usr/bin/gnusocial-delete-domain
+    echo '' >> /usr/bin/gnusocial-delete-domain
     echo '        database_query="delete from notice where profile_id=${id};"' >> /usr/bin/gnusocial-delete-domain
     echo '        mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-domain
     echo '' >> /usr/bin/gnusocial-delete-domain
@@ -483,14 +528,15 @@ function gnusocial_block_domain_script {
     echo '#!/bin/bash' > /usr/bin/${database_name}-firewall
     echo '' >> /usr/bin/${database_name}-firewall
     echo "PROJECT_NAME=$PROJECT_NAME" >> /usr/bin/${database_name}-firewall
+    echo "GNUSOCIAL_DOMAIN_NAME=$gnusoc_domain" >> /usr/bin/${database_name}-firewall
     echo "database_name=$database_name" >> /usr/bin/${database_name}-firewall
     echo 'FIREWALL_DOMAINS=$HOME/${PROJECT_NAME}-firewall-domains.cfg' >> /usr/bin/${database_name}-firewall
     echo '' >> /usr/bin/${database_name}-firewall
     echo 'while read block; do' >> /usr/bin/${database_name}-firewall
     echo '    if [[ "$block" != *"@"* ]]; then' >> /usr/bin/${database_name}-firewall
-    echo '        /usr/bin/gnusocial-delete-domain "$database_name" "$block"' >> /usr/bin/${database_name}-firewall
+    echo '        /usr/bin/gnusocial-delete-domain "$database_name" "$block" "$GNUSOCIAL_DOMAIN_NAME"' >> /usr/bin/${database_name}-firewall
     echo '    else' >> /usr/bin/${database_name}-firewall
-    echo '        /usr/bin/gnusocial-delete-user "$database_name" "$block"' >> /usr/bin/${database_name}-firewall
+    echo '        /usr/bin/gnusocial-delete-user "$database_name" "$block" "$GNUSOCIAL_DOMAIN_NAME"' >> /usr/bin/${database_name}-firewall
     echo '    fi' >> /usr/bin/${database_name}-firewall
     echo 'done <$FIREWALL_DOMAINS' >> /usr/bin/${database_name}-firewall
     chmod +x /usr/bin/${database_name}-firewall
-- 
GitLab