Files
SkillMate/backend/scripts/migrate-users.js
Claude Project Manager 6b9b6d4f20 Initial commit
2025-09-20 21:31:04 +02:00

72 Zeilen
2.0 KiB
JavaScript

// Migrate users from legacy unencrypted DB (skillmate.dev.db)
// to encrypted dev DB (skillmate.dev.encrypted.db)
// Usage: from backend dir run: npm run migrate-users
const path = require('path')
const Database = require('better-sqlite3')
const CryptoJS = require('crypto-js')
require('dotenv').config()
function encKey() {
return process.env.FIELD_ENCRYPTION_KEY || 'dev_field_key_change_in_production_32chars_min!'
}
function encrypt(text) {
if (!text) return null
return CryptoJS.AES.encrypt(text, encKey()).toString()
}
function sha256Lower(text) {
return CryptoJS.SHA256((text || '').toLowerCase()).toString()
}
function main() {
const legacyPath = path.join(process.cwd(), 'skillmate.dev.db')
const encPath = path.join(process.cwd(), 'skillmate.dev.encrypted.db')
const legacy = new Database(legacyPath)
const enc = new Database(encPath)
try {
const legacyUsers = legacy.prepare('SELECT id, username, email, password, role, employee_id, last_login, is_active, created_at, updated_at FROM users').all()
let migrated = 0
const existsByUsername = enc.prepare('SELECT id FROM users WHERE username = ?')
const insert = enc.prepare(`
INSERT INTO users (id, username, email, email_hash, password, role, employee_id, last_login, is_active, created_at, updated_at)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
`)
for (const u of legacyUsers) {
const exists = existsByUsername.get(u.username)
if (exists) continue
insert.run(
u.id,
u.username,
encrypt(u.email),
sha256Lower(u.email || ''),
u.password,
u.role,
u.employee_id || null,
u.last_login || null,
u.is_active ?? 1,
u.created_at || new Date().toISOString(),
u.updated_at || new Date().toISOString()
)
migrated++
}
console.log(`✅ Migration abgeschlossen. Übertragene Benutzer: ${migrated}`)
} catch (err) {
console.error('❌ Migration fehlgeschlagen:', err)
process.exitCode = 1
} finally {
legacy.close()
enc.close()
}
}
main()