2024-09-07 16:34:15 +02:00
const express = require ( "express" ) ;
const session = require ( "express-session" ) ;
const bcrypt = require ( "bcrypt" ) ;
const crypto = require ( "crypto" ) ;
const nodemailer = require ( "nodemailer" ) ;
const { Pool } = require ( "pg" ) ;
const path = require ( "path" ) ;
const moment = require ( "moment" ) ;
2024-09-09 16:37:28 +02:00
const { marked } = require ( "marked" ) ;
2024-09-09 16:12:29 +02:00
const axios = require ( "axios" ) ;
2024-09-07 16:34:15 +02:00
require ( "dotenv" ) . config ( ) ;
const log = require ( "node-file-logger" ) ;
2024-09-07 16:45:12 +02:00
const QRCode = require ( "qrcode" ) ;
2024-06-06 20:45:42 +02:00
const app = express ( ) ;
const port = process . env . PORT ;
2024-09-07 16:45:12 +02:00
const TeleBot = require ( "telebot" ) ;
2024-07-19 17:05:11 +02:00
const bot = new TeleBot ( process . env . TELEBOT ) ;
2024-09-07 16:45:12 +02:00
telebotChatID = process . env . TELECHAT ;
2024-07-19 17:05:11 +02:00
2024-09-07 16:45:12 +02:00
bot . on ( "text" , ( msg ) => {
if ( msg . from . id == telebotChatID ) {
2024-07-19 17:19:19 +02:00
msg . reply . text ( msg . text ) ;
} else {
2024-09-07 16:45:12 +02:00
msg . reply . text (
"Entschuldige, " +
msg . from . username +
"\nIch darf nicht mit fremden reden."
) ;
2024-07-19 17:19:19 +02:00
log . Info ( "Telebot-nachricht: " + msg . from . username + " - " + msg . text ) ;
}
2024-07-19 17:05:11 +02:00
} ) ;
2024-07-19 16:28:56 +02:00
2024-09-09 16:37:28 +02:00
//bot.start();
2024-07-19 16:28:56 +02:00
2024-06-06 20:45:42 +02:00
const options = {
2024-09-07 16:34:15 +02:00
folderPath : "./logs/" ,
2024-06-06 20:45:42 +02:00
dateBasedFileNaming : true ,
2024-09-07 16:34:15 +02:00
fileNamePrefix : "DailyLogs_" ,
fileNameExtension : ".log" ,
dateFormat : "YYYY_MM_D" ,
timeFormat : "h:mm:ss A" ,
} ;
2024-06-06 20:45:42 +02:00
log . SetUserOptions ( options ) ;
// Middleware
2024-09-07 16:34:15 +02:00
app . use ( express . static ( path . join ( _ _dirname , "public" ) ) ) ;
2024-06-06 20:45:42 +02:00
app . use ( express . json ( ) ) ;
2024-09-07 16:34:15 +02:00
app . set ( "view engine" , "ejs" ) ;
2024-06-06 20:45:42 +02:00
app . use ( express . urlencoded ( { extended : false } ) ) ;
// Session-Konfiguration
2024-09-07 16:34:15 +02:00
app . use (
session ( {
secret : process . env . SESSIONSECRET ,
resave : false ,
saveUninitialized : true ,
cookie : { maxAge : 1000 * 60 * 60 * 24 * 2 } ,
} )
) ;
2024-06-06 20:45:42 +02:00
// Authentifizierungs-Middleware
const requireAuth = ( req , res , next ) => {
if ( ! req . session . userId ) {
2024-09-07 16:34:15 +02:00
return res . redirect ( "/login" ) ;
2024-06-06 20:45:42 +02:00
}
next ( ) ;
} ;
const requireAdmin = ( req , res , next ) => {
2024-09-07 16:34:15 +02:00
if ( req . session . role !== "admin" ) {
return res . status ( 403 ) . send ( "Access denied" ) ;
2024-06-06 20:45:42 +02:00
}
next ( ) ;
} ;
// Email-Konfiguration
const transporter = nodemailer . createTransport ( {
host : process . env . MAILHOST ,
port : 465 ,
secure : true ,
auth : {
user : process . env . MAILUSER ,
2024-09-07 16:34:15 +02:00
pass : process . env . MAILPASS ,
} ,
2024-06-06 20:45:42 +02:00
} ) ;
// Datenbankverbindung
const pool = new Pool ( {
2024-09-07 16:34:15 +02:00
connectionString : process . env . DATABASE _URL ,
2024-06-06 20:45:42 +02:00
} ) ;
// Registrierung
2024-09-07 16:34:15 +02:00
app . post ( "/register" , async ( req , res ) => {
2024-06-06 20:45:42 +02:00
const { username , email , password } = req . body ;
try {
const hashedPassword = await bcrypt . hash ( password , 10 ) ;
2024-09-07 16:34:15 +02:00
await pool . query (
"INSERT INTO users (username, email, password) VALUES ($1, $2, $3)" ,
[ username , email , hashedPassword ]
) ;
const message =
"Registrierung erfolgreich. Ein Admin wird dich in kürze freischalten" ;
2024-06-06 20:45:42 +02:00
const mailOptions = {
2024-09-07 16:34:15 +02:00
to : "admin@boergmann.it" ,
from : "admin@boergmann.it" ,
subject : "Neue Registrierung" ,
text : ` ${ username } hat sich registriert ` ,
2024-06-06 20:45:42 +02:00
} ;
transporter . sendMail ( mailOptions , ( error ) => {
if ( error ) {
2024-09-07 16:34:15 +02:00
console . error ( "Error sending email:" , error ) ;
const message = "Error sending Mail:" + error ;
res . render ( "error" , { session : req . session , message } ) ;
2024-06-06 20:45:42 +02:00
}
} ) ;
2024-09-07 16:34:15 +02:00
res . render ( "error" , { session : req . session , message } ) ;
2024-06-06 20:45:42 +02:00
} catch ( error ) {
2024-09-07 16:34:15 +02:00
console . error ( "Error registering user:" , error ) ;
const message = "Error registering user:" + error ;
res . render ( "error" , { session : req . session , message } ) ;
2024-06-06 20:45:42 +02:00
}
} ) ;
// Login
2024-09-07 16:34:15 +02:00
app . post ( "/login" , async ( req , res ) => {
2024-06-06 20:45:42 +02:00
const { username , password } = req . body ;
try {
2024-09-07 16:34:15 +02:00
const userResult = await pool . query (
"SELECT *, CASE WHEN admin_temp IS NOT NULL AND (now() - admin_temp) > interval '22 hours' THEN 'expired' ELSE 'valid' END AS admin_status FROM users WHERE username = $1" ,
[ username ]
) ;
2024-06-06 20:45:42 +02:00
if ( userResult . rows . length > 0 ) {
const user = userResult . rows [ 0 ] ;
const match = await bcrypt . compare ( password , user . password ) ;
if ( match ) {
if ( user . is _active ) {
req . session . userId = user . id ;
req . session . userName = user . username ;
req . session . activeRiege = 1 ;
2024-09-07 16:34:15 +02:00
req . session . activeTab = "geraete" ;
req . session . message = [ ( title = "" ) , ( message = "" ) , ( type = "none" ) ] ;
if ( user . admin _status === "expired" ) {
await pool . query (
"UPDATE users SET role = $1, admin_temp = NULL WHERE id = $2" ,
[ "user" , user . id ]
) ;
req . session . role = "user" ;
2024-06-06 20:45:42 +02:00
} else {
req . session . role = user . role ;
}
2024-09-07 16:34:15 +02:00
res . redirect ( "/" ) ;
2024-06-06 20:45:42 +02:00
} else {
2024-09-07 16:34:15 +02:00
res . redirect ( "/freischaltung" ) ;
2024-06-06 20:45:42 +02:00
}
} else {
2024-09-07 16:34:15 +02:00
const message = "Falscher Benutzername oder falsches Passwort" ;
res . render ( "login" , { session : req . session , username , message } ) ;
2024-06-06 20:45:42 +02:00
}
} else {
2024-09-07 16:34:15 +02:00
const message = "Falscher Benutzername oder falsches Passwort" ;
res . render ( "login" , { session : req . session , username , message } ) ;
2024-06-06 20:45:42 +02:00
}
} catch ( error ) {
2024-09-07 16:34:15 +02:00
console . error ( "Error logging in:" , error ) ;
const message = "Error logging in:" + error ;
res . render ( "error" , { session : req . session , message } ) ;
2024-06-06 20:45:42 +02:00
}
} ) ;
//Wird angezeigt, wenn ein nicht freigeschalteter User sich anmelden will.
2024-09-07 16:34:15 +02:00
app . get ( "/freischaltung" , async ( req , res ) => {
res . render ( "freischaltung" , { session : req . session } ) ;
} ) ;
2024-06-06 20:45:42 +02:00
// Logout
2024-09-07 16:34:15 +02:00
app . get ( "/logout" , ( req , res ) => {
req . session . destroy ( ( err ) => {
2024-06-06 20:45:42 +02:00
if ( err ) {
2024-09-07 16:34:15 +02:00
return res . status ( 500 ) . send ( "Internal Server Error" ) ;
2024-06-06 20:45:42 +02:00
}
2024-09-07 16:34:15 +02:00
res . redirect ( "/" ) ;
2024-06-06 20:45:42 +02:00
} ) ;
} ) ;
// Benutzer freischalten (nur Admin)
2024-09-07 16:34:15 +02:00
app . post ( "/userrights" , requireAuth , requireAdmin , async ( req , res ) => {
2024-06-06 20:45:42 +02:00
const { userId , type } = req . body ;
try {
2024-09-07 16:34:15 +02:00
if ( type === "activate" ) {
await pool . query ( "UPDATE users SET is_active = TRUE WHERE id = $1" , [
userId ,
] ) ;
const userResult = await pool . query ( "SELECT * FROM users WHERE id = $1" , [
userId ,
] ) ;
2024-06-06 20:45:42 +02:00
if ( userResult . rows . length > 0 ) {
if ( userResult . rows [ 0 ] . email ) {
const mailOptions = {
to : userResult . rows [ 0 ] . email ,
2024-09-07 16:34:15 +02:00
from : "admin@boergmann.it" ,
subject : "Freischaltung" ,
text : ` Hallo ${ userResult . rows [ 0 ] . username } , du wurdest soeben freigeschaltet. ` ,
2024-06-06 20:45:42 +02:00
} ;
transporter . sendMail ( mailOptions , ( error ) => {
if ( error ) {
2024-09-07 16:34:15 +02:00
console . error ( "Error sending email:" , error ) ;
const message = "Error sending Mail:" + error ;
res . render ( "error" , { session : req . session , message } ) ;
2024-06-06 20:45:42 +02:00
}
2024-09-07 16:34:15 +02:00
} ) ;
2024-06-06 20:45:42 +02:00
}
}
2024-09-07 16:34:15 +02:00
} else if ( type === "admin" ) {
await pool . query ( "UPDATE users SET role = $1 WHERE id = $2" , [
"admin" ,
userId ,
] ) ;
} else if ( type === "admint" ) {
await pool . query (
"UPDATE users SET role = $1, admin_temp = $2 WHERE id = $3" ,
[ "admin" , moment ( ) . toDate ( ) , userId ]
) ;
} else if ( type === "delete" ) {
await pool . query ( "DELETE FROM users WHERE id = $1" , [ userId ] ) ;
2024-06-06 20:45:42 +02:00
}
2024-09-07 16:34:15 +02:00
res . redirect ( "/admin" ) ;
2024-06-06 20:45:42 +02:00
} catch ( error ) {
2024-09-07 16:34:15 +02:00
console . error ( "Error activating user:" , error ) ;
const message = "Error activating user:" + error ;
res . render ( "error" , { session : req . session , message } ) ;
2024-06-06 20:45:42 +02:00
}
} ) ;
// Passwort-Zurücksetzung anfordern
2024-09-07 16:34:15 +02:00
app . post ( "/send-password" , async ( req , res ) => {
2024-06-06 20:45:42 +02:00
const { email } = req . body ;
try {
2024-09-07 16:34:15 +02:00
const userResult = await pool . query (
"SELECT * FROM users WHERE email = $1" ,
[ email ]
) ;
2024-06-06 20:45:42 +02:00
if ( userResult . rows . length > 0 ) {
const user = userResult . rows [ 0 ] ;
2024-09-07 16:34:15 +02:00
const token = crypto . randomBytes ( 20 ) . toString ( "hex" ) ;
2024-06-06 20:45:42 +02:00
const resetLink = ` http://tkd.boergmann.it/reset-password/ ${ token } ` ;
2024-09-07 16:34:15 +02:00
await pool . query (
"UPDATE users SET reset_password_token = $1, reset_password_expires = $2 WHERE id = $3" ,
[ token , ( selectedDate = moment ( ) . add ( 1 , "d" ) . toDate ( ) ) , user . id ]
) ;
2024-06-06 20:45:42 +02:00
const mailOptions = {
to : user . email ,
2024-09-07 16:34:15 +02:00
from : "admin@boergmann.it" ,
subject : "Password Reset" ,
text : ` Click the following link to reset your password: ${ resetLink } ` ,
2024-06-06 20:45:42 +02:00
} ;
transporter . sendMail ( mailOptions , ( err ) => {
if ( err ) {
2024-09-07 16:34:15 +02:00
console . error ( "Error sending email:" , err ) ;
const message = "Error sending Mail:" + error ;
res . render ( "error" , { session : req . session , message } ) ;
2024-06-06 20:45:42 +02:00
} else {
2024-09-07 16:34:15 +02:00
const message = "Password reset link sent" ;
res . render ( "error" , { session : req . session , message } ) ;
2024-06-06 20:45:42 +02:00
}
} ) ;
} else {
2024-09-07 16:34:15 +02:00
const message = "Email not found" ;
res . render ( "error" , { session : req . session , message } ) ;
2024-06-06 20:45:42 +02:00
}
} catch ( error ) {
2024-09-07 16:34:15 +02:00
console . error ( "Error in forgot-password:" , error ) ;
const message = "Error in forgot-password" ;
res . render ( "error" , { session : req . session , message } ) ;
2024-06-06 20:45:42 +02:00
}
} ) ;
2024-09-07 16:34:15 +02:00
app . get ( "/forgot-password" , async ( req , res ) => {
res . render ( "forgot-password" , { session : req . session } ) ;
} ) ;
2024-06-06 20:45:42 +02:00
// Passwort zurücksetzen
2024-09-07 16:34:15 +02:00
app . get ( "/reset-password/:token" , async ( req , res ) => {
2024-06-06 20:45:42 +02:00
const { token } = req . params ;
try {
2024-09-07 16:34:15 +02:00
const userResult = await pool . query (
"SELECT * FROM users WHERE reset_password_token = $1 AND reset_password_expires > $2" ,
[ token , Date . now ( ) ]
) ;
2024-06-06 20:45:42 +02:00
if ( userResult . rows . length > 0 ) {
2024-09-07 16:34:15 +02:00
res . render ( "reset-password" , { token } ) ; // Stelle sicher, dass es eine reset-password.ejs gibt
2024-06-06 20:45:42 +02:00
} else {
2024-09-07 16:34:15 +02:00
const message = "Token ungültig oder abgelaufen" ;
res . render ( "error" , { session : req . session , message } ) ;
2024-06-06 20:45:42 +02:00
}
} catch ( error ) {
2024-09-07 16:34:15 +02:00
console . error ( "Error in reset-password:" , error ) ;
const message = "Error in reset-password" ;
res . render ( "error" , { session : req . session , message } ) ;
2024-06-06 20:45:42 +02:00
}
} ) ;
2024-09-07 16:34:15 +02:00
app . post ( "/reset-password/:token" , async ( req , res ) => {
2024-06-06 20:45:42 +02:00
const { token } = req . params ;
const { password } = req . body ;
try {
2024-09-07 16:34:15 +02:00
const userResult = await pool . query (
"SELECT * FROM users WHERE reset_password_token = $1 AND reset_password_expires > $2" ,
[ token , Date . now ( ) ]
) ;
2024-06-06 20:45:42 +02:00
if ( userResult . rows . length > 0 ) {
const user = userResult . rows [ 0 ] ;
const hashedPassword = await bcrypt . hash ( password , 10 ) ;
2024-09-07 16:34:15 +02:00
await pool . query (
"UPDATE users SET password = $1, reset_password_token = NULL, reset_password_expires = NULL WHERE id = $2" ,
[ hashedPassword , user . id ]
) ;
res . redirect ( "/login" ) ;
2024-06-06 20:45:42 +02:00
} else {
2024-09-07 16:34:15 +02:00
const message = "Token ungültig oder abgelaufen" ;
res . render ( "error" , { session : req . session , message } ) ;
2024-06-06 20:45:42 +02:00
}
} catch ( error ) {
2024-09-07 16:34:15 +02:00
console . error ( "Error in reset-password:" , error ) ;
const message = "Error in reset-password" ;
res . render ( "error" , { session : req . session , message } ) ;
2024-06-06 20:45:42 +02:00
}
} ) ;
// Profilseite
2024-09-07 16:34:15 +02:00
app . get ( "/profile" , requireAuth , ( req , res ) => {
res . render ( "profile" , { session : req . session } ) ; // Stelle sicher, dass es eine profile.ejs gibt
2024-06-06 20:45:42 +02:00
} ) ;
2024-09-07 16:34:15 +02:00
app . post ( "/profile" , requireAuth , async ( req , res ) => {
2024-06-06 20:45:42 +02:00
const { email , password } = req . body ;
try {
if ( email ) {
2024-09-07 16:34:15 +02:00
await pool . query ( "UPDATE users SET email = $1 WHERE id = $2" , [
email ,
req . session . userId ,
] ) ;
2024-06-06 20:45:42 +02:00
}
if ( password ) {
const hashedPassword = await bcrypt . hash ( password , 10 ) ;
2024-09-07 16:34:15 +02:00
await pool . query ( "UPDATE users SET password = $1 WHERE id = $2" , [
hashedPassword ,
req . session . userId ,
] ) ;
2024-06-06 20:45:42 +02:00
}
2024-09-07 16:34:15 +02:00
res . redirect ( "/profile" ) ;
2024-06-06 20:45:42 +02:00
} catch ( error ) {
2024-09-07 16:34:15 +02:00
console . error ( "Error updating profile:" , error ) ;
const message = "Error updating profile:" + error ;
res . render ( "error" , { session : req . session , message } ) ;
2024-06-06 20:45:42 +02:00
}
} ) ;
2024-09-07 16:34:15 +02:00
// Route für die Projektliste
app . get ( "/projects" , async ( req , res ) => {
req . session . message = [ "" , "" , "none" ] ;
try {
const result = await pool . query (
"SELECT id, name, beschreibung FROM projects"
) ;
const projekte = result . rows ;
res . render ( "projects" , { projekte , session : req . session } ) ;
} catch ( err ) {
console . error ( err ) ;
res . send ( err ) ;
}
} ) ;
app . post ( "/projects" , async ( req , res ) => {
const { name , beschreibung } = req . body ;
req . session . message = [ "" , "" , "none" ] ;
try {
await pool . query (
"INSERT INTO projects (name, beschreibung) VALUES ($1, $2)" ,
[ name , beschreibung ]
) ;
} catch ( err ) {
console . error ( err ) ;
res . send ( err ) ;
}
try {
const result = await pool . query (
"SELECT id, name, beschreibung FROM projects"
) ;
const projekte = result . rows ;
res . render ( "projects" , { projekte , session : req . session } ) ;
} catch ( err ) {
console . error ( err ) ;
res . send ( err ) ;
}
} ) ;
app . get ( "/project/:id" , async ( req , res ) => {
req . session . message = [ "" , "" , "none" ] ;
try {
const { id } = req . params ;
const result = await pool . query ( "SELECT * FROM projects WHERE id = $1" , [
id ,
] ) ;
const projekt = result . rows [ 0 ] ;
2024-09-09 16:12:29 +02:00
console . log ( ` ${ projekt . repository _link } /raw/branch/main/README.md ` ) ;
const url = ` ${ projekt . repository _link } /raw/branch/main/README.md ` ;
2024-09-07 16:34:15 +02:00
2024-09-09 16:12:29 +02:00
// Abrufen der Datei
2024-09-09 16:16:40 +02:00
const response = await axios . get ( url ) ;
2024-09-09 16:12:29 +02:00
// Markdown-Inhalt in HTML umwandeln
2024-09-09 16:16:40 +02:00
const htmlContent = marked ( response . data ) ;
//const htmlContent = "Testdata";
2024-09-07 16:34:15 +02:00
if ( ! projekt ) {
return res . status ( 404 ) . send ( "Projekt nicht gefunden" ) ;
}
2024-09-09 16:12:29 +02:00
res . render ( "project" , {
projekt ,
session : req . session ,
content : htmlContent ,
} ) ;
2024-09-07 16:34:15 +02:00
} catch ( err ) {
console . error ( err ) ;
2024-09-09 16:16:40 +02:00
res . send ( err ) ;
2024-09-07 16:34:15 +02:00
}
} ) ;
app . post ( "/projectedit" , async ( req , res ) => {
req . session . message = [ "" , "" , "none" ] ;
2024-09-09 16:12:29 +02:00
const { id , name , beschreibung , repository _link } = req . body ;
2024-09-07 16:34:15 +02:00
try {
await pool . query (
2024-09-09 16:12:29 +02:00
"UPDATE projects SET name = $1, beschreibung = $2 repository_link =$3 WHERE id = $4" ,
[ name , beschreibung , repository _link , id ]
2024-09-07 16:34:15 +02:00
) ;
} catch ( err ) {
console . error ( err ) ;
res . send ( err ) ;
}
res . redirect ( "/project/" + id ) ;
} ) ;
2024-06-06 20:45:42 +02:00
// Admin-Seite
2024-09-07 16:34:15 +02:00
app . get ( "/admin" , requireAuth , requireAdmin , async ( req , res ) => {
const usersResult = await pool . query ( "SELECT * FROM users" ) ;
res . render ( "admin" , { users : usersResult . rows , session : req . session } ) ; // Stelle sicher, dass es eine admin.ejs gibt
2024-06-06 20:45:42 +02:00
} ) ;
// Login und Registrierung anzeigen
2024-09-07 16:34:15 +02:00
app . get ( "/login" , ( req , res ) => {
req . session . message = [ "" , "" , "none" ] ;
res . render ( "login" , { session : req . session } ) ; // Stelle sicher, dass es eine login.ejs gibt
2024-06-06 20:45:42 +02:00
} ) ;
// Registrierung
2024-09-07 16:34:15 +02:00
app . get ( "/register" , ( req , res ) => {
res . render ( "register" , { session : req . session } ) ; // Stelle sicher, dass es eine register.ejs gibt
2024-06-06 20:45:42 +02:00
} ) ;
2024-09-07 16:45:12 +02:00
app . get ( "/contact" , ( req , res ) => {
res . render ( "contact" , { session : req . session } ) ;
2024-07-19 16:28:56 +02:00
} ) ;
2024-09-07 16:45:12 +02:00
app . get ( "/car" , ( req , res ) => {
res . render ( "car" , { session : req . session } ) ;
2024-07-19 16:28:56 +02:00
} ) ;
2024-09-07 16:45:12 +02:00
app . post ( "/car" , ( req , res ) => {
2024-07-19 16:28:56 +02:00
const { kennzeichen , message , contact } = req . body ;
2024-09-07 16:45:12 +02:00
let formattedLicensePlate = kennzeichen
. replace ( /[^a-zA-Z0-9]/g , "" )
. toUpperCase ( ) ;
2024-07-19 16:28:56 +02:00
2024-09-07 16:45:12 +02:00
if ( formattedLicensePlate == "DUKL445" ) {
if ( contact != "" ) {
bot . sendMessage ( telebotChatID , contact ) ;
2024-07-19 16:28:56 +02:00
}
bot . sendMessage ( telebotChatID , message ) ;
console . log ( message + contact ) ;
2024-09-07 16:45:12 +02:00
req . session . message = [ "Success" , "Nachricht versendet." , "none" ] ;
2024-07-19 16:28:56 +02:00
} else {
2024-09-07 16:45:12 +02:00
log . Info (
"Kontakt: " +
contact +
" - Nachricht: " +
message +
" - Kennzeichen: " +
kennzeichen
) ;
2024-07-19 16:28:56 +02:00
}
2024-09-07 16:45:12 +02:00
res . render ( "carsend" , { session : req . session } ) ;
2024-07-19 16:28:56 +02:00
} ) ;
2024-09-07 16:45:12 +02:00
app . get ( "/qr" , requireAuth , ( req , res ) => {
res . render ( "qrcode" , { session : req . session } ) ;
2024-07-19 17:05:11 +02:00
} ) ;
2024-09-07 16:45:12 +02:00
app . post ( "/qr" , requireAuth , ( req , res ) => {
const { text , invert } = req . body ;
2024-07-19 17:05:11 +02:00
const options = {
color : {
2024-09-07 16:45:12 +02:00
dark : invert ? "#FFFFFF" : "#000000" , // Farbe der QR-Code-Muster
light : invert ? "#000000" : "#FFFFFF" , // Farbe des Hintergrunds
} ,
2024-07-19 17:05:11 +02:00
} ;
QRCode . toDataURL ( text , options , ( err , url ) => {
if ( err ) {
2024-09-07 16:45:12 +02:00
return res . send ( "Fehler beim Generieren des QR-Codes" ) ;
2024-07-19 17:05:11 +02:00
}
2024-09-07 16:45:12 +02:00
res . render ( "qrcodeshow" , {
2024-07-19 17:05:11 +02:00
session : req . session ,
2024-09-07 16:45:12 +02:00
qrCodeUrl : url ,
} ) ;
2024-07-19 17:05:11 +02:00
} ) ;
} ) ;
2024-07-19 16:28:56 +02:00
2024-06-06 20:45:42 +02:00
// Startseite
2024-09-07 16:34:15 +02:00
app . get ( "/" , ( req , res ) => {
req . session . message = [ "" , "" , "none" ] ;
res . render ( "index" , { session : req . session } ) ;
2024-06-06 20:45:42 +02:00
} ) ;
2024-06-06 21:56:22 +02:00
//Datenschutz und Impressum
2024-09-07 16:34:15 +02:00
app . get ( "/impressum" , ( req , res ) => {
req . session . message = [ "" , "" , "none" ] ;
res . render ( "impressum" , { session : req . session } ) ;
2024-06-06 21:56:22 +02:00
} ) ;
2024-09-07 16:34:15 +02:00
const server = app . listen ( port , "0.0.0.0" , ( ) => {
2024-06-06 20:45:42 +02:00
log . Info ( ` Server is running on ${ process . env . HOST } : ${ port } / ` ) ;
2024-09-07 16:34:15 +02:00
} ) ;