<% raw %> #!/bin/bash set -e if which mongosh > /dev/null 2>&1; then mongo_init_bin="mongosh" else mongo_init_bin="mongo" fi mongo_args=() if [[ -n "${MONGO_HOST:-}" ]]; then mongo_args=( --host "${MONGO_HOST}" --port "${MONGO_PORT:-27017}" ) fi "${mongo_init_bin}" "${mongo_args[@]}" < naam && alle.indexOf(naam) === i); function aanmelden() { for (const naam of kandidaten) { try { if (adminDb.auth(naam, beheerWachtwoord)) { return naam; } } catch (e) { // Onbekende gebruiker of verkeerd wachtwoord: volgende kandidaat. } } try { // Draait deze server nog zonder authenticatie, dan mogen we zo verder. adminDb.getUsers(); return "(zonder aanmelden)"; } catch (e) { return ""; } } const beheerder = aanmelden(); if (!beheerder) { print(""); print("FOUT: geen enkele MongoDB-beheerder kon inloggen op dit volume."); print("Het wachtwoord in .env hoort niet bij de database die er al staat."); print("Zet het oorspronkelijke wachtwoord terug in .env, of verwijder het"); print("volume om opnieuw te beginnen (dat wist wel je UniFi-gegevens)."); print(""); quit(18); } print("MongoDB-beheerder: " + beheerder); const roles = [ { db: "admin", role: "clusterMonitor" }, // Zonder deze twee kan Server Up geen mongodump/mongorestore draaien voor // de backup van deze stack. { db: "admin", role: "backup" }, { db: "admin", role: "restore" }, { db: appDatabase, role: "dbOwner" }, { db: appDatabase + "_stat", role: "dbOwner" }, { db: appDatabase + "_audit", role: "dbOwner" }, { db: appDatabase + "_restore", role: "dbOwner" } ]; function ensureUser(database) { const userDb = db.getSiblingDB(database); const bestaand = userDb.getUser(appNaam); if (!bestaand) { userDb.createUser({ user: appNaam, pwd: appWachtwoord, roles: roles }); print("Gebruiker " + appNaam + " aangemaakt in " + database + "."); return; } // Alleen het wachtwoord gelijktrekken en ontbrekende rollen aanvullen. De // rollen overschrijven zou de beheerder van een oudere installatie // degraderen, waarna onder meer de backup geen dump meer kan maken. userDb.updateUser(appNaam, { pwd: appWachtwoord }); const missend = roles.filter( (r) => !(bestaand.roles || []).some((b) => b.role === r.role && b.db === r.db)); if (missend.length) { userDb.grantRolesToUser(appNaam, missend); } print("Gebruiker " + appNaam + " bijgewerkt in " + database + "."); } ensureUser(authBron); if (authBron !== appDatabase) { ensureUser(appDatabase); } EOF <% endraw %>