From 2af9ff58a22774fe46112a3a0ce056de8184044a Mon Sep 17 00:00:00 2001 From: Rosanny <rosanny.sihombing@hft-stuttgart.de> Date: Wed, 5 May 2021 18:33:28 +0200 Subject: [PATCH] restructure the routes --- routes/public.js | 169 +++++++++++++++++++++++- routes/routes-account.js | 271 ++++++++------------------------------- 2 files changed, 219 insertions(+), 221 deletions(-) diff --git a/routes/public.js b/routes/public.js index 9ebc2255..19ce7da2 100644 --- a/routes/public.js +++ b/routes/public.js @@ -10,7 +10,7 @@ const salt = 64 module.exports = function (app, config, lang) { - // ============= NEW USERS REGISTRATION =========================== + // ================== NEW USERS REGISTRATION ====================== app.get('/registration', function(req, res) { res.render(lang+'/account/registration') @@ -96,7 +96,172 @@ module.exports = function (app, config, lang) { } }) - // ============= CONTACT FORM =========================== + // =================== USERS VERIFICATION ========================= + + app.get("/verifyAccount", function(req, res){ + methods.getUserIdByVerificationToken(req.query.token, function(userId, err){ + if (userId) { + let userData = { + id: userId, + verificationStatus: 1 + } + methods.verifyUserAccount(userData, function(err){ + if (err) { + console.log("Error: "+err) + res.render(lang+'/account/verification', { + status: false + }); + } + else { + // send welcome email after successful account verification + methods.getUserById(userId, function(data, err){ + if (err) { + console.log("Error: "+err) + } + else { + // send email + var emailSubject = "Herzlich willkommen" + var emailContent = '<div>Lieber Nutzer,<br/><br/>' + + '<p>herzlich willkommen beim Transferportal der HFT Stuttgart!<br/>' + + 'Sie können nun alle Dienste des Portals nutzen.<p/><br/>' + constants.mailSignature; + mailer.options.to = data.email; + mailer.options.subject = emailSubject; + mailer.options.html = emailContent; + mailer.transport.sendMail(mailer.options, function(err) { + if (err) { + console.log('cannot send email') + throw err + } + }) + } + }) + + res.render(lang+'/account/verification', { + status: true + }); + } + }) + } + else { + res.render(lang+'/account/verification', { + status: null + }); + } + }) + }) + + // ==================== FORGOT PASSWORD =========================== + + app.get('/forgotPwd', function (req, res) { + res.render(lang+'/account/forgotPwd', { + user: req.user + }) + }) + app.post('/forgotPwd', function(req, res, next) { + let emailAddress = req.body.inputEmail + async.waterfall([ + function(done) { + crypto.randomBytes(20, function(err, buf) { + var token = buf.toString('hex') + done(err, token) + }) + }, + function(token, done) { + methods.checkUserEmail(emailAddress, function(err, user){ + if (user) { + var emailSubject = "Ihre Passwort-Anfrage an das Transferportal der HFT Stuttgart"; + var emailContent = '<div>Lieber Nutzer,<br/><br/>' + + '<p>wir haben Ihre Anfrage zur Erneuerung Ihres Passwortes erhalten. Falls Sie diese Anfrage nicht gesendet haben, ignorieren Sie bitte diese E-Mail.<br/><br/>' + + 'Sie können Ihr Passwort mit dem Klick auf diesen Link ändern: '+config.app.host+'/reset/' + token + '<br/>' + + 'Dieser Link ist aus Sicherheitsgründen nur für 1 Stunde gültig.<br/></p>' + constants.mailSignature + '</div>' + + var credentialData = { + user_id: user.id, + resetPasswordToken: token, + resetPasswordExpires: Date.now() + 3600000 // 1 hour + } + methods.updateCredential(credentialData, function(err) { + done(err, token, user); + }) + + // send email + mailer.options.to = emailAddress + mailer.options.subject = emailSubject + mailer.options.html = emailContent + mailer.transport.sendMail(mailer.options, function(err) { + done(err, 'done') + }); + } + else { + done(err, 'no user found') + } + }); + } + ], function(err) { + if (err) { + res.flash('error', 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.') + } + else { + res.flash('success', 'Wenn Ihre E-Mail-Adresse registriert ist, wurde eine E-Mail mit dem weiteren Vorgehen an ' + emailAddress + ' versendet.') + } + res.redirect('/account/forgotPwd') + }); + }) + + // reset + app.get('/reset/:token', function(req, res) { + methods.getUserByToken(req.params.token, function(err, user){ + if (!user) { + res.flash('error', 'Der Schlüssel zum zurücksetzen des Passworts ist ungültig oder abgelaufen.') + res.redirect('/account/forgotPwd') + } else { + res.render(lang+'/account/reset') + } + }) + }) + app.post('/reset/:token', function(req, res) { + var newPwd = req.body.inputNewPwd + methods.getUserByToken(req.params.token, function(err, user){ + if (user) { + // encrypt password + bcrypt.genSalt(saltRounds, function(err, salt) { + bcrypt.hash(newPwd, salt, function(err, hash) { + var credentialData = { + password: hash, + user_id: user.user_id + } + // update password + methods.updateCredential(credentialData, function(err){ + if (err) { + res.flash('error', "Datenbankfehler: Passwort kann nicht geändert werden.") + throw err + } + else { + res.flash('success', "Passwort aktualisiert!") + // send notifiaction email + mailer.options.to = user.email + mailer.options.subject = constants.updatePasswordMailSubject + mailer.options.html = constants.updatePasswordMailContent+'<div>'+constants.mailSignature+'</div>' + mailer.transport.sendMail(mailer.options, function(err) { + if (err) { + console.log(err) + } + }); + // redirect to login page + res.redirect('/login') + } + }) + }); + }); + } + else { + res.flash('error', "User not found.") + res.redirect('/login') + } + }) + }) + + // ======================= CONTACT FORM =========================== app.get('/contact', function (req, res) { res.render(lang+'/account/contact', { diff --git a/routes/routes-account.js b/routes/routes-account.js index 26b328a3..eb99e1fa 100644 --- a/routes/routes-account.js +++ b/routes/routes-account.js @@ -86,8 +86,6 @@ module.exports = function (app, config, passport, lang) { ); // ======== APP ROUTES - ACCOUNT ==================== - var updatePasswordMailSubject = "Ihr Passwort für das Transferportal wurde gespeichert." - var updatePasswordMailContent = '<div>Lieber Nutzer,<br/><br/>Ihr Passwort wurde erfolgreich geändert.<br/><br/>' + constants.mailSignature + '</div>'; async function getLoggedInUserData(email) { let user = await methods.getUserByEmail(email) @@ -315,8 +313,8 @@ module.exports = function (app, config, passport, lang) { } else { res.flash('success', "Passwort aktualisiert!") mailer.options.to = req.user.email - mailer.options.subject = updatePasswordMailSubject - mailer.options.html = updatePasswordMailContent + mailer.options.subject = constants.updatePasswordMailSubject + mailer.options.html = constants.updatePasswordMailContent+'<div>'+constants.mailSignature+'</div>' mailer.transport.sendMail(mailer.options, function(err) { if (err) { console.log(err) } }); @@ -331,119 +329,61 @@ module.exports = function (app, config, passport, lang) { }) } }); - - app.get('/forgotPwd', function (req, res) { - res.render(lang+'/account/forgotPwd', { - user: req.user - }); - }); - - app.post('/forgotPwd', function(req, res, next) { - let emailAddress = req.body.inputEmail - async.waterfall([ - function(done) { - crypto.randomBytes(20, function(err, buf) { - var token = buf.toString('hex'); - done(err, token); - }); - }, - function(token, done) { - methods.checkUserEmail(emailAddress, function(err, user){ - if (user) { - console.log("email: user found"); - var emailSubject = "Ihre Passwort-Anfrage an das Transferportal der HFT Stuttgart"; - var emailContent = '<div>Lieber Nutzer,<br/><br/>' + - '<p>wir haben Ihre Anfrage zur Erneuerung Ihres Passwortes erhalten. Falls Sie diese Anfrage nicht gesendet haben, ignorieren Sie bitte diese E-Mail.<br/><br/>' + - 'Sie können Ihr Passwort mit dem Klick auf diesen Link ändern: '+config.app.host+'/reset/' + token + '<br/>' + - 'Dieser Link ist aus Sicherheitsgründen nur für 1 Stunde gültig.<br/></p>' + constants.mailSignature + '</div>'; - - var credentialData = { - user_id: user.id, - resetPasswordToken: token, - resetPasswordExpires: Date.now() + 3600000 // 1 hour - } - methods.updateCredential(credentialData, function(err) { - done(err, token, user); - }); - - // send email - mailer.options.to = emailAddress; - mailer.options.subject = emailSubject; - mailer.options.html = emailContent; - mailer.transport.sendMail(mailer.options, function(err) { - done(err, 'done'); - }); - } - else { - done(err, 'no user found'); - } - }); - } - ], function(err) { - if (err) { - res.flash('error', 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.'); - } - else { - res.flash('success', 'Wenn Ihre E-Mail-Adresse registriert ist, wurde eine E-Mail mit dem weiteren Vorgehen an ' + emailAddress + ' versendet.'); - } - res.redirect('/account/forgotPwd'); - }); - }); - - app.get('/reset/:token', function(req, res) { - methods.getUserByToken(req.params.token, function(err, user){ - if (!user) { - res.flash('error', 'Der Schlüssel zum zurücksetzen des Passworts ist ungültig oder abgelaufen.') - res.redirect('/account/forgotPwd') - } - else { - res.render(lang+'/account/reset') - } - }); - }); - - app.post('/reset/:token', function(req, res) { - var newPwd = req.body.inputNewPwd - methods.getUserByToken(req.params.token, function(err, user){ - if (user) { - // encrypt password - bcrypt.genSalt(saltRounds, function(err, salt) { - bcrypt.hash(newPwd, salt, function(err, hash) { - var credentialData = { - password: hash, - user_id: user.user_id - } - // update password - methods.updateCredential(credentialData, function(err){ - if (err) { - res.flash('error', "Datenbankfehler: Passwort kann nicht geändert werden.") - throw err - } - else { - res.flash('success', "Passwort aktualisiert!") - // send notifiaction email - mailer.options.to = user.email - mailer.options.subject = updatePasswordMailSubject - mailer.options.html = updatePasswordMailContent + + app.get("/resendVerificationEmail", function(req, res){ + if (req.isAuthenticated()) { + var emailAddress = req.user.email + + methods.getUserIdByEmail(req.user.email, function(userId, err) { + if (!err) { + // get token + methods.getVerificationTokenByUserId(userId, function(token, err){ + if (!err) { + if (token) { + // send email + var emailSubject = "Bitte bestätigen Sie Ihr M4_LAB Benutzerkonto" + var emailContent = '<div>Lieber Nutzer,<br/><br/>' + + '<p>vielen Dank für Ihre Anmeldung am Transferportal der HFT Stuttgart. <br/>' + + 'Um Ihre Anmeldung zu bestätigen, klicken Sie bitte diesen Link: ' + config.app.host + '/verifyAccount?token=' + token + + '<br/><br/>' + + 'Ohne Bestätigung Ihres Kontos müssen wir Ihr Konto leider nach 7 Tagen löschen.</p><br/>' + constants.mailSignature + + '</div>'; + mailer.options.to = emailAddress; + mailer.options.subject = emailSubject; + mailer.options.html = emailContent; mailer.transport.sendMail(mailer.options, function(err) { if (err) { - console.log(err) + console.log('cannot send email') + throw err } - }); - // redirect to login page - res.redirect('/login') + }) + res.send(true) } - }) - }); - }); - } - else { - res.flash('error', "User not found.") - res.redirect('/login') - } - }); + else { + res.send(false) + } + } + else { + console.log(err) + } + }) + } + }) + } + }) - }); + app.get('/email/:email', function(req, res) { + methods.checkUserEmail(req.params.email, function(err, user){ + if (!err) { + if (user) { + res.send(false) + } + else { + res.send(true) + } + } + }) + }) // ============= NEW GITLAB PAGES =========================== @@ -641,111 +581,4 @@ module.exports = function (app, config, passport, lang) { } }) - // ============= USER VERIFICATION ================================ - app.get("/verifyAccount", function(req, res){ - methods.getUserIdByVerificationToken(req.query.token, function(userId, err){ - if (userId) { - let userData = { - id: userId, - verificationStatus: 1 - } - methods.verifyUserAccount(userData, function(err){ - if (err) { - console.log("Error: "+err) - res.render(lang+'/account/verification', { - status: false - }); - } - else { - // send welcome email after successful account verification - methods.getUserById(userId, function(data, err){ - if (err) { - console.log("Error: "+err) - } - else { - // send email - var emailSubject = "Herzlich willkommen" - var emailContent = '<div>Lieber Nutzer,<br/><br/>' + - '<p>herzlich willkommen beim Transferportal der HFT Stuttgart!<br/>' + - 'Sie können nun alle Dienste des Portals nutzen.<p/><br/>' + constants.mailSignature; - mailer.options.to = data.email; - mailer.options.subject = emailSubject; - mailer.options.html = emailContent; - mailer.transport.sendMail(mailer.options, function(err) { - if (err) { - console.log('cannot send email') - throw err - } - }) - } - }) - - res.render(lang+'/account/verification', { - status: true - }); - } - }) - } - else { - res.render(lang+'/account/verification', { - status: null - }); - } - }) - }) - app.get("/resendVerificationEmail", function(req, res){ - if (req.isAuthenticated()) { - var emailAddress = req.user.email - - methods.getUserIdByEmail(req.user.email, function(userId, err) { - if (!err) { - // get token - methods.getVerificationTokenByUserId(userId, function(token, err){ - if (!err) { - if (token) { - // send email - var emailSubject = "Bitte bestätigen Sie Ihr M4_LAB Benutzerkonto" - var emailContent = '<div>Lieber Nutzer,<br/><br/>' + - '<p>vielen Dank für Ihre Anmeldung am Transferportal der HFT Stuttgart. <br/>' + - 'Um Ihre Anmeldung zu bestätigen, klicken Sie bitte diesen Link: ' + config.app.host + '/verifyAccount?token=' + token + - '<br/><br/>' + - 'Ohne Bestätigung Ihres Kontos müssen wir Ihr Konto leider nach 7 Tagen löschen.</p><br/>' + constants.mailSignature + - '</div>'; - mailer.options.to = emailAddress; - mailer.options.subject = emailSubject; - mailer.options.html = emailContent; - mailer.transport.sendMail(mailer.options, function(err) { - if (err) { - console.log('cannot send email') - throw err - } - }) - res.send(true) - } - else { - res.send(false) - } - } - else { - console.log(err) - } - }) - } - }) - } - }) - - app.get('/email/:email', function(req, res) { - methods.checkUserEmail(req.params.email, function(err, user){ - if (!err) { - if (user) { - res.send(false) - } - else { - res.send(true) - } - } - }) - }) - } \ No newline at end of file -- GitLab