瀏覽代碼

Scripts to remove blocked domains from gnusocial/postactiv databases

Bob Mottram 8 年之前
父節點
當前提交
22fa505a3e
共有 4 個文件被更改,包括 93 次插入0 次删除
  1. 3
    0
      src/freedombone-app-gnusocial
  2. 4
    0
      src/freedombone-app-postactiv
  3. 11
    0
      src/freedombone-utils-database
  4. 75
    0
      src/freedombone-utils-gnusocialtools

+ 3
- 0
src/freedombone-app-gnusocial 查看文件

@@ -503,6 +503,8 @@ function remove_gnusocial {
503 503
     sed -i '/gnusocial/d' $COMPLETION_FILE
504 504
     remove_backup_database_local gnusocial
505 505
 
506
+    sed -i '/gnusocial-firewall/d' /etc/crontab
507
+
506 508
     function_check remove_ddns_domain
507 509
     remove_ddns_domain $GNUSOCIAL_DOMAIN_NAME
508 510
 }
@@ -761,6 +763,7 @@ function install_gnusocial_main {
761 763
     ${PROJECT_NAME}-addemail -u $MY_USERNAME -e "noreply@$GNUSOCIAL_DOMAIN_NAME" -g gnusocial --public no
762 764
 
763 765
     ${PROJECT_NAME}-pass -u $MY_USERNAME -a gnusocial -p "$GNUSOCIAL_ADMIN_PASSWORD"
766
+    gnusocial_block_domain_script gnusocial
764 767
 
765 768
     set_completion_param "gnusocial domain" "$GNUSOCIAL_DOMAIN_NAME"
766 769
 

+ 4
- 0
src/freedombone-app-postactiv 查看文件

@@ -496,6 +496,8 @@ function remove_postactiv {
496 496
     sed -i '/postactiv/d' $COMPLETION_FILE
497 497
     remove_backup_database_local postactiv
498 498
 
499
+    sed -i '/postactiv-firewall/d' /etc/crontab
500
+
499 501
     function_check remove_ddns_domain
500 502
     remove_ddns_domain $POSTACTIV_DOMAIN_NAME
501 503
 }
@@ -758,6 +760,8 @@ function install_postactiv_main {
758 760
 
759 761
     ${PROJECT_NAME}-pass -u $MY_USERNAME -a postactiv -p "$POSTACTIV_ADMIN_PASSWORD"
760 762
 
763
+    gnusocial_block_domain_script postactiv
764
+
761 765
     set_completion_param "postactiv domain" "$POSTACTIV_DOMAIN_NAME"
762 766
 
763 767
     install_completed postactiv_main

+ 11
- 0
src/freedombone-utils-database 查看文件

@@ -275,6 +275,17 @@ function run_query {
275 275
     mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name
276 276
 }
277 277
 
278
+function run_query_with_output {
279
+    database_name=$1
280
+    database_query=$2
281
+    output=$(mysql -u root --password="$MARIADB_PASSWORD" << EOF
282
+use $database_name;
283
+$database_query
284
+EOF
285
+)
286
+    echo "$output"
287
+}
288
+
278 289
 function drop_database {
279 290
     database_name=$1
280 291
     get_mariadb_password

+ 75
- 0
src/freedombone-utils-gnusocialtools 查看文件

@@ -327,6 +327,81 @@ function gnusocial_hourly_script {
327 327
     chmod +x /etc/cron.hourly/${gnusocial_type}-daemons
328 328
 }
329 329
 
330
+function gnusocial_block_domain_script {
331
+    database_name=$1
332
+
333
+    echo '#!/bin/bash' > /usr/bin/gnusocial-delete-domain
334
+    echo '' >> /usr/bin/gnusocial-delete-domain
335
+    echo 'database_name=$1' >> /usr/bin/gnusocial-delete-domain
336
+    echo 'remove_domain=$2' >> /usr/bin/gnusocial-delete-domain
337
+    echo "MARIADB_PASSWORD=\$(${PROJECT_NAME}-pass -u root -a mariadb)" >> /usr/bin/gnusocial-delete-domain
338
+    echo '' >> /usr/bin/gnusocial-delete-domain
339
+    echo 'if [ ${#remove_domain} -lt 2 ]; then' >> /usr/bin/gnusocial-delete-domain
340
+    echo '    echo $"No domain was specified"' >> /usr/bin/gnusocial-delete-domain
341
+    echo '    exit 1' >> /usr/bin/gnusocial-delete-domain
342
+    echo 'fi' >> /usr/bin/gnusocial-delete-domain
343
+    echo '' >> /usr/bin/gnusocial-delete-domain
344
+    echo 'if [[ "$remove_domain" != *"."* ]]; then' >> /usr/bin/gnusocial-delete-domain
345
+    echo '    echo $"This doesnt look like a domain"' >> /usr/bin/gnusocial-delete-domain
346
+    echo '    exit 2' >> /usr/bin/gnusocial-delete-domain
347
+    echo 'fi' >> /usr/bin/gnusocial-delete-domain
348
+    echo '' >> /usr/bin/gnusocial-delete-domain
349
+    echo 'if [ ${#database_name} -lt 2 ]; then' >> /usr/bin/gnusocial-delete-domain
350
+    echo '    echo $"No database was specified"' >> /usr/bin/gnusocial-delete-domain
351
+    echo '    exit 3' >> /usr/bin/gnusocial-delete-domain
352
+    echo 'fi' >> /usr/bin/gnusocial-delete-domain
353
+    echo '' >> /usr/bin/gnusocial-delete-domain
354
+    echo "database_query=\"select profile.id from profile where profileurl like '%\${remove_domain}%';\"" >> /usr/bin/gnusocial-delete-domain
355
+    echo 'declare -a ids=$(mysql -u root --password="$MARIADB_PASSWORD" << EOF' >> /usr/bin/gnusocial-delete-domain
356
+    echo 'use $database_name;' >> /usr/bin/gnusocial-delete-domain
357
+    echo '$database_query' >> /usr/bin/gnusocial-delete-domain
358
+    echo 'EOF' >> /usr/bin/gnusocial-delete-domain
359
+    echo ')' >> /usr/bin/gnusocial-delete-domain
360
+    echo '' >> /usr/bin/gnusocial-delete-domain
361
+    echo 'ctr=0' >> /usr/bin/gnusocial-delete-domain
362
+    echo 'for id in $ids' >> /usr/bin/gnusocial-delete-domain
363
+    echo 'do' >> /usr/bin/gnusocial-delete-domain
364
+    echo '    if [ $ctr -gt 0 ]; then' >> /usr/bin/gnusocial-delete-domain
365
+    echo '        echo "Removing user ID $id on $remove_domain"' >> /usr/bin/gnusocial-delete-domain
366
+    echo '' >> /usr/bin/gnusocial-delete-domain
367
+    echo "        database_query=\"delete from conversation where uri like \"%\${remove_domain}%';\"" >> /usr/bin/gnusocial-delete-domain
368
+    echo '        mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-domain
369
+    echo '' >> /usr/bin/gnusocial-delete-domain
370
+    echo '        database_query="delete from reply where profile_id=${id};"' >> /usr/bin/gnusocial-delete-domain
371
+    echo '        mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-domain
372
+    echo '' >> /usr/bin/gnusocial-delete-domain
373
+    echo '        database_query="delete from reply where replied_id=${id};"' >> /usr/bin/gnusocial-delete-domain
374
+    echo '        mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-domain
375
+    echo '' >> /usr/bin/gnusocial-delete-domain
376
+    echo '        database_query="delete from notice where profile_id=${id};"' >> /usr/bin/gnusocial-delete-domain
377
+    echo '        mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-domain
378
+    echo '' >> /usr/bin/gnusocial-delete-domain
379
+    echo '        database_query="delete from profile where id=${id};"' >> /usr/bin/gnusocial-delete-domain
380
+    echo '        mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-domain
381
+    echo '' >> /usr/bin/gnusocial-delete-domain
382
+    echo '        database_query="delete from user where id=${id};"' >> /usr/bin/gnusocial-delete-domain
383
+    echo '        mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-domain
384
+    echo '    fi' >> /usr/bin/gnusocial-delete-domain
385
+    echo '    ctr=$((ctr + 1))' >> /usr/bin/gnusocial-delete-domain
386
+    echo 'done' >> /usr/bin/gnusocial-delete-domain
387
+    chmod +x /usr/bin/gnusocial-delete-domain
388
+
389
+    echo '#!/bin/bash' > /usr/bin/${database_name}-firewall
390
+    echo '' >> /usr/bin/${database_name}-firewall
391
+    echo "PROJECT_NAME=$PROJECT_NAME" >> /usr/bin/${database_name}-firewall
392
+    echo "database_name=$database_name" >> /usr/bin/${database_name}-firewall
393
+    echo 'FIREWALL_DOMAINS=$HOME/${PROJECT_NAME}-firewall-domains.cfg' >> /usr/bin/${database_name}-firewall
394
+    echo '' >> /usr/bin/${database_name}-firewall
395
+    echo 'while read block; do' >> /usr/bin/${database_name}-firewall
396
+    echo '    /usr/bin/gnusocial-delete-domain "$database_name" "$block"' >> /usr/bin/${database_name}-firewall
397
+    echo 'done <$FIREWALL_DOMAINS' >> /usr/bin/${database_name}-firewall
398
+    chmod +x /usr/bin/${database_name}-firewall
399
+
400
+    if ! grep -q "${database_name}-firewall" /etc/crontab; then
401
+        echo "*/1            * *   *   *   root /usr/bin/${database_name}-firewall" >> /etc/crontab
402
+    fi
403
+}
404
+
330 405
 function expire_gnusocial_posts {
331 406
     domain_name=$1
332 407
     gnusocial_type=$2