Files
WKVS/setup/database/generate-sql.php
2026-04-12 21:25:44 +02:00

74 lines
2.4 KiB
PHP

<?php
// --- KONFIGURATION ---
$sqlFile = 'wkvs-database-template.sql';
$newSqlFile = 'sql-database.sql';
$envFile = __DIR__ . '/../../config/.env.db-tables';
$oldPrefix = 'prefix-placeholder_';
$hashPlaceholder = 'PW_HASH';
// --- LOGIK ---
// 1. Generieren eines neuen, zufälligen Prefixes
// Format: 8 zufällige Zeichen + "_" (oder wie Sie es mögen)
$newPrefix = bin2hex(random_bytes(6)) . '_';
echo "=== Prefix Update Prozess ===\n";
echo "Alter Prefix: $oldPrefix\n";
echo "Neuer Prefix: $newPrefix\n";
if (!file_exists($sqlFile) || !file_exists($envFile)) {
die("FEHLER: Die Dateien '$sqlFile' oder '$envFile' wurden nicht gefunden.\n");
}
// 3. SQL-Datei verarbeiten (Stream-basiert für Performance)
echo "Verarbeite SQL-Datei...\n";
$handleIn = fopen($sqlFile, 'r');
$handleOut = fopen($newSqlFile, 'w'); // Überschreiben der Originaldatei (oder neue Datei nutzen)
if (!$handleIn || !$handleOut) {
die("FEHLER: Konnte Dateien nicht öffnen.\n");
}
$randPw = bin2hex(random_bytes(12));
$pwHash = password_hash($randPw, PASSWORD_ARGON2ID);
$linesProcessed = 0;
while (($line = fgets($handleIn)) !== false) {
// Ersetze den alten Prefix im SQL-Content
$newLine = str_replace($oldPrefix, $newPrefix, $line);
$newLine = str_replace($hashPlaceholder, $newPrefix, $newLine);
fwrite($handleOut, $newLine);
$linesProcessed++;
}
fclose($handleIn);
fclose($handleOut);
echo "✓ SQL-Datei aktualisiert ($linesProcessed Zeilen bearbeitet).\n";
echo "\n ---> WK-Leitungs Benutzer hinzugefügt. Benutzername: admin Passwort: $randPw\n\n";
// 4. .env-Datei verarbeiten
echo "Aktualisiere .env-Datei...\n";
$envContent = file_get_contents($envFile);
// Wir ersetzen die Zeile DB_PREFIX=... durch DB_PREFIX=...
// Regex sucht nach "DB_PREFIX=" gefolgt von beliebigen Zeichen bis Zeilenende
$pattern = '/^DB_PREFIX=.*/m';
$replacement = "DB_PREFIX=$newPrefix";
$updatedEnv = preg_replace($pattern, $replacement, $envContent);
if ($updatedEnv === $envContent) {
// Falls die Zeile nicht gefunden wurde, hängen wir sie an
$updatedEnv .= "\nDB_PREFIX=$newPrefix";
echo "⚠️ Hinweis: DB_PREFIX war nicht in der .env, wurde angehängt.\n";
}
file_put_contents($envFile, $updatedEnv);
echo "✓ .env-Datei aktualisiert.\n";
// 5. Abschluss
echo "\n✅ Prozess erfolgreich abgeschlossen!\n";
echo "Bitte prüfen Sie Ihre Dateien und setzen Sie den neuen Prefix in Ihrer Konfiguration. Dateiname: $newSqlFile\n";