Skip to content
Snippets Groups Projects
freedombone-app-pleroma 51.4 KiB
Newer Older
Bob Mottram's avatar
Bob Mottram committed
#!/bin/bash
Bob Mottram's avatar
Bob Mottram committed
#  _____               _           _
# |   __|___ ___ ___ _| |___ _____| |_ ___ ___ ___
# |   __|  _| -_| -_| . | . |     | . | . |   | -_|
# |__|  |_| |___|___|___|___|_|_|_|___|___|_|_|___|
Bob Mottram's avatar
Bob Mottram committed
#
Bob Mottram's avatar
Bob Mottram committed
#                              Freedom in the Cloud
Bob Mottram's avatar
Bob Mottram committed
#
# Pleroma backend application
Bob Mottram's avatar
Bob Mottram committed
# License
# =======
#
# Copyright (C) 2017-2018 Bob Mottram <bob@freedombone.net>
Bob Mottram's avatar
Bob Mottram committed
#
# 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/>.

Bob Mottram's avatar
Bob Mottram committed
VARIANTS='full full-vim social'
Bob Mottram's avatar
Bob Mottram committed

IN_DEFAULT_INSTALL=0
SHOW_ON_ABOUT=1

PLEROMA_DOMAIN_NAME=
PLEROMA_CODE=
PLEROMA_PORT=4000
PLEROMA_ONION_PORT=8011
PLEROMA_REPO="https://git.pleroma.social/pleroma/pleroma.git"
Bob Mottram's avatar
Bob Mottram committed
PLEROMA_COMMIT='5b6d6d7f2d9363c494642bfda4d6e4d12daa53c7'
Bob Mottram's avatar
Bob Mottram committed
PLEROMA_ADMIN_PASSWORD=
Bob Mottram's avatar
Bob Mottram committed
PLEROMA_DIR=/etc/pleroma
PLEROMA_SECRET_KEY=""
pleroma_secret=$PLEROMA_DIR/config/dev.secret.exs
Bob Mottram's avatar
Bob Mottram committed

PLEROMA_BACKGROUND_IMAGE_URL=

PLEROMA_TITLE='Pleroma Server'

# Number of months after which posts expire
PLEROMA_EXPIRE_MONTHS=3
Bob Mottram's avatar
Bob Mottram committed
pleroma_expire_posts_script=/usr/bin/pleroma-expire-posts
Bob Mottram's avatar
Bob Mottram committed
blocking_script_file=/usr/bin/pleroma-blocking
Bob Mottram's avatar
Bob Mottram committed

pleroma_variables=(ONION_ONLY
                   PLEROMA_DOMAIN_NAME
                   PLEROMA_CODE
                   PLEROMA_WELCOME_MESSAGE
                   PLEROMA_BACKGROUND_IMAGE_URL
                   DDNS_PROVIDER
                   PLEROMA_TITLE
                   PLEROMA_EXPIRE_MONTHS
                   MY_EMAIL_ADDRESS
                   MY_USERNAME)

function pleroma_add_filtering {
    if grep -q "# begin filtering" $pleroma_secret; then
        return
    fi
    sed -i '/pbkdf2_rounds/a reject: []' $pleroma_secret
    sed -i '/pbkdf2_rounds/a federated_timeline_removal: [],' $pleroma_secret
    sed -i '/pbkdf2_rounds/a media_nsfw: [],' $pleroma_secret
    sed -i '/pbkdf2_rounds/a media_removal: [],' $pleroma_secret
    sed -i '/pbkdf2_rounds/a config :pleroma, :mrf_simple,' $pleroma_secret
    sed -i '/pbkdf2_rounds/a # begin filtering' $pleroma_secret

Bob Mottram's avatar
Bob Mottram committed
    sed -i 's|reject: |  reject: |g' $pleroma_secret
    sed -i 's|federated_timeline_removal: |  federated_timeline_removal: |g' $pleroma_secret
    sed -i 's|media_nsfw: |  media_nsfw: |g' $pleroma_secret
    sed -i 's|media_removal: |  media_removal: |g' $pleroma_secret
    create_pleroma_blocklist
function pleroma_enable_chat {
    if [[ "$1" == 't'* || "$1" == 'y'* || "$1" == 'T'* || "$1" == 'Y'* ]]; then
        sed -i 's|"chatDisabled":.*|"chatDisabled": false,|g' $PLEROMA_DIR/priv/static/static/config.json
        sed -i 's|:chat, enabled:.*|:chat, enabled: true|g' $PLEROMA_DIR/config/config.exs
    else
        sed -i 's|"chatDisabled":.*|"chatDisabled": true,|g' $PLEROMA_DIR/priv/static/static/config.json
        sed -i 's|:chat, enabled:.*|:chat, enabled: false|g' $PLEROMA_DIR/config/config.exs
    fi
    pleroma_recompile
}

Bob Mottram's avatar
Bob Mottram committed
function create_pleroma_blocklist {
Bob Mottram's avatar
Bob Mottram committed
    { echo '#!/bin/bash';
      echo "if [ ! -f /root/${PROJECT_NAME}-firewall-domains.cfg ]; then";
      echo '    exit 0';
      echo 'fi';
      echo 'if [ -f /tmp/pleroma-blocking.lock ]; then';
      echo '    cd /tmp';
      echo '    find ./pleroma*.lock -type f -mmin +5 -exec rm {} \;';
      echo '    if [ -f /tmp/pleroma-blocking.lock ]; then';
      echo '        exit 0';
      echo '    fi';
      echo 'fi';
      echo 'touch /tmp/pleroma-blocking.lock';
      echo 'objects_query="DELETE FROM objects WHERE"';
      echo 'objects_updated=';
      echo 'users_query="DELETE FROM users WHERE"';
      echo 'websub_server_subscriptions_query="DELETE FROM websub_server_subscriptions WHERE"';
      echo 'websub_server_subscriptions_updated=';
      echo 'filter_str=';
Bob Mottram's avatar
Bob Mottram committed
      echo 'while read blocked; do';
      echo "    if [[ \"\$blocked\" == *\".\"* || \"\$blocked\" == *\"@\"* ]]; then";
      echo "        if [ \${#blocked} -gt 4 ]; then";
      echo "            if [ \$objects_updated ]; then";
      echo "                objects_query=\"\${objects_query} or\"";
      echo "                users_query=\"\${users_query} or\"";
      echo '            fi';
      echo "            objects_query=\"\${objects_query} data->>'content' ilike '%\${blocked}%' or data->>'actor' ilike '%\${blocked}%' or data->>'to' ilike '%\${blocked}%' or data->>'id' ilike '%\${blocked}%' or data->>'external_url' ilike '%\${blocked}%'\"";
      echo "            users_query=\"\${users_query} nickname ilike '%\${blocked}%'\"";
      echo '            objects_updated=1';
      echo "            if [[ \"\$blocked\" != *\"@\"* ]]; then";
      echo '                # Create a filter string for the pleroma configuration';
      echo "                if [ \"\$filter_str\" ]; then";
      echo "                    filter_str=\"\${filter_str}, \\\"\$blocked\\\"\"";
      echo '                else';
Bob Mottram's avatar
Bob Mottram committed
      echo "                    filter_str=\"\\\"\${blocked}\\\"\"";
      echo '                fi';
      echo '';
Bob Mottram's avatar
Bob Mottram committed
      echo "                if ! grep -q \"127.0.0.1  \$blocked\" /etc/hosts; then";
      echo "                    echo \"127.0.0.1  \$blocked\" >> /etc/hosts";
      echo '                fi';
      echo "                if [ \$websub_server_subscriptions_updated ]; then";
      echo "                    websub_server_subscriptions_query=\"\${websub_server_subscriptions_query} or\"";
      echo '                fi';
      echo "                websub_server_subscriptions_query=\"\${websub_server_subscriptions_query} callback like '%\${blocked}%'\"";
      echo '                websub_server_subscriptions_updated=1';
      echo '            fi';
      echo '        fi';
      echo '    fi';
      echo 'done </root/freedombone-firewall-domains.cfg';
      echo '';
      echo "if [ \"\$filter_str\" ]; then";
      echo "    if ! grep -q \" \$filter_str \" $pleroma_secret; then";
Bob Mottram's avatar
Bob Mottram committed
      echo "        sed -i \"s| media_removal:.*| media_removal: [ \$filter_str ],|g\" $pleroma_secret";
      echo "        sed -i \"s| federated_timeline_removal:.*| federated_timeline_removal: [ \$filter_str ],|g\" $pleroma_secret";
Bob Mottram's avatar
Bob Mottram committed
      echo "        sed -i \"s| reject:.*| reject: [ \$filter_str ]|g\" $pleroma_secret";
      echo "        chown -R pleroma:pleroma $PLEROMA_DIR";
      echo '        sudo -u pleroma mix clean';
      echo '        sudo -u pleroma mix deps.compile';
      echo '        sudo -u pleroma mix compile';
      echo '        systemctl restart pleroma';
      echo '    fi';
      echo 'fi';
      echo '';
Bob Mottram's avatar
Bob Mottram committed
      echo 'cd /etc/postgresql';
      echo "if [ \$objects_updated ]; then";
      echo "    sudo -u postgres psql -d pleroma -c \"\$objects_query\"";
      echo "    sudo -u postgres psql -d pleroma -c \"\$users_query\"";
      echo 'fi';
      echo "if [ \$websub_server_subscriptions_updated ]; then";
      echo "    sudo -u postgres psql -d pleroma -c \"\$websub_server_subscriptions_query\"";
      echo 'fi';
      echo 'rm /tmp/pleroma-blocking.lock'; } > $blocking_script_file
Bob Mottram's avatar
Bob Mottram committed
    chmod +x $blocking_script_file

    if ! grep -q "$blocking_script_file" /etc/crontab; then
Bob Mottram's avatar
Bob Mottram committed
        cron_add_mins 1 "$blocking_script_file 2> /dev/null"
Bob Mottram's avatar
Bob Mottram committed
function expire_pleroma_posts {
    domain_name=$1
    expire_months=$3

Bob Mottram's avatar
Bob Mottram committed
    if [ ! "$expire_months" ]; then
Bob Mottram's avatar
Bob Mottram committed
        expire_months=3
    fi

Bob Mottram's avatar
Bob Mottram committed
    #expire_days=$((expire_months * 30))
Bob Mottram's avatar
Bob Mottram committed

    # 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 /etc/pleroma ]; then
        return
    fi

Bob Mottram's avatar
Bob Mottram committed
    { echo '#!/bin/bash';
      echo "plmonths=\"$PLEROMA_EXPIRE_MONTHS\"";
      echo "if [ \${#plmonths} -eq 0 ]; then";
      echo '    exit 1';
      echo 'fi';
      echo "if [[ \"\$plmonths\" == \"0\" ]]; then";
      echo '    exit 2';
      echo 'fi';
Loading
Loading full blame...