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.
80 lines
1.9 KiB
Bash
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." |