From c5904f1be5383be3defb0832efcfa4790747bce4 Mon Sep 17 00:00:00 2001 From: chriswin Date: Fri, 9 Jan 2026 18:12:44 +0100 Subject: [PATCH] add scripts --- scripts/db_backup_script.sh | 72 +++++++++++++++++++++++++++++++ scripts/generate_certificate.sh | 26 +++++++++++ scripts/mam-login.js | 46 ++++++++++++++++++++ scripts/overleaf_backup_script.sh | 25 +++++++++++ 4 files changed, 169 insertions(+) create mode 100644 scripts/db_backup_script.sh create mode 100755 scripts/generate_certificate.sh create mode 100644 scripts/mam-login.js create mode 100644 scripts/overleaf_backup_script.sh diff --git a/scripts/db_backup_script.sh b/scripts/db_backup_script.sh new file mode 100644 index 0000000..e4fde0f --- /dev/null +++ b/scripts/db_backup_script.sh @@ -0,0 +1,72 @@ +#!/bin/bash + +# Cron job check the logs + +## Executing the script +# bash db_backup_script.sh + +## command used to back up +# docker exec DOCKER_CONTAINER pg_dump -U postgres -Fc DATABASE_NAME > BACKUP_FILE.DUMP + +## command used to restore +# directory where the backup is saved in in the docker container: /var/lib/postgresql/data +# for example: docker exec postgres pg_restore -U postgres -d vikunja-backup /var/lib/postgresql/data/backup/vikunja-2024-01-31.dump +# docker exec DOCKER_CONTAINER pg_restore -U postgres -d DATABASE_NAME /var/lib/postgresql/data/backup/BACKUP_FILE.DUMP + +# Date format +YEAR=$(date +"%Y") +MONTH=$(date +"%m") +DAY=$(date +"%d") +NOW=$(date +"%Y-%m-%d") + +BACKUP_DIRECTORY="/home/debian/docker/compose/project/db/postgres/data" + +# Docker container with DB to backup +DB_1="postgres" +DB_2="postgres-with-pg-vector" + +back_up_db() { + + # sql to list all databases + DATABASE_NAME=$(docker exec $1 psql -U postgres -t -c 'SELECT datname FROM pg_database WHERE datistemplate = false;') + + # pg_dump command + PGDUMP="docker exec $1 pg_dump -U postgres -Fc" + + for i in $DATABASE_NAME; do + + # ignoring postgres db + if [[ "$i" != "postgres" ]]; then + + echo "Backing up database $i" + # backup path to file + BACKFILE="$BACKUP_DIRECTORY/backup/$i-$NOW.dump" + $PGDUMP $i > $BACKFILE + + fi + + done +} + +clean_up_backups() { + + echo "Looking for dumps to prune in folder: $BACKUP_DIRECTORY/backup/" + + # keep one backup per year, month and last two days + BACKUP_YEAR="*-$YEAR-02-01.dump" + BACKUP_MONTH="*-$YEAR-$MONTH-01.dump" + BACKUP_DAY="*-$YEAR-$MONTH-$DAY.dump" + BACKUP_DAY_1="*-$YEAR-$MONTH-$((DAY-1)).dump" + FILE_TO_DELETE=$(find $BACKUP_DIRECTORY/backup/ -type f \( ! -name $BACKUP_YEAR -a ! -name $BACKUP_MONTH -a ! -name $BACKUP_DAY -a ! -name $BACKUP_DAY_1 \)) + + # delete such files + for i in $FILE_TO_DELETE; do + echo "Pruning $i" + rm $i + done +} + +back_up_db $DB_1 +back_up_db $DB_2 + +clean_up_backups diff --git a/scripts/generate_certificate.sh b/scripts/generate_certificate.sh new file mode 100755 index 0000000..c35d948 --- /dev/null +++ b/scripts/generate_certificate.sh @@ -0,0 +1,26 @@ +# https://stackoverflow.com/questions/59738140/why-is-firefox-not-trusting-my-self-signed-certificate +# generate all the certificates +# import certificate root-ca.crt in firefox +# in the config of traefik set the server.key and server.crt in the tls store + +openssl req -x509 -nodes \ + -newkey RSA:2048 \ + -keyout root-ca.key \ + -days 365 \ + -out root-ca.crt \ + -subj '/C=CH/ST=Denial/L=Earth/O=Crescentec/CN=root_CA_crescentec' + +openssl req -nodes \ + -newkey rsa:2048 \ + -keyout server.key \ + -out server.csr \ + -subj '/C=CH/ST=Denial/L=Earth/O=Crescentec/CN=server_crescentec' + +openssl x509 -req \ + -CA root-ca.crt \ + -CAkey root-ca.key \ + -in server.csr \ + -out server.crt \ + -days 365 \ + -CAcreateserial \ + -extfile <(printf "subjectAltName = DNS:*.${LOCAL_DOMAIN}\nauthorityKeyIdentifier = keyid,issuer\nbasicConstraints = CA:FALSE\nkeyUsage = digitalSignature, keyEncipherment\nextendedKeyUsage=serverAuth") \ No newline at end of file diff --git a/scripts/mam-login.js b/scripts/mam-login.js new file mode 100644 index 0000000..97d2e69 --- /dev/null +++ b/scripts/mam-login.js @@ -0,0 +1,46 @@ +const puppeteer = require('puppeteer'); + +async function loginToMAM(username, password) { + try { + const browser = await puppeteer.launch({ + headless: true, + args: ['--no-sandbox', '--disable-setuid-sandbox'] + }); + const page = await browser.newPage(); + + console.log("Navigating to MAM login..."); + await page.goto('https://www.myanonamouse.net/login.php', { + waitUntil: 'networkidle2', + timeout: 10000 + }); + + const pageTitle = await page.title(); + + console.log("Filling in login form..."); + await page.type('input[name="email"]', username); + await page.type('input[name="password"]', password); + + console.log("Submitting login form..."); + await page.click('input[type="submit"]'); + await page.waitForNavigation({ + waitUntil: 'domcontentloaded', + timeout: 10000 + }); + + console.log("Login attempt completed."); + const cookies = await page.cookies(); + await browser.close(); + + console.log(JSON.stringify(cookies)); + } catch (err) { + console.error("Login failed: ", err); + process.exit(1); + } +} + +const username = process.env.MAM_USERNAME; +const password = process.env.MAM_PASSWORD; + +loginToMAM(username, password) + .then(cookies => ({ result: 'Success', cookies })) + .catch(err => ({ result: 'Error', error: err.message })); diff --git a/scripts/overleaf_backup_script.sh b/scripts/overleaf_backup_script.sh new file mode 100644 index 0000000..d1ec9f2 --- /dev/null +++ b/scripts/overleaf_backup_script.sh @@ -0,0 +1,25 @@ +# Date format +NOW=$(date +"%Y-%m-%d") + +OVERLEAF_DIRECTORY="/home/debian/docker/compose/project/service/overleaf-toolkit" + +# Backup config +$OVERLEAF_DIRECTORY/bin/backup-config -m tar $OVERLEAF_DIRECTORY/backup/$NOW-overleaf-config-backup.tar +# Backup mongo +tar --create --file $OVERLEAF_DIRECTORY/backup/$NOW-overleaf-mongo-backup.tar $OVERLEAF_DIRECTORY/data/mongo +# Backup sharelatex +tar --create --file $OVERLEAF_DIRECTORY/backup/$NOW-overleaf-sharelatex-backup.tar $OVERLEAF_DIRECTORY/data/sharelatex + +# Pruning +clean_up_backups() { + + # list all files older than 3 days + FILE_TO_DELETE=$(find $OVERLEAF_DIRECTORY/backup/ -type f -mtime 3) + + # delete such files + for i in $FILE_TO_DELETE; do + rm $i + done +} + +clean_up_backups \ No newline at end of file