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

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()