Skip to content

Commit

Permalink
META-Verbesserungen, reset-Funktion
Browse files Browse the repository at this point in the history
  • Loading branch information
MaximilianGT500 committed Aug 29, 2023
1 parent 9e0926c commit 0072ca5
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 12 deletions.
11 changes: 6 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -222,11 +222,12 @@ Andere Dinge zu beachten:

**Alle** dieser Skripte sollten mit `npm run <script-name>` ausgeführt werden. (außer `start`)

| Script | Beschreibung |
| ----------- | ------------------------------------------------------------------------------------------- |
| **`start`** | Startet den Uploader. Dies ist das Standardskript und wird mit **`npm start`** ausgeführt.. |
| `token` | Mit diesen Script bekommst du den Token von den angegebenen Nutzername und Passwort |
| `register` | Mit diesen Script kannst du einen Nutzer registrieren |
| Script | Beschreibung |
| ----------- | ---------------------------------------------------------------------------------------------------------------- |
| **`start`** | Startet den Uploader. Dies ist das Standardskript und wird mit **`npm start`** ausgeführt.. |
| `token` | Mit diesen Script bekommst du den Token von den angegebenen Nutzername und Passwort |
| `reset` | Mit diesen Script kannst du das Passwort, den Token und die Rolle eines Nutzers ändern bzw. zurücksetzen. |
| `register` | Mit diesen Script kannst du einen Nutzer registrieren |

[`FORCE_COLOR`]: https://nodejs.org/dist/latest-v16.x/docs/api/cli.html#cli_force_color_1_2_3

Expand Down
22 changes: 15 additions & 7 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -371,11 +371,15 @@ const TokenUsername = async (req, res, next) => {
};

const notFoundPage = `
<html>
<!DOCTYPE HTML>
<html lang="de-DE">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>404 » ${SITE_TITLE} </title>
<meta property="og:title" content="${OG_TITLE}">
<meta property="og:description" content="${OG_DESCRIPTION}">
<meta name="og:locale" content="de_DE" />
<link rel="icon" href="${SITE_FAVICON}" type="image/png" />
<style>
body {
Expand Down Expand Up @@ -967,14 +971,18 @@ app.get('/view/:filename', async (req, res) => {
}

function sendHtmlResponse(cssCode) {
const htmlResponse = `
<html>
const htmlResponse = `
<!DOCTYPE HTML>
<html lang="de-DE">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>${SITE_TITLE}</title>
${metaTag}
<meta property="og:title" content="${OG_TITLE}">
<meta property="og:description" content="${OG_DESCRIPTION}">
<meta name="theme-color" content="${themeColor}">
<meta name="og:locale" content="de_DE" />
<link rel="icon" href="${SITE_FAVICON}" type="image/png" />
<link href="${BASE_URL}/oembed/${filename}" title="oEmbed" rel="alternate" type="application/json+oembed" />
<style>
Expand Down Expand Up @@ -1117,16 +1125,16 @@ app.get('/view/:filename', async (req, res) => {
</audio>`
: isVideo
? `<video controls>
<source src="/uploads/${username}/${filename}">
<source src="/uploads/${username}/${filename}" width=${fileData.resolution_width} height=${fileData.resolution_height}>
</video>`
: filename.endsWith('.gif')
? `<img src="/uploads/${username}/${filename}" alt="GIF" />`
: isImage
? USE_PREVIEW
? `<img src="/uploads/${username}/preview/${filename}" alt="Bild Preview" />`
: `<img src="/uploads/${username}/${filename}" alt="Bild" />`
? `<img src="/uploads/${username}/preview/${filename}" width=${fileData.resolution_width} height=${fileData.resolution_height} alt="Bild Preview" />`
: `<img src="/uploads/${username}/${filename}" width=${fileData.resolution_width} height=${fileData.resolution_height} alt="Bild" />`
: fs.existsSync(previewPath)
? `<img src="/uploads/${username}/preview/${filename}" alt="Preview" />`
? `<img src="/uploads/${username}/preview/${filename}" width=${fileData.resolution_width} height=${fileData.resolution_height} alt="Preview" />`
: `<img src="${BASE_URL}/assets/file.png" alt="Datei" />`
}
</div>
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
"start": "node index.js",
"register": "node register.js",
"token": "node getToken.js",
"reset": "node resetUser.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
Expand Down
66 changes: 66 additions & 0 deletions resetUser.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
const bcrypt = require('bcrypt');
const readlineSync = require('readline-sync');
const jwt = require('jsonwebtoken');
const fs = require('fs');
const path = require('path');
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');


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, (err, existingUser) => {
if (err) {
console.error(clc.red('\n[ERROR] | » Fehler beim Überprüfen des Benutzernamens:', err));
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, (err) => {
if (err) {
console.error(clc.red('\n[ERROR] | » Fehler beim Aktualisieren des Benutzers:', err));
return;
}

console.log(clc.whiteBright('\nBenutzer aktualisiert!\nDas neue Login-Token lautet: ' + newToken + '\n'));
});
});
});
} catch (error) {
console.error(clc.red('[ERROR] | » Fehler:', error));
}

0 comments on commit 0072ca5

Please sign in to comment.