Newer
Older
#!/bin/bash
#
# .---. . .
# | | |
# |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
# | | (.-' (.-' ( | ( )| | | | )( )| | (.-'
# ' ' --' --' -' - -' ' ' -' -' -' ' - --'
#
# Freedom in the Cloud
#
# functions common to GNU Social server varieties
#
# License
# =======
#
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Qvitter upstream: https://git.gnu.io/h2p/Qvitter"
QVITTER_THEME_COMMIT='c6f09bda4e45be4290cf7409fa5efb4420538032'
PLEROMA_FRONTEND_REPO="https://gitgud.io/lambadalambda/pleroma-fe"
PLEROMA_FRONTEND_COMMIT='3b3bbaab822b553f514a62d20d679acc5ce4414a'
SHARINGS_REPO="http://github.com/bashrc/Sharings"
SHARINGS_COMMIT='0d30fe7d153c7ab44e8459970b8f2b5dec06e43c'
SHARINGS_THEME_REPO="http://github.com/bashrc/SharingsTheme"
SHARINGS_THEME_COMMIT='a46ef375d19e8ef6889653668a7e697b0ba2013c'
GNUSOCIAL_MARKDOWN_REPO="https://git.gnu.io/chimo/markdown.git"
GNUSOCIAL_MARKDOWN_COMMIT='03c53942f94b3376f0946e6e1fe566cc21ccf232'
# Stuff to be done after restoring from backup
function gnusocial_update_after_restore {
cd "/var/www/${gnusocial_domain}/htdocs" || exit 36865853
# Ensure that the database password is correct
MARIADB_PASSWORD=$("${PROJECT_NAME}-pass" -u root -a mariadb)
sed -i "s|\$config['db']['database'].*|\$config['db']['database'] = 'mysqli://root:${MARIADB_PASSWORD}@localhost/${gnusocial_variant}';|g" config.php
chmod g+w "/var/www/$gnusocial_domain/htdocs"
chmod a+w "/var/www/$gnusocial_domain/htdocs/avatar"
chmod a+w "/var/www/$gnusocial_domain/htdocs/file"
chown -R www-data:www-data "/var/www/$gnusocial_domain/htdocs"
chmod +x "/var/www/$gnusocial_domain/htdocs/scripts/maildaemon.php"
# This seems to be necessary to get the UI back
gnusocial_use_classic "$gnusocial_variant"
gnusocial_use_qvitter "$gnusocial_variant"
# start the daemons
su -c "sh scripts/startdaemons.sh" -s /bin/sh www-data
}
ext="$2"
if [ -d "/var/www/${domain_name}/htdocs/local/plugins/Qvitter/img" ]; then
if [ -f "bg_custom.${ext}" ]; then
cp "bg_custom.${ext}" "/var/www/${domain_name}/htdocs/local/plugins/Qvitter/img"
if ! grep -q "bg_custom.${ext}" "/var/www/${domain_name}/htdocs/config.php"; then
if grep -q 'sitebackground' "/var/www/${domain_name}/htdocs/config.php"; then
sed -i '/sitebackground/d' "/var/www/${domain_name}/htdocs/config.php"
echo "\$config['site']['qvitter']['sitebackground'] = 'img/bg_custom.${ext}';" >> "/var/www/${domain_name}/htdocs/config.php"
function pleroma_set_background_image_from_url {
basedir="$1"
domain_name="$2"
url="$3"
title="$4"
if [ ${#domain_name} -eq 0 ]; then
echo "1"
return
fi
ext="gif"
fi
fi
if [ ${#ext} -gt 0 ]; then
if [ -f "bg_custom.${ext}" ]; then
rm "bg_custom.${ext}"
wget "$url" -O "bg_custom.${ext}"
if [ ! -f "bg_custom.${ext}" ]; then
echo "$url"
echo $'Custom background image for pleroma could not be downloaded'
echo "1"
return
fi
if [ -d "$basedir/static" ]; then
cp "bg_custom.${ext}" "static/bg_custom.${ext}"
chown www-data:www-data "static/bg_custom.${ext}"
sed -i "s|\"background\":.*|\"background\": \"/static/bg_custom.${ext}\",|g" static/config.json
if [ -d priv/static/static ]; then
cp "bg_custom.${ext}" "priv/static/static/bg_custom.${ext}"
chown www-data:www-data "priv/static/static/bg_custom.${ext}"
sed -i "s|\"background\":.*|\"background\": \"/static/bg_custom.${ext}\",|g" priv/static/static/config.json
fi
if [[ "$basedir" != "$PLEROMA_DIR" ]]; then
qvitter_update_background "${domain_name}" "${ext}"
if [ -f "$basedir/static/logo.png" ]; then
if [ -f "$HOME/${PROJECT_NAME}/img/logo_fbone3.png" ]; then
cp "$HOME/${PROJECT_NAME}/img/logo_fbone3.png" "$basedir/static/logo.png"
if [ -d "$basedir/priv/static/static" ]; then
cp "$HOME/${PROJECT_NAME}/img/logo_fbone3.png" "$basedir/priv/static/static/logo.png"
if [ -f "/home/$MY_USERNAME/${PROJECT_NAME}/img/logo_fbone3.png" ]; then
cp "/home/$MY_USERNAME/${PROJECT_NAME}/img/logo_fbone3.png" "$basedir/static/logo.png"
if [ -d "$basedir/priv/static/static" ]; then
cp "/home/$MY_USERNAME/${PROJECT_NAME}/img/logo_fbone3.png" "$basedir/priv/static/static/logo.png"
fi
fi
fi
# customise the title
if [ -f "$basedir/static/config.json" ]; then
sed -i "s|\"name\":.*|\"name\": \"${title}\",|g" "$basedir/static/config.json"
if [ -f "$basedir/priv/static/static/config.json" ]; then
sed -i "s|\"name\":.*|\"name\": \"${title}\",|g" "$basedir/priv/static/static/config.json"
echo "0"
}
function install_qvitter {
# update to the next commit
function_check set_repo_commit
set_repo_commit "/var/www/${domain_name}/htdocs/local/plugins/Qvitter" "${app_name} theme commit" "$QVITTER_THEME_COMMIT" "$QVITTER_THEME_REPO"
if [ -f "/var/www/${domain_name}/htdocs/local/plugins/Qvitter/img/sprite.png" ]; then
if [ -f "$HOME/${PROJECT_NAME}/img/logo_fbone3.png" ]; then
cp "$HOME/${PROJECT_NAME}/img/logo_fbone3.png" "/var/www/${domain_name}/htdocs/local/plugins/Qvitter/img/sprite.png"
if [ -f "/home/$MY_USERNAME/${PROJECT_NAME}/img/logo_fbone3.png" ]; then
cp "/home/$MY_USERNAME/${PROJECT_NAME}/img/logo_fbone3.png" "/var/www/${domain_name}/htdocs/local/plugins/Qvitter/img/sprite.png"
fi
fi
fi
if [[ $(app_is_installed "${app_name}_theme") == "1" ]]; then
return
fi
apt-get -yq install wget
if [ ! -d "/var/www/${domain_name}/htdocs/local/plugins" ]; then
mkdir -p "/var/www/${domain_name}/htdocs/local/plugins"
cd "/var/www/${domain_name}/htdocs/local/plugins" || exit 64284632
if [ -d /repos/qvitter ]; then
mkdir Qvitter
git pull
else
function_check git_clone
if [ ! -d "/var/www/${domain_name}/htdocs/local/plugins/Qvitter" ]; then
echo $'Qvitter repo was not installed'
exit 835638
fi
cd "/var/www/${domain_name}/htdocs/local/plugins/Qvitter" || exit 7824245
git checkout "$QVITTER_THEME_COMMIT" -b "$QVITTER_THEME_COMMIT"
config_file="/var/www/${domain_name}/htdocs/config.php"
if ! grep -q "addPlugin('Qvitter')" "$config_file"; then
{ echo "";
echo "// Qvitter settings";
echo "addPlugin('Qvitter');";
echo "\$config['site']['qvitter']['enabledbydefault'] = true;";
echo "\$config['site']['qvitter']['defaultbackgroundcolor'] = '#f4f4f4';";
echo "\$config['site']['qvitter']['defaultlinkcolor'] = '#0084B4';";
echo "\$config['site']['qvitter']['timebetweenpolling'] = 30000; // 30 secs"; } >> "$config_file"
echo "\$config['site']['qvitter']['urlshortenerapiurl'] = 'http://qttr.at/shortener.php';" >> "$config_file"
echo "\$config['site']['qvitter']['urlshortenersignature'] = 'b6afeec983';" >> "$config_file"
{ echo "\$config['site']['qvitter']['favicon'] = 'img/favicon.ico?v=4';";
echo "\$config['site']['qvitter']['sprite'] = Plugin::staticPath('Qvitter', '').'img/sprite.png?v=40';";
echo "\$config['site']['qvitter']['enablewelcometext'] = false;";
echo "\$config['site']['qvitter']['blocked_ips'] = array();"; } >> "$config_file"
if [ -f "/var/www/${domain_name}/htdocs/local/plugins/Qvitter/img/sprite.png" ]; then
if [ -f "$HOME/${PROJECT_NAME}/img/${app_name}_sprite.png" ]; then
cp "$HOME/${PROJECT_NAME}/img/${app_name}_sprite.png" "/var/www/${domain_name}/htdocs/local/plugins/Qvitter/img/sprite.png"
chown -R www-data:www-data "/var/www/${domain_name}/htdocs"
cd "/var/www/${domain_name}/htdocs" || exit 37483673
php scripts/upgrade.php
php scripts/checkschema.php
chown -R www-data:www-data "/var/www/${domain_name}/htdocs"
set_completion_param "${app_name} theme commit" "$QVITTER_THEME_COMMIT"
function install_gnusocial_default_background {
if [[ "$gnusocial_type" == 'pleroma' ]]; then
if [ -f "$basedir/static/logo.png" ]; then
if [ -f "$HOME/${PROJECT_NAME}/img/logo_fbone3.png" ]; then
cp "$HOME/${PROJECT_NAME}/img/logo_fbone3.png" "$basedir/static/logo_custom.png"
sed -i "s|\"logo\":.*|\"logo\": \"/static/logo_custom.png\",|g" "$basedir/static/config.json"
if [ -f "/home/$MY_USERNAME/${PROJECT_NAME}/img/logo_fbone3.png" ]; then
cp "/home/$MY_USERNAME/${PROJECT_NAME}/img/logo_fbone3.png" "$basedir/static/logo_custom.png"
sed -i "s|\"logo\":.*|\"logo\": \"/static/logo_custom.png\",|g" "$basedir/static/config.json"
if [ -f "$HOME/${PROJECT_NAME}/img/backgrounds/${gnusocial_type}.jpg" ]; then
cp "$HOME/${PROJECT_NAME}/img/backgrounds/${gnusocial_type}.jpg" "$basedir/static/bg_custom.jpg"
sed -i "s|\"background\":.*|\"background\": \"/static/bg_custom.jpg\",|g" "$basedir/static/config.json"
if [ -f "/home/$MY_USERNAME/${PROJECT_NAME}/img/backgrounds/${gnusocial_type}.jpg" ]; then
cp "/home/$MY_USERNAME/${PROJECT_NAME}/img/backgrounds/${gnusocial_type}.jpg" "$basedir/static/bg_custom.jpg"
sed -i "s|\"background\":.*|\"background\": \"/static/bg_custom.jpg\",|g" "$basedir/static/config.json"
function install_pleroma_front_end {
pleroma_domain="$2"
background_url="$3"
title="$4"
mkdir -p "$INSTALL_DIR/pleroma"
cp -r -p /repos/pleroma-fe/. "$INSTALL_DIR/pleroma"
cd "$INSTALL_DIR/pleroma" || exit 23468324
git pull
else
function_check git_clone
git_clone "$PLEROMA_FRONTEND_REPO" "$INSTALL_DIR/pleroma"
echo $'Unable to clone pleroma repo'
exit 682252
fi
fi
cd "$INSTALL_DIR/pleroma" || exit 2562844
git checkout "$PLEROMA_FRONTEND_COMMIT" -b "$PLEROMA_FRONTEND_COMMIT"
set_completion_param "${app_name} pleroma commit" "$PLEROMA_FRONTEND_COMMIT"
if [ -d "$INSTALL_DIR/pleroma/node_modules" ]; then
rm -rf "$INSTALL_DIR/pleroma/node_modules"
npm install -g eslint@3.19.0
npm install -g eslint-plugin-promise@3.5.0
npm install -g moment@2.18.1
if [ -f "$INSTALL_DIR/pleroma/dist/index.html" ]; then
echo 'Unable to build pleroma'
exit 7629352
fi
if [ ! -f "$INSTALL_DIR/pleroma/dist/index.html" ]; then
echo $'Unable to build pleroma index.html'
exit 5282682
fi
if [[ "$app_name" != 'pleroma' ]]; then
cp -r "$INSTALL_DIR/pleroma/dist/"* "/var/www/${pleroma_domain}/htdocs/"
pleroma_set_background_image_from_url "/var/www/${pleroma_domain}/htdocs" "$pleroma_domain" "$background_url" "$title"
cp -r "$INSTALL_DIR/pleroma/dist/"* "$PLEROMA_DIR/priv/static"
pleroma_set_background_image_from_url "$PLEROMA_DIR/priv/static" "$pleroma_domain" "$background_url" "$title"
nginx_site="/etc/nginx/sites-available/${pleroma_domain}"
sed -i 's|index index.php;|index index.html;|g' "$nginx_site"
if [ -f "/var/www/${pleroma_domain}/htdocs/index.php" ]; then
mv "/var/www/${pleroma_domain}/htdocs/index.php" "/var/www/${pleroma_domain}/htdocs/index_qvitter.php"
sed -i 's|index.php|index_qvitter.php|g' "$nginx_site"
# remove any cached yarn files
if [ -d /root/.cache/yarn ]; then
rm -rf /root/.cache/yarn
fi
if [[ "$app_name" != 'pleroma' ]]; then
chown -R www-data:www-data "/var/www/${pleroma_domain}/htdocs"
domain_name="$1"
app_name="$2"
background_url="$3"
title="$4"
if [ -d "$INSTALL_DIR/pleroma" ]; then
set_repo_commit "$INSTALL_DIR/pleroma" "${app_name} pleroma commit" "$PLEROMA_FRONTEND_COMMIT" "$PLEROMA_FRONTEND_REPO"
cd "$INSTALL_DIR/pleroma" || exit 3468356385
echo 'Unable to build pleroma'
exit 268362
fi
if [ -f "$basedir/static/logo.png" ]; then
cp "$basedir/static/logo.png" "$basedir/static/logo.png.old"
if [ -f "$basedir/static/bg.jpg" ]; then
cp "$basedir/static/bg.jpg" "$basedir/static/bg.jpg.old"
if [ -f "$basedir/static/config.json" ]; then
cp "$basedir/static/config.json" "$basedir/static/config.json.old"
if [ -f "$basedir/static/config.json.old" ]; then
mv "$basedir/static/config.json.old" "$basedir/static/config.json"
sed -i "s|\"name\":.*|\"name\": \"${title}\",|g" "$basedir/static/config.json"
if [ -f "$basedir/static/logo.png.old" ]; then
cp "$basedir/static/logo.png.old" "$basedir/static/logo.png"
if [ -f "$basedir/static/bg.jpg.old" ]; then
cp "$basedir/static/bg.jpg.old" "$basedir/static/bg.jpg"
if [ -f "$basedir/index.php" ]; then
mv "$basedir/index.php" "$basedir/index_qvitter.php"
install_pleroma_front_end "${app_name}" "${domain_name}" "${background_url}" "${title}"
# check that the daemon is running
{ echo '#!/bin/bash';
echo -n "daemon_lines=\$(ps aux | grep \"";
echo -n "${domain_name}";
echo '/htdocs/scripts/queuedaemon.php" | grep "/var/www")';
echo "cd /var/www/${domain_name}/htdocs";
echo "if [[ \$daemon_lines != *\"/var/www/\"* ]]; then";
echo " ADMIN_USER=\$(cat $COMPLETION_FILE | grep 'Admin user' | awk -F ':' '{print \$2}')";
echo " MY_EMAIL_ADDRESS=\$ADMIN_USER@$HOSTNAME";
echo -n " echo \"Restarting ${gnusocial_type} daemons\" | mail -s \"${gnusocial_type} ";
echo "daemons not found\" \$MY_EMAIL_ADDRESS";
echo ' su -c "sh scripts/startdaemons.sh" -s /bin/sh www-data';
echo 'fi';
echo 'php scripts/delete_orphan_files.php > /dev/null';
echo 'php scripts/clean_thumbnails.php -y > /dev/null';
echo 'php scripts/clean_file_table.php -y > /dev/null';
echo 'php scripts/upgrade.php > /dev/null'; } > "/etc/cron.hourly/${gnusocial_type}-daemons"
chmod +x "/etc/cron.hourly/${gnusocial_type}-daemons"
function gnusocial_block_user_script {
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
{ echo '#!/bin/bash';
echo '';
echo "database_name=\$1";
echo "remove_user=\$2";
echo "domain_name=\$3";
echo "MARIADB_PASSWORD=\$(freedombone-pass -u root -a mariadb)";
echo '';
echo "if [ \${#remove_user} -lt 2 ]; then";
echo ' echo $"No user was specified"';
echo ' exit 1';
echo 'fi';
echo '';
echo "if [[ \"\$remove_user\" != *\".\"* || \"\$remove_user\" != *\"@\"* ]]; then";
echo ' echo $"This doesnt look like a user"';
echo ' exit 2';
echo 'fi';
echo '';
echo "if [ \${#database_name} -lt 2 ]; then";
echo ' echo $"No database was specified"';
echo ' exit 3';
echo 'fi';
echo '';
echo "nickname=\$(echo \"\$remove_user\" | awk -F '@' '{print \$1}')";
echo "remove_domain=\$(echo \"\$remove_user\" | awk -F '@' '{print \$2}')";
echo '';
echo "database_query=\"delete from notice where content REGEXP '\\@\${remove_user}';\"";
echo "mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" \$database_name";
echo '';
echo "database_query=\"select profile.id from profile where nickname = '\${nickname}' and profileurl like '%\${remove_domain}%';\"";
echo "declare -a ids=\$(mysql -u root --password=\"\$MARIADB_PASSWORD\" << EOF";
echo "use \$database_name;";
echo "\$database_query";
echo 'EOF';
echo ')';
echo '';
echo 'ctr=0';
echo "for id in \$ids";
echo 'do';
echo " if [ \$ctr -gt 0 ]; then";
echo " #echo \"Removing user ID \$id on \$remove_domain\"";
echo '';
echo " database_query=\"delete from reply where profile_id=\${id};\"";
echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" \$database_name";
echo '';
echo " database_query=\"delete from reply where replied_id=\${id};\"";
echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" \$database_name";
echo '';
echo " if [ \$domain_name ]; then";
echo " database_query=\"select rendered from notice where profile_id=\${id} and rendered like '%/file/%';\"";
echo " declare -a stored_files=\$(mysql -u root --password=\"\$MARIADB_PASSWORD\" << EOF";
echo "use \$database_name;";
echo "\$database_query";
echo 'EOF';
echo ')';
echo -n " files_to_delete=\$(echo \"\$stored_files\" | ";
echo "sed -n 's/.*href=\"\\([^\"]*\\).*/\\1/p' | awk -F 'file/' '{print \$2}')";
echo ' filectr=0';
echo " for f in \$files_to_delete";
echo ' do';
echo " if [ \$filectr -gt 0 ]; then";
echo " if \$(ls /var/www/\${domain_name}/htdocs/file/*\${f}* 1> /dev/null 2>&1); then";
echo " rm /var/www/\${domain_name}/htdocs/file/*\${f}*";
echo ' fi';
echo ' fi';
echo " filectr=\$((filectr + 1))";
echo ' done';
echo ' fi';
echo '';
echo " database_query=\"delete from notice where profile_id=\${id};\"";
echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" \$database_name";
echo '';
echo " database_query=\"delete from profile where id=\${id};\"";
echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" \$database_name";
echo '';
echo " database_query=\"delete from qvitternotification where to_profile_id=\${id} or from_profile_id=\${id};\"";
echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" \$database_name";
echo ' fi';
echo " ctr=\$((ctr + 1))";
echo 'done'; } > /usr/bin/gnusocial-delete-user
chmod +x /usr/bin/gnusocial-delete-user
}
function gnusocial_block_domain_script {
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
database_name="$1"
gnusoc_domain="$2"
{ echo '#!/bin/bash';
echo '';
echo "database_name=\$1";
echo "remove_domain=\$2";
echo "domain_name=\$3";
echo "MARIADB_PASSWORD=\$(${PROJECT_NAME}-pass -u root -a mariadb)";
echo '';
echo "if [ \${#remove_domain} -lt 2 ]; then";
echo ' echo $"No domain was specified"';
echo ' exit 1';
echo 'fi';
echo '';
echo "if [[ \"\$remove_domain\" != *\".\"* ]]; then";
echo ' echo $"This doesnt look like a domain"';
echo ' exit 2';
echo 'fi';
echo '';
echo "if [ \${#database_name} -lt 2 ]; then";
echo ' echo $"No database was specified"';
echo ' exit 3';
echo 'fi';
echo '';
echo "database_query=\"select profile.id from profile where profileurl like '%\${remove_domain}%';\"";
echo "declare -a ids=\$(mysql -u root --password=\"\$MARIADB_PASSWORD\" << EOF";
echo "use \$database_name;";
echo "\$database_query";
echo 'EOF';
echo ')';
echo '';
echo 'ctr=0';
echo "for id in \$ids";
echo 'do';
echo " if [ \$ctr -gt 0 ]; then";
echo " #echo \"Removing user ID \$id on \$remove_domain\"";
echo '';
echo " database_query=\"delete from conversation where uri like '%\${remove_domain}%';\"";
echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" \$database_name";
echo '';
echo " database_query=\"delete from reply where profile_id=\${id};\"";
echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" $database_name";
echo '';
echo " database_query=\"delete from reply where replied_id=\${id};\"";
echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" \$database_name";
echo '';
echo " if [ \$domain_name ]; then";
echo " database_query=\"select rendered from notice where profile_id=\${id} and rendered like '%/file/%';\"";
echo " declare -a stored_files=\$(mysql -u root --password=\"\$MARIADB_PASSWORD\" << EOF";
echo "use \$database_name;";
echo "\$database_query";
echo 'EOF';
echo ')';
echo -n " files_to_delete=\$(echo \"\$stored_files\" | ";
echo "sed -n 's/.*href=\"\\([^\"]*\\).*/\\1/p' | awk -F 'file/' '{print \$2}')";
echo ' filectr=0';
echo " for f in \$files_to_delete";
echo ' do';
echo " if [ \$filectr -gt 0 ]; then";
echo " if \$(ls /var/www/\${domain_name}/htdocs/file/*\${f}* 1> /dev/null 2>&1); then";
echo " rm /var/www/\${domain_name}/htdocs/file/*\${f}*";
echo ' fi';
echo ' fi';
echo " filectr=\$((filectr + 1))";
echo ' done';
echo ' fi';
echo '';
echo " database_query=\"delete from notice where profile_id=\${id};\"";
echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" $database_name";
echo '';
echo " database_query=\"delete from profile where id=\${id};\"";
echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" \$database_name";
echo '';
echo " database_query=\"delete from qvitternotification where to_profile_id=\${id} or from_profile_id=\${id};\"";
echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" \$database_name";
echo ' fi';
echo " ctr=\$((ctr + 1))";
echo 'done'; } > /usr/bin/gnusocial-delete-domain
chmod +x /usr/bin/gnusocial-delete-domain
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
{ echo '#!/bin/bash';
echo '';
echo "PROJECT_NAME=$PROJECT_NAME";
echo "GNUSOCIAL_DOMAIN_NAME=$gnusoc_domain";
echo "database_name=$database_name";
echo "FIREWALL_DOMAINS=\$HOME/\${PROJECT_NAME}-firewall-domains.cfg";
echo '';
echo 'while read block; do';
echo " if [[ \"\$block\" != *\"@\"* ]]; then";
echo " /usr/bin/gnusocial-delete-domain \"\$database_name\" \"\$block\" \"\$GNUSOCIAL_DOMAIN_NAME\"";
echo ' else';
echo " /usr/bin/gnusocial-delete-user \"\$database_name\" \"\$block\" \"\$GNUSOCIAL_DOMAIN_NAME\"";
echo ' fi';
echo "done <\$FIREWALL_DOMAINS";
echo '';
echo '# remove any metadata from images uploaded in the last 2 minutes';
echo "if [ -d /var/www/\$GNUSOCIAL_DOMAIN_NAME/htdocs ]; then";
echo " cd /var/www/\$GNUSOCIAL_DOMAIN_NAME/htdocs";
echo " declare -a recent_image=\$(find file ! -name thumb-* -mmin -2 -type f -exec ls -l {} + | awk -F 'file/' '{print \$2}')";
echo " for f in \${recent_image[@]}";
echo ' do';
echo " if [ \${#f} -gt 1 ]; then";
echo " exiftool -q -all= \"file/\${f}\"";
echo ' fi';
echo ' done';
echo 'fi'; } > "/usr/bin/${database_name}-firewall"
chmod +x "/usr/bin/${database_name}-firewall"
if ! grep -q "${database_name}-firewall" /etc/crontab; then
fi
}
function expire_gnusocial_posts {
domain_name="$1"
gnusocial_type="$2"
expire_months="$3"
# files are what take up most of the backup time, so don't keep them for very long
expire_days_files=7
# To prevent the database size from growing endlessly this script expires posts
# after a number of months
if [ ! -d "/var/www/${domain_name}/htdocs" ]; then
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
gnusocial_expire_posts_script="/usr/bin/${gnusocial_type}-expire-posts"
{ echo '<?php';
echo '':
echo "// ${gnusocial_type} post expiry script, based on StatExpire by Tony Baldwin";
echo '// https://github.com/tonybaldwin/statexpire';
echo '';
echo "\$oldate=date((\"Y-m-d\"), strtotime(\"-${expire_months} months\"));";
echo "\$username=\"root\";";
echo "\$password=shell_exec('${PROJECT_NAME}-pass -u root -a mariadb');";
echo "\$database=\"${gnusocial_type}\";";
echo '';
echo "if (!\$link = mysqli_connect(\"localhost\", \$username, \$password)) {";
echo ' echo "Could not connect to mariadb";';
echo ' exit;';
echo '}';
echo '';
echo "if (!mysqli_select_db(\$link, \$database)) {";
echo " echo \"Could not select ${gnusocial_type} database\";";
echo ' exit;';
echo '}';
echo '';
echo "\$notice_query=\"DELETE FROM notice WHERE created <= '\$oldate 01:01:01'\";";
echo "\$conversation_query=\"DELETE FROM conversation WHERE created <= '\$oldate 01:01:01'\";";
echo "\$reply_query=\"DELETE FROM reply WHERE modified <= '\$oldate 01:01:01'\";";
echo "\$notification_query=\"DELETE FROM qvitternotification WHERE created <= '\$oldate 01:01:01'\";";
echo '';
echo "mysqli_query(\$link, \$notice_query);";
echo "\$rowaff1=mysqli_affected_rows(\$link);";
echo "mysqli_query(\$link, \$conversation_query);";
echo "\$rowaff2=mysqli_affected_rows(\$link);";
echo "mysqli_query(\$link, \$reply_query);";
echo "\$rowaff3=mysqli_affected_rows(\$link);";
echo "mysqli_query(\$link, \$notification_query);";
echo "\$rowaff4=mysqli_affected_rows(\$link);";
echo "mysqli_close(\$link);";
echo '';
echo "echo \"Expire ${gnusocial_type} posts: \$rowaff1 notices, \$rowaff2 conversations, \$rowaff3 replies, and \$rowaff4 qvitter notifications deleted from database.\";"; } > "$gnusocial_expire_posts_script"
chmod +x "$gnusocial_expire_posts_script"
gnusocial_expire_script="/etc/cron.daily/${gnusocial_type}-expire"
{ echo '#!/bin/bash';
echo "find /var/www/${domain_name}/htdocs/file/* -mtime +${expire_days_files} -exec rm {} +";
echo "/usr/bin/php $gnusocial_expire_posts_script"; } > "$gnusocial_expire_script"
chmod +x "$gnusocial_expire_script"
# remove any old cron job
if grep -q "${gnusocial_type}-expire" /etc/crontab; then
sed -i "/${gnusocial_type}-expire/d" /etc/crontab
fi
# remove old expire script
if [ -f "/etc/cron.weekly/clear-${gnusocial_type}-database" ]; then
rm "/etc/cron.weekly/clear-${gnusocial_type}-database"
function gnusocial_use_classic {
database_name=$1
domain_name=$(get_completion_param "$database_name domain")
if [ -f "/var/www/$domain_name/htdocs/index_qvitter.php" ]; then
mv "/var/www/$domain_name/htdocs/index_qvitter.php" "/var/www/$domain_name/htdocs/index.php"
if [ -f "/etc/nginx/sites-available/$domain_name" ]; then
sed -i 's|index_qvitter.php|index.php|g' "/etc/nginx/sites-available/$domain_name"
sed -i 's|index.html|index.php|g' "/etc/nginx/sites-available/$domain_name"
if ! grep -q "//addPlugin('Qvitter')" "/var/www/$domain_name/htdocs/config.php"; then
sed -i "s|// addPlugin('Qvitter')|addPlugin('Qvitter')|g" "/var/www/$domain_name/htdocs/config.php"
sed -i "s|addPlugin('Qvitter')|//addPlugin('Qvitter')|g" "/var/www/$domain_name/htdocs/config.php"
chown -R www-data:www-data "/var/www/${domain_name}/htdocs"
systemctl restart nginx
}
function gnusocial_use_qvitter {
database_name=$1
domain_name=$(get_completion_param "$database_name domain")
if [ -f "/var/www/$domain_name/htdocs/index_qvitter.php" ]; then
mv "/var/www/$domain_name/htdocs/index_qvitter.php" "/var/www/$domain_name/htdocs/index.php"
if [ -f "/etc/nginx/sites-available/$domain_name" ]; then
sed -i 's|index_qvitter.php|index.php|g' "/etc/nginx/sites-available/$domain_name"
sed -i 's|index.html|index.php|g' "/etc/nginx/sites-available/$domain_name"
if grep -q "//addPlugin('Qvitter')" "/var/www/$domain_name/htdocs/config.php"; then
sed -i "s|//addPlugin('Qvitter')|addPlugin('Qvitter')|g" "/var/www/$domain_name/htdocs/config.php"
if grep -q "// addPlugin('Qvitter')" "/var/www/$domain_name/htdocs/config.php"; then
sed -i "s|// addPlugin('Qvitter')|addPlugin('Qvitter')|g" "/var/www/$domain_name/htdocs/config.php"
chown -R www-data:www-data "/var/www/${domain_name}/htdocs"
systemctl restart php7.0-fpm
}
function gnusocial_use_pleroma {
domain_name=$(get_completion_param "$database_name domain")
if [ ! -d "/var/www/$domain_name/htdocs/static" ]; then
if [ -f "/var/www/$domain_name/htdocs/index.php" ]; then
mv "/var/www/$domain_name/htdocs/index.php" "/var/www/$domain_name/htdocs/index_qvitter.php"
if [ -f "/etc/nginx/sites-available/$domain_name" ]; then
sed -i 's|index.php|index_qvitter.php|g' "/etc/nginx/sites-available/$domain_name"
sed -i 's|index index_qvitter.php|index index.html|g' "/etc/nginx/sites-available/$domain_name"
if grep -q "//addPlugin('Qvitter')" "/var/www/$domain_name/htdocs/config.php"; then
sed -i "s|//addPlugin('Qvitter')|addPlugin('Qvitter')|g" "/var/www/$domain_name/htdocs/config.php"
if grep -q "// addPlugin('Qvitter')" "/var/www/$domain_name/htdocs/config.php"; then
sed -i "s|// addPlugin('Qvitter')|addPlugin('Qvitter')|g" "/var/www/$domain_name/htdocs/config.php"
cp "$INSTALL_DIR/pleroma/dist/index.html" "/var/www/${domain_name}/htdocs/index.html"
chmod +x static/css
chmod +x static/font
chmod +x static/font/css
chmod +x static/font/font
chmod +x static/js
chmod +x static
chown -R www-data:www-data "/var/www/${domain_name}/htdocs"
function install_gnusocial_plugin_sharings {
if [ ! -d "/var/www/$domain_name/htdocs/local/plugins" ]; then
mkdir -p "/var/www/$domain_name/htdocs/local/plugins"
fi
apt-get -yq install liblocale-msgfmt-perl gettext
# update to the next commit
function_check set_repo_commit
set_repo_commit "/var/www/$domain_name/htdocs/local/plugins/Sharings" "$social_app_name sharings plugin commit" "$SHARINGS_COMMIT" "$SHARINGS_REPO"
if [[ $(app_is_installed "${social_app_name}_plugin_sharings") == "1" ]]; then
cd "/var/www/$domain_name/htdocs/local/plugins" || exit 28746245
if [ -d /repos/sharings ]; then
mkdir Sharings
cp -r -p /repos/sharings/. Sharings
git pull
else
function_check git_clone
if [ ! -d "/var/www/$domain_name/htdocs/local/plugins/Sharings" ]; then
echo $"Unable to clone $social_app_name sharings plugin"
exit 36738
fi
cd "/var/www/$domain_name/htdocs/local/plugins/Sharings" || exit 2846244
git branch -D "$SHARINGS_COMMIT"
git checkout "$SHARINGS_COMMIT" -b "$SHARINGS_COMMIT"
if ! grep -q "addPlugin('Sharings');" "/var/www/$domain_name/htdocs/config.php"; then
echo "addPlugin('Sharings');" >> "/var/www/$domain_name/htdocs/config.php"
cd "/var/www/$domain_name/htdocs" || exit 2684624874
cd "/var/www/$domain_name/htdocs/local/plugins/Sharings" || exit 246824684
cd "/var/www/$domain_name/htdocs" || exit 23524584
php scripts/upgrade.php
php scripts/checkschema.php
# Languages
cd "/var/www/$domain_name/htdocs/local/plugins/Sharings/locale/en/LC_MESSAGES" || exit 53825488
msgfmt -o Sharings.mo Sharings.po
if [ ! -f Sharings.po ]; then
echo $"English translations for $social_app_name sharings plugin were not created"
exit 782923
fi
cd "/var/www/$domain_name/htdocs/local/plugins/Sharings/locale/en_GB/LC_MESSAGES" || exit 268442845
msgfmt -o Sharings.mo Sharings.po
if [ ! -f Sharings.po ]; then
echo $"English (GB) translations for $social_app_name sharings plugin were not created"
exit 23528
fi
cd "/var/www/$domain_name/htdocs/local/plugins/Sharings/locale/en_US/LC_MESSAGES" || exit 264824628
msgfmt -o Sharings.mo Sharings.po
if [ ! -f Sharings.po ]; then
echo $"English (US) translations for $social_app_name sharings plugin were not created"
exit 567382
fi
# Looks like this update function isn't supported by the current php version
sed -i 's|ActivityVerb::UPDATE, ||g' "/var/www/$domain_name/htdocs/local/plugins/Sharings/SharingsPlugin.php"
chown -R www-data:www-data "/var/www/$domain_name/htdocs"
set_completion_param gnusocial "$social_app_name sharings plugin commit" "$SHARINGS_COMMIT"
install_completed "${social_app_name}_plugin_sharings"
}
function install_gnusocial_plugin_sharings_theme {
if [ ! -d "/var/www/$domain_name/htdocs/local/plugins" ]; then
mkdir -p "/var/www/$domain_name/htdocs/local/plugins"
fi
# update to the next commit
function_check set_repo_commit
set_repo_commit "/var/www/$domain_name/htdocs/local/plugins/SharingsTheme" "$social_app_name sharings theme plugin commit" "$SHARINGS_THEME_COMMIT" "$SHARINGS_THEME_REPO"
if [[ $(app_is_installed "${social_app_name}_plugin_sharings_theme") == "1" ]]; then
cd "/var/www/$domain_name/htdocs/local/plugins" || exit 682425642
git_clone "$SHARINGS_THEME_REPO" SharingsTheme
if [ ! -d "/var/www/$domain_name/htdocs/local/plugins/SharingsTheme" ]; then
echo $"Unable to clone $social_app_name sharings plugin theme"
exit 639253
fi
cd "/var/www/$domain_name/htdocs/local/plugins/SharingsTheme" || exit 2648724684
git branch -D "$SHARINGS_THEME_COMMIT"
git checkout "$SHARINGS_THEME_COMMIT" -b "$SHARINGS_THEME_COMMIT"
if ! grep -q "addPlugin('SharingsTheme');" "/var/www/$domain_name/htdocs/config.php"; then
echo "addPlugin('SharingsTheme');" >> "/var/www/$domain_name/htdocs/config.php"
cd "/var/www/$domain_name/htdocs" || exit 246824624
chown -R www-data:www-data "/var/www/$domain_name/htdocs"
set_completion_param "$social_app_name sharings plugin theme commit" "$SHARINGS_THEME_COMMIT"
install_completed "${social_app_name}_plugin_sharings_theme"
# update to the next commit
function_check set_repo_commit
set_repo_commit "$GNUSOCIAL_PATH/local/plugins/Markdown" "$social_app_name Markdown commit" "$GNUSOCIAL_MARKDOWN_COMMIT" "$GNUSOCIAL_MARKDOWN_REPO"
if [[ $(app_is_installed "${social_app_name}_markdown") == "1" ]]; then
if [ -d "$GNUSOCIAL_PATH/local/plugins/Markdown" ]; then
rm -rf "$GNUSOCIAL_PATH/local/plugins/Markdown"
if [ ! -d "$GNUSOCIAL_PATH/local/plugins" ]; then
mkdir -p "$GNUSOCIAL_PATH/local/plugins"
cd "$GNUSOCIAL_PATH/local/plugins" || exit 268476248
if [ -d /repos/gnusocial-markdown ]; then
mkdir Markdown
cp -r -p /repos/gnusocial-markdown/. Markdown
git pull
else
function_check git_clone
cd "$GNUSOCIAL_PATH/local/plugins/Markdown" || exit 26584526745
git checkout "$GNUSOCIAL_MARKDOWN_COMMIT" -b "$GNUSOCIAL_MARKDOWN_COMMIT"
gnusocial_config_file="$GNUSOCIAL_PATH/config.php"
if ! grep -q "addPlugin('Markdown'" "$gnusocial_config_file"; then
{ echo "";
echo "// Markdown settings";
echo "addPlugin('Markdown');"; } >> "$gnusocial_config_file"
fi
set_completion_param "$social_app_name markdown commit" "$GNUSOCIAL_MARKDOWN_COMMIT"