Files
online-energieausweis/wipe-database.bash
Moritz Utcke dc0509cac2 Implementiert Nutzer Verifizierung
Fügt einen Mechanismus zur Nutzerverifizierung per E-Mail ein.

Nach der Registrierung wird eine E-Mail mit einem zeitbasierten Verifizierungscode versandt. Der Nutzer muss diesen Code eingeben, um sein Konto zu aktivieren.

Die Methode zur Erstellung des Codes ist zeitbasiert und ändert sich alle 15 Minuten.
2025-07-30 09:39:30 -05:00

80 lines
1.9 KiB
Bash

#!/bin/bash
set -e
# Config
CONTAINER_NAME="database"
DB_USER="main"
DB_NAME="main"
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
FILE_NAME="backup-$TIMESTAMP.sql.br"
# Wir holen uns den parameter --skip-backup, um zu entscheiden, ob wir ein Backup machen wollen
SKIP_BACKUP=false
while [[ $# -gt 0 ]]; do
case $1 in
--skip-backup)
SKIP_BACKUP=true
shift # Remove the argument from the list
;;
*)
echo "Unbekannter Parameter: $1"
exit 1
;;
esac
done
REQUIRED_CONFIRMATION='Ja, ich möchte alle Daten unwiderruflich löschen.'
echo "⚠️ WARNUNG: Diese Aktion wird alle Tabellen und Einträge in der Datenbank vollständig löschen!"
echo "Um fortzufahren, tippe exakt: \"$REQUIRED_CONFIRMATION\""
echo
read -p "> " USER_CONFIRMATION
if [[ "$USER_CONFIRMATION" != "$REQUIRED_CONFIRMATION" ]]; then
echo "❌ Falsche Eingabe. Abbruch."
exit 1
fi
if [[ "$SKIP_BACKUP" == false ]]; then
echo "📦 Backup wird erstellt..."
docker exec -t "$CONTAINER_NAME" pg_dumpall -c -U "$DB_USER" | brotli > "$FILE_NAME"
echo "✅ Backup abgeschlossen: $FILE_NAME"
fi
echo "🧨 Alle Daten aus allen Tabellen werden gelöscht..."
# Generate and run TRUNCATE statements for all tables in the public schema
docker exec -i "$CONTAINER_NAME" psql -U "$DB_USER" "$DB_NAME" <<'EOSQL'
DO $$
DECLARE
r RECORD;
sql TEXT := '';
BEGIN
-- Truncate all tables
FOR r IN
SELECT tablename
FROM pg_tables
WHERE schemaname = 'public'
LOOP
sql := sql || FORMAT('DROP TABLE public.%I CASCADE;', r.tablename);
END LOOP;
-- Drop all sequences
FOR r IN
SELECT sequence_name
FROM information_schema.sequences
WHERE sequence_schema = 'public'
LOOP
sql := sql || FORMAT('DROP SEQUENCE IF EXISTS public.%I CASCADE;', r.sequence_name);
END LOOP;
EXECUTE sql;
END
$$;
EOSQL
echo "✅ Alle Tabellen gelöscht und Schema zurückgesetzt."
echo "🚀 Datenbankbereinigung abgeschlossen."