Initial commit
Dieser Commit ist enthalten in:
76
backend/scripts/reset-admin.js
Normale Datei
76
backend/scripts/reset-admin.js
Normale Datei
@ -0,0 +1,76 @@
|
||||
// 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()
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren