77 Zeilen
2.2 KiB
JavaScript
77 Zeilen
2.2 KiB
JavaScript
// Reset the admin login to username 'admin' with password 'admin123'
|
|
// Usage: from backend directory, run `npm run reset-admin` or `node scripts/reset-admin.js`
|
|
|
|
const path = require('path')
|
|
const Database = require('better-sqlite3')
|
|
const bcrypt = require('bcryptjs')
|
|
const CryptoJS = require('crypto-js')
|
|
require('dotenv').config()
|
|
|
|
function getDbPath() {
|
|
const envPath = process.env.DATABASE_PATH
|
|
if (envPath && envPath.trim()) return envPath
|
|
const prod = process.env.NODE_ENV === 'production'
|
|
return prod
|
|
? path.join(process.cwd(), 'data', 'skillmate.encrypted.db')
|
|
: path.join(process.cwd(), 'skillmate.dev.encrypted.db')
|
|
}
|
|
|
|
function getFieldKey() {
|
|
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, getFieldKey()).toString()
|
|
}
|
|
|
|
function sha256Lower(text) {
|
|
return CryptoJS.SHA256(text.toLowerCase()).toString()
|
|
}
|
|
|
|
async function main() {
|
|
const dbPath = getDbPath()
|
|
console.log(`Using database: ${dbPath}`)
|
|
const db = new Database(dbPath)
|
|
|
|
try {
|
|
const admin = db.prepare('SELECT id, username FROM users WHERE username = ?').get('admin')
|
|
const newHash = await bcrypt.hash('admin123', 12)
|
|
|
|
if (admin) {
|
|
db.prepare('UPDATE users SET password = ?, is_active = 1, role = ?, updated_at = ? WHERE id = ?')
|
|
.run(newHash, 'admin', new Date().toISOString(), admin.id)
|
|
console.log('✅ Admin-Passwort zurückgesetzt: admin / admin123')
|
|
} else {
|
|
const now = new Date().toISOString()
|
|
const email = 'admin@skillmate.local'
|
|
db.prepare(`
|
|
INSERT INTO users (id, username, email, email_hash, password, role, is_active, created_at, updated_at)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
`).run(
|
|
'admin-' + Date.now(),
|
|
'admin',
|
|
encrypt(email),
|
|
sha256Lower(email),
|
|
newHash,
|
|
'admin',
|
|
1,
|
|
now,
|
|
now
|
|
)
|
|
console.log('✅ Admin-Benutzer erstellt: admin / admin123')
|
|
}
|
|
} catch (err) {
|
|
console.error('❌ Fehler beim Zurücksetzen der Admin-Anmeldeinformationen:', err)
|
|
process.exitCode = 1
|
|
} finally {
|
|
db.close()
|
|
}
|
|
}
|
|
|
|
main()
|
|
|