-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathresetUser.js
77 lines (64 loc) · 2.75 KB
/
resetUser.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
const bcrypt = require('bcrypt');
const readlineSync = require('readline-sync');
const jwt = require('jsonwebtoken');
const sqlite3 = require('sqlite3').verbose();
const clc = require('cli-color');
require('dotenv').config();
const { JWT_TOKEN } = process.env;
const db = new sqlite3.Database('./db/datenbank.sqlite');
if (process.env.ALLOW_METRICS === 'true') {
const Sentry = require("@sentry/node");
const { CaptureConsole } = require('@sentry/integrations');
Sentry.init({
dsn: "https://[email protected]/4505795835658240",
tracesSampleRate: 0.4,
integrations: [
new CaptureConsole({
levels: ['error']
})
],
});
}
try {
db.serialize(() => {
const generateToken = (id, username, role) => {
const payload = {
id,
username,
role
};
const token = jwt.sign(payload, JWT_TOKEN);
return token;
};
console.log(clc.whiteBright('\nBitte geben Sie die folgenden Informationen ein, um einen neuen Benutzer zu erstellen oder das Token eines bestehenden Benutzers zu aktualisieren.\nNutze beim Passwort keine Sonderzeichen!\n'));
const username = readlineSync.question('Benutzername: ');
const existingUserQuery = 'SELECT * FROM users WHERE username = ?';
const existingUserValues = [username];
db.get(existingUserQuery, existingUserValues, (error, existingUser) => {
if (error) {
console.error(clc.red('\n[ERROR] | » Fehler beim Überprüfen des Benutzernamens:', error.message));
return;
}
if (!existingUser) {
console.log(clc.red('\nBenutzer nicht gefunden.\n'));
return;
}
const newPassword = readlineSync.question('Neues Passwort (leer lassen, um das Passwort nicht zu ändern): ', { hideEchoBack: true });
const isAdmin = readlineSync.question('Ist der Benutzer ein Administrator? (Ja/Nein): ');
const hashedPassword = newPassword ? bcrypt.hashSync(newPassword, 10) : existingUser.password;
const role = isAdmin.toLowerCase() === 'ja' ? 'admin' : 'mitglied';
const newToken = generateToken(existingUser.id, existingUser.username, role);
const updateTokenQuery = 'UPDATE users SET password = ?, token = ?, role = ? WHERE id = ?';
const updateTokenValues = [hashedPassword, newToken, role, existingUser.id];
db.run(updateTokenQuery, updateTokenValues, (error) => {
if (error) {
console.error(clc.red('\n[ERROR] | » Fehler beim Aktualisieren des Benutzers:', error.message));
return;
}
console.log(clc.whiteBright(`\nBenutzer aktualisiert!\nDas neue Login-Token lautet: ${newToken}\n`));
});
});
});
} catch (error) {
console.error(clc.red('[ERROR] | » Fehler:', error.message));
}