Make admin seed idempotent-upsert so a corrupted password can be fixed by restart
Build and Deploy / version (push) Successful in 1s
Build and Deploy / build (push) Successful in 6s
Build and Deploy / deploy (push) Successful in 1s

Grund: $ in SEED_ADMIN_PASSWORD wird von Docker-Compose/Portainer als
Variablen-Referenz interpretiert und kann dadurch verstümmelt beim Container
ankommen. Seed synct das Passwort jetzt bei jedem Start neu, solange die
Variable gesetzt ist, statt nur einmalig anzulegen. README um Warnhinweis
ergänzt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Fidelis Huber
2026-08-21 18:33:36 +02:00
co-authored by Claude Sonnet 5
parent 11a3753d76
commit ca5d240cf6
2 changed files with 23 additions and 13 deletions
+10 -7
View File
@@ -31,18 +31,21 @@ app.get(/^(?!\/api\/).*/, (_req, res) => {
res.sendFile(path.join(PUBLIC_DIR, 'index.html'));
});
// Legt beim ersten Start ein lokales Fallback-Konto an, falls SEED_ADMIN_USERNAME/
// SEED_ADMIN_PASSWORD gesetzt sind und noch kein Konto mit diesem Namen existiert.
// Idempotent kann bei jedem Neustart stehen bleiben, legt nichts doppelt an.
// Legt beim Start ein lokales Fallback-Konto an bzw. hält es synchron, solange
// SEED_ADMIN_USERNAME/SEED_ADMIN_PASSWORD gesetzt sind (Upsert so lässt sich ein
// falsch übernommenes Passwort einfach per Neustart korrigieren). Danach die
// SEED_ADMIN_PASSWORD-Variable aus dem Stack entfernen, um das Konto "einzufrieren".
async function seedAdminIfConfigured() {
const username = process.env.SEED_ADMIN_USERNAME;
const password = process.env.SEED_ADMIN_PASSWORD;
if (!username || !password) return;
const existing = await prisma.user.findUnique({ where: { username } });
if (existing) return;
const passwordHash = await bcrypt.hash(password, 12);
await prisma.user.create({ data: { username, passwordHash, name: username } });
console.log(`Lokales Konto "${username}" angelegt.`);
await prisma.user.upsert({
where: { username },
update: { passwordHash },
create: { username, passwordHash, name: username }
});
console.log(`Lokales Konto "${username}" angelegt/aktualisiert.`);
}
seedAdminIfConfigured()