diff --git a/scripts/add-vorstand-role.js b/scripts/add-vorstand-role.js new file mode 100644 index 0000000..f3d5696 --- /dev/null +++ b/scripts/add-vorstand-role.js @@ -0,0 +1,81 @@ +#!/usr/bin/env node +/** + * Gibt einem bestehenden Benutzer zusaetzlich die Rolle "vorstand". + * + * Verwendung: + * node scripts/add-vorstand-role.js + * node scripts/add-vorstand-role.js + * + * Standard-E-Mail: + * tsschulz@gmx.net + */ + +import fs from 'fs/promises' +import path from 'path' +import { fileURLToPath } from 'url' +import dotenv from 'dotenv' +import { readUsers, writeUsers, migrateUserRoles } from '../server/utils/auth.js' + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) + +dotenv.config({ path: path.join(__dirname, '..', '.env') }) + +const targetEmail = String(process.argv[2] || 'tsschulz@gmx.net').trim().toLowerCase() + +function getDataPath(filename) { + const cwd = process.cwd() + if (cwd.endsWith('.output')) { + return path.join(cwd, '../server/data', filename) + } + return path.join(cwd, 'server/data', filename) +} + +async function createBackup(filePath) { + const backupDir = path.join(__dirname, '..', 'backups', `users-${Date.now()}`) + await fs.mkdir(backupDir, { recursive: true }) + const backupPath = path.join(backupDir, 'users.json') + await fs.copyFile(filePath, backupPath) + return backupPath +} + +async function main() { + const usersFile = getDataPath('users.json') + + console.log(`Suche Benutzer: ${targetEmail}`) + + const users = await readUsers() + const user = users.find((entry) => String(entry.email || '').trim().toLowerCase() === targetEmail) + + if (!user) { + console.error(`Benutzer nicht gefunden: ${targetEmail}`) + process.exit(1) + } + + migrateUserRoles(user) + const currentRoles = Array.isArray(user.roles) ? [...user.roles] : [] + + if (currentRoles.includes('vorstand')) { + console.log(`Benutzer ${targetEmail} hat die Rolle "vorstand" bereits.`) + console.log(`Aktuelle Rollen: ${currentRoles.join(', ')}`) + return + } + + const backupPath = await createBackup(usersFile) + user.roles = [...new Set([...currentRoles, 'vorstand'])] + + const success = await writeUsers(users) + if (!success) { + console.error('Fehler beim Schreiben der Benutzerdaten.') + process.exit(1) + } + + console.log(`Backup erstellt: ${backupPath}`) + console.log(`Rolle "vorstand" hinzugefuegt fuer ${targetEmail}`) + console.log(`Aktuelle Rollen: ${user.roles.join(', ')}`) +} + +main().catch((error) => { + console.error('Fehler beim Hinzufuegen der Rolle "vorstand":', error) + process.exit(1) +})