diff --git a/routes/routes-account.js b/routes/routes-account.js index ba892df8528ce50279fe71869546f76234f0f059..157ecf621951570797cb0b5547797692dcd085fb 100644 --- a/routes/routes-account.js +++ b/routes/routes-account.js @@ -12,12 +12,17 @@ const async = require('async') const crypto = require('crypto') const mailer = require('./mailer') const axios = require('axios') +const logoDir = 'public/upload/' +const tpGitlabURL = 'https://transfer.hft-stuttgart.de/gitlab/' -const myUser = require('../classes/user') -var loggedInUser +const portalUser = require('../classes/user') +const projectInformation = require('../classes/website') +const projectRepo = require('../classes/repo') module.exports = function (app, config, passport, i18n) { + var loggedInUser + // =========== PASSPORT ======= passport.serializeUser(function (user, done) { done(null, user); @@ -105,12 +110,6 @@ module.exports = function (app, config, passport, i18n) { // ======== APP ROUTES - ACCOUNT ==================== var updatePasswordMailSubject = "Ihr Passwort für das Transferportal wurde gespeichert." - // var mailSignature = "Mit den besten Grüßen,\ndas Transferportal-Team der HFT Stuttgart\n\n"+ - // "Transferportal der Hochschule für Technik Stuttgart\n"+ - // "Schellingstr. 24\n"+ - // "70174 Stuttgart\n"+ - // "m4lab@hft-stuttgart.de\n"+ - // "https://transfer.hft-stuttgart.de" var updatePasswordMailContent = '<div>Lieber Nutzer,<br/><br/>Ihr Passwort wurde erfolgreich geändert.<br/><br/>' + mailSignature + '</div>'; app.get('/', function (req, res) { @@ -119,29 +118,22 @@ module.exports = function (app, config, passport, i18n) { if (!err) { // Initialize user if (!loggedInUser) { - loggedInUser = new myUser() - loggedInUser.id = data.id - loggedInUser.email = req.user.email - loggedInUser.salutation = data.salutation - loggedInUser.title = data.title - loggedInUser.firstName = data.firstname - loggedInUser.lastName = data.lastname - loggedInUser.industry = data.industry - loggedInUser.organisation = data.organisation - loggedInUser.speciality = data.speciality - loggedInUser.m4lab_idp = data.m4lab_idp - loggedInUser.verificationStatus = data.verificationStatus - + loggedInUser = new portalUser( + data.id, req.user.email, data.salutation, data.title, data.firstname, data.lastname, data.industry, data.organisation, data.speciality, data.m4lab_idp, null, data.verificationStatus + ) methods.getGitlabId(data.id, function(gitlabUserId, err){ if(!err) { - loggedInUser.gitlabUserId = gitlabUserId + loggedInUser.setGitlabUserId(gitlabUserId) } - //console.log(loggedInUser) }) } + let userData = { + fullName: loggedInUser.getFullName(), + m4lab_idp: loggedInUser.getIdpStatus(), + verificationStatus: loggedInUser.getVerificationStatus()} res.render(lang+'/account/home', { - user: data + user: userData }); } }) @@ -181,6 +173,8 @@ module.exports = function (app, config, passport, i18n) { app.get('/profile', function (req, res) { if (req.isAuthenticated()) { + // RS: to be updated = get data from loggedinuser + console.log(loggedInUser) methods.getUserByEmail(req.user.email, function(data, err){ if (!err) { if (data.verificationStatus == 1) { @@ -202,39 +196,28 @@ module.exports = function (app, config, passport, i18n) { } }); - app.get('/services', function (req, res) { - if (req.isAuthenticated() && loggedInUser) { - if (loggedInUser.verificationStatus == 1) { + app.get('/services', function(req, res){ + if(!req.isAuthenticated() && !loggedInUser) { + res.redirect('/login') + } else { + let userData = { + fullName: loggedInUser.getFullName(), + m4lab_idp: loggedInUser.getIdpStatus()} + + if(loggedInUser.getVerificationStatus() != 1) { + res.render(lang+'/account/home', { + user: userData + }) + } else { let gitlabReposArr = [] let gitlabPagesArr = [] - let userData = { - firstname: loggedInUser.firstName, - lastname: loggedInUser.lastName, - m4lab_idp: loggedInUser.m4lab_idp} - if (loggedInUser.gitlabUserId) { - // GitLab is already activated for this user. Allow project creation. - /* - waterfall([ - function(callback){ - callback(null, 'one', 'two'); - }, - function(arg1, arg2, callback){ - callback(null, 'three'); - }, - function(arg1, callback){ - // arg1 now equals 'three' - callback(null, 'done'); - } - ], function (err, result) { - // result now equals 'done' - }); - */ + if(loggedInUser.getGitlabUserId()) { async.waterfall([ // check projects in runners function(callback) { let gitlabRunnersProjectIdsArr - gitlab.getProjectIdsFromRunners (loggedInUser.gitlabUserId, function(data){ + gitlab.getProjectIdsFromRunners(loggedInUser.getGitlabUserId(), function(data){ if(data.error) return res.status(500).send(data.data) gitlabRunnersProjectIdsArr = data.data @@ -243,7 +226,7 @@ module.exports = function (app, config, passport, i18n) { } ], function(err, gitlabRunnersProjectIdsArr) { // get user projects - gitlab.getUserProjects (loggedInUser.gitlabUserId, function(data){ + gitlab.getUserProjects (loggedInUser.getGitlabUserId(), function(data){ if (data.error) return res.status(500).send(data.data) let gitlabData = data.data @@ -251,22 +234,15 @@ module.exports = function (app, config, passport, i18n) { if (gitlabData[i].tag_list.includes('website')) { let idxRunners = gitlabRunnersProjectIdsArr.indexOf(gitlabData[i].id) let isWebsitePublished = false + //let isWebsitePublished = true if (idxRunners > 0) { isWebsitePublished = true } - let page = { - name: gitlabData[i].name, - description: gitlabData[i].description, - avatar_url: gitlabData[i].avatar_url, - web_url: gitlabData[i].web_url, - isPublished: isWebsitePublished} + let page = new projectInformation(loggedInUser.getGitlabUserId(), gitlabData[i].id, gitlabData[i].name, gitlabData[i].description, + gitlabData[i].avatar_url, null, null, isWebsitePublished) gitlabPagesArr.push(page) } else { - let repo = { - name: gitlabData[i].name, - description: gitlabData[i].description, - avatar_url: gitlabData[i].avatar_url, - web_url: gitlabData[i].web_url} + let repo = new projectRepo(loggedInUser.getGitlabUserId(), gitlabData[i].id, gitlabData[i].name, gitlabData[i].description, gitlabData[i].avatar_url) gitlabReposArr.push(repo) } } @@ -279,6 +255,7 @@ module.exports = function (app, config, passport, i18n) { }) }) } else { + // ========== to do next =================== gitlab.getUserIdByEmail(req.user.email, function(data){ if (!data.error) { let gitlabActivationData = { @@ -297,18 +274,13 @@ module.exports = function (app, config, passport, i18n) { } }) } - } else { - res.render(lang+'/account/home', { - user: data - }) } - } else { - res.redirect('/login') } }) app.get('/security', function (req, res) { if (req.isAuthenticated()) { + // RS: to be updated = get data from loggedinuser methods.getUserByEmail(req.user.email, function(data, err){ if (!err) { if (data.verificationStatus == 1 && data.m4lab_idp == 1) { @@ -343,15 +315,14 @@ module.exports = function (app, config, passport, i18n) { if (req.isAuthenticated()) { if (userData.email) { dbconn.user.query('UPDATE user SET ? WHERE email = "' +userData.email+'"', userData, function (err, rows, fields) { - //if (err) throw err; if (err) { - req.flash('error', "Failed"); + res.flash('error', "Failed") } else { - //req.flash('success', 'Profile updated!'); - req.flash('success', 'Ihr Benutzerprofil wurde aktualisiert!'); + res.flash('success', 'Ihr Benutzerprofil wurde aktualisiert!') } res.redirect('/account/profile'); + // RS: to be updated = update loggedinuser }) } } else { @@ -365,6 +336,7 @@ module.exports = function (app, config, passport, i18n) { var newPwd = req.body.inputNewPwd var retypePwd = req.body.inputConfirm + // RS: to be updated = get data from loggedinuser methods.getUserIdByEmail(req.user.email, function(userId, err) { if (!err) { // Load hashed passwd from DB @@ -386,15 +358,15 @@ module.exports = function (app, config, passport, i18n) { }) } else if (!isMatch) { - //req.flash('error', "Sorry, your password was incorrect. Please double-check your password.") - req.flash('error', "Das Passwort ist leider falsch. Bitte überprüfen Sie Ihre Eingabe.") + //res.flash('error', "Sorry, your password was incorrect. Please double-check your password.") + res.flash('error', "Das Passwort ist leider falsch. Bitte überprüfen Sie Ihre Eingabe.") //res.redirect('/security') res.redirect('/account/security') } else { if ( newPwd != retypePwd ) { - //req.flash('error', "Passwords do no match. Please make sure you re-type your new password correctly.") - req.flash('error', 'Passwörter stimmen nicht überein. Bitte stellen Sie sicher, dass Sie das Passwort beide Male genau gleich eingeben.') + //res.flash('error', "Passwords do no match. Please make sure you re-type your new password correctly.") + res.flash('error', 'Passwörter stimmen nicht überein. Bitte stellen Sie sicher, dass Sie das Passwort beide Male genau gleich eingeben.') res.redirect('/account/security') } else { @@ -407,13 +379,13 @@ module.exports = function (app, config, passport, i18n) { } methods.updateCredential(credentialData, function(err){ if (err) { - //req.flash('error', "Database error: Password cannot be modified.") - req.flash('error', "Datenbankfehler: Passwort kann nicht geändert werden.") + //res.flash('error', "Database error: Password cannot be modified.") + res.flash('error', "Datenbankfehler: Passwort kann nicht geändert werden.") throw err } else { - //req.flash('success', "Pasword updated!") - req.flash('success', "Passwort aktualisiert!") + //res.flash('success', "Pasword updated!") + res.flash('success', "Passwort aktualisiert!") mailer.options.to = req.user.email //mailOptions.subject = "Your M4_LAB Password has been updated." mailer.options.subject = updatePasswordMailSubject @@ -509,12 +481,12 @@ module.exports = function (app, config, passport, i18n) { } ], function(err) { if (err) { - //req.flash('error', 'An error occured. Please try again.'); - req.flash('error', 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.'); + //res.flash('error', 'An error occured. Please try again.'); + res.flash('error', 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.'); } else { - //req.flash('success', 'If your email is registered, an e-mail has been sent to ' + emailAddress + ' with further instructions.'); - req.flash('success', 'Wenn Ihre E-Mail-Adresse registriert ist, wurde eine E-Mail mit dem weiteren Vorgehen an ' + emailAddress + ' versendet.'); + //res.flash('success', 'If your email is registered, an e-mail has been sent to ' + emailAddress + ' with further instructions.'); + res.flash('success', 'Wenn Ihre E-Mail-Adresse registriert ist, wurde eine E-Mail mit dem weiteren Vorgehen an ' + emailAddress + ' versendet.'); } //res.redirect('/forgotPwd'); // deployment res.redirect('/account/forgotPwd'); // localhost @@ -524,8 +496,8 @@ module.exports = function (app, config, passport, i18n) { app.get('/reset/:token', function(req, res) { methods.getUserByToken(req.params.token, function(err, user){ if (!user) { - //req.flash('error', 'Password reset token is invalid or has expired.'); - req.flash('error', 'Der Schlüssel zum zurücksetzen des Passworts ist ungültig oder abgelaufen.'); + //res.flash('error', 'Password reset token is invalid or has expired.'); + res.flash('error', 'Der Schlüssel zum zurücksetzen des Passworts ist ungültig oder abgelaufen.'); //res.redirect('/forgotPwd'); // deployment res.redirect('/account/forgotPwd'); // deployment } @@ -549,13 +521,13 @@ module.exports = function (app, config, passport, i18n) { // update password methods.updateCredential(credentialData, function(err){ if (err) { - //req.flash('error', "Database error: Password cannot be modified.") - req.flash('error', "Datenbankfehler: Passwort kann nicht geändert werden.") + //res.flash('error', "Database error: Password cannot be modified.") + res.flash('error', "Datenbankfehler: Passwort kann nicht geändert werden.") throw err } else { - //req.flash('success', "Your pasword has been updated.") - req.flash('success', "Passwort aktualisiert!") + //res.flash('success', "Your pasword has been updated.") + res.flash('success', "Passwort aktualisiert!") // send notifiaction email mailer.options.to = user.email mailer.options.subject = updatePasswordMailSubject @@ -573,7 +545,7 @@ module.exports = function (app, config, passport, i18n) { }); } else { - req.flash('error', "User not found.") + res.flash('error', "User not found.") res.redirect('/login') } }); @@ -581,117 +553,226 @@ module.exports = function (app, config, passport, i18n) { }); // ============= NEW GITLAB PAGES =========================== - app.get('/newPages', function(req, res){ - if (req.isAuthenticated() && loggedInUser) { + + app.get('/newInformation', function(req, res){ + if (!req.isAuthenticated() && !loggedInUser) { + res.redirect('/login') + } else { let userData = { - firstName: loggedInUser.firstName, - lastName: loggedInUser.lastName, - m4lab_idp: loggedInUser.m4lab_idp - } - let projectData = { - name: null, - description: null, - avatar: null + fullName: loggedInUser.getFullName(), + m4lab_idp: loggedInUser.getIdpStatus() } - res.render(lang+'/account/newPages', { - user: userData, - project: projectData + res.render(lang+'/account/newInformation', { + user: userData }) } - else { - res.redirect('/login'); + }) + app.post('/newInformation', function(req, res) { + if(!req.isAuthenticated() && !loggedInUser) { + res.redirect('/login') + } else { + if (!req.body.name && !req.body.description) { + res.flash('error', 'Please provide the required data') + //res.redirect('/account/newInformation') + res.redirect('/newInformation') + } else { + let projectName = req.body.name.toLowerCase().replace(/\s/g, '-') + let projectDesc = req.body.description + let newInformation = new projectInformation(loggedInUser.getGitlabUserId(), null, projectName, projectDesc, null, null, null, false) + + if (!req.files) { + res.flash('error', 'Please choose a project logo') + //res.redirect('/account/newInformation') + res.redirect('/newInformation') + } else { + let newLogoFile = req.files.logo + async.waterfall([ + function(callback){ // upload logo + newLogoFile.mv(logoDir + newLogoFile.name, function(err) { + newLogoFile = logoDir+newLogoFile.name + callback(err, newLogoFile) + }) + }, + function(newLogoFile, callback){ // create a new GitLab Page + gitlab.createNewPages(newInformation, newLogoFile, function(data){ + let result = data.data + if (data.error) { + if(result.message.name == "has already been taken") { + res.flash("error", "Project name '"+newInformation.getName()+"' has already been taken, please choose another name.") + } else { + res.flash("error", "Something went wrong. Please try again.") + } + //res.redirect('/account/newInformation') + res.redirect('/newInformation') + } else { + newInformation.setId(result.id) + newInformation.setLogo(result.avatar_url) + newInformation.setSettingUrl(tpGitlabURL+result.namespace.path+'/'+result.name+'/-/edit/master/public/settings.js') + newInformation.setKontaktUrl(tpGitlabURL+result.namespace.path+'/'+result.name+'/-/edit/master/public/kontakt.html') + + res.flash("success", "Your website has been created, but not published yet. Please continue to Step 2 and Step 3 to have your new website published.") + //res.redirect('/account/updateInformation?id='+newInformation.getId()) + res.redirect('/updateInformation?id='+newInformation.getId()) + } + callback(null) + }) + } + ], function (err) { + if(err) console.log(err) + // remove logo + fs.unlink(newLogoFile, (err) => { + if(err) console.log(err) + }) + }) + } + } } }) - app.post('/newPages', function(req, res) { - if (req.isAuthenticated() && loggedInUser) { - if (req.files && req.body.name && req.body.description) { + app.get('/updateInformation', function(req, res){ + if(!req.isAuthenticated() && !loggedInUser) { + res.redirect('/login') + } else { + let userData = { + fullName: loggedInUser.getFullName(), + m4lab_idp: loggedInUser.getIdpStatus()} + + if(!req.query.id) { + res.redirect('/account/services') + } else { + gitlab.getUserProjects(loggedInUser.getGitlabUserId(), function(data){ + if (data.error) { + res.status(500).render(lang+'/500', { + error: data.data + }) + } else { + // quick way to decide whether a website is already published or not + let informationStatus + if(req.query.s != "y" && req.query.s != "n") { + res.redirect('/account/services') + } else { + if(req.query.s == "y") { + informationStatus = true + } else if(req.query.s == "n") { + informationStatus = false + } + let gitlabData = data.data + let curInformation = new projectInformation(loggedInUser.getGitlabUserId(), req.query.id, null, null, null, null, null, informationStatus) + for(let i = 0; i < gitlabData.length; i++){ + if (gitlabData[i].id == req.query.id) { + curInformation.setName(gitlabData[i].name) + curInformation.setDesc(gitlabData[i].description) + curInformation.setLogo(gitlabData[i].avatar_url) + curInformation.setSettingUrl(tpGitlabURL+gitlabData[i].namespace.path+'/'+gitlabData[i].name+'/-/edit/master/public/settings.js') + curInformation.setKontaktUrl(tpGitlabURL+gitlabData[i].namespace.path+'/'+gitlabData[i].name+'/-/edit/master/public/kontakt.html') + + break + } + } + res.render(lang+'/account/updateInformation', { + user: userData, + information: curInformation + }) + } + } + }) + } + } + }) + app.post('/updateInformation', function(req, res){ + if(!req.isAuthenticated() && !loggedInUser) { + res.redirect('/login') + } else { + if (!req.body.name && !req.body.description) { + res.flash('error', 'Please provide the required data') + //res.redirect('/account/updateInformation') + res.redirect('/updateInformation') + } else { let projectName = req.body.name.toLowerCase().replace(/\s/g, '-') let projectDesc = req.body.description - let projectAvatar = req.files.logo - let avatarDir = 'public/upload/' - - let userData = { - firstName: loggedInUser.firstName, - lastName: loggedInUser.lastName, - m4lab_idp: loggedInUser.m4lab_idp} + let updatedInformation = new projectInformation(loggedInUser.getGitlabUserId(), req.query.id, projectName, projectDesc, null, null, null, req.body.isPublished) + let newLogoFile async.waterfall([ - // upload avatar - function(done) { - projectAvatar.mv(avatarDir + projectAvatar.name, function(err) { - if (err) - return res.status(500).send(err) - console.log('avatar uploaded') - done(err) - }) + function(callback){ // upload logo + if(!req.files) { + callback(null, newLogoFile) + } else { + newLogoFile = req.files.logo + newLogoFile.mv(logoDir + newLogoFile.name, function(err) { + newLogoFile = logoDir + newLogoFile.name + callback(err, newLogoFile) + }) + } }, - // call gitlab - function(done) { - let newPagesData = { - gitlabUserId: loggedInUser.gitlabUserId, - name: projectName, - description: projectDesc, - avatar: avatarDir+projectAvatar.name} - gitlab.createNewPages(newPagesData, function(msg, err){ - if (err) { callback(err) } - else { - console.log(msg) - if(msg.message) { - if(msg.message.name == "has already been taken") { - let data = { - status: "error", - msg: "project name has already been taken, please choose another name"} - let projectData = { - name: projectName, - description: projectDesc, - avatar: projectAvatar} - - req.flash("error", data.msg) - res.render(lang+'/account/newPages', { - user: userData, - project: projectData - }) - } + function(newLogoFile, callback){ // update gitlab page + gitlab.updateProject(updatedInformation, newLogoFile, function(data){ + let result = data.data + if (data.error) { + if(result.message.name == "has already been taken") { + res.flash("error", "Project name has already been taken, please choose another name.") + } else { + res.flash("error", "Something went wrong. Please try again.") } - else { - let data = { - status: "success", - msg: "success"} - let projectData = { - name: projectName, - description: projectDesc, - avatar: projectAvatar, - webUrl: msg.web_url} - - req.flash("success", data.msg) - res.render(lang+'/account/newPages', { - user: userData, - project: projectData - }) - } + } else { + updatedInformation.setLogo(result.avatar_url) + updatedInformation.setSettingUrl(tpGitlabURL+result.namespace.path+'/'+result.name+'/-/edit/master/public/settings.js') + updatedInformation.setKontaktUrl(tpGitlabURL+result.namespace.path+'/'+result.name+'/-/edit/master/public/kontakt.html') + res.flash("success", "Your website has been updated") } - done(err) + //res.redirect('/account/updateInformation?id='+updatedInformation.getId()) + res.redirect('/updateInformation?id='+updatedInformation.getId()) + + callback(null) }) - }, - // delete avatar from /public/avatar - function(){ - fs.unlink(avatarDir+projectAvatar.name, (err) => { - if (err) throw err; - console.log('avatar is successfully deleted'); + } + ], function (err) { + if(err) console.log(err) + if(newLogoFile){ // remove logo + fs.unlink(newLogoFile, (err) => { + if(err) console.log(err) }) } - ]) - } - else { - console.log('Please provide the data') + }) } } - else { - res.redirect('/login'); + }) + + // RS: delete projektInformation? + + app.post('/sendPublishRequest', function(req, res) { + if (!req.isAuthenticated() && loggedInUser) { + res.redirect('/login') + } else { + let emailAddress = loggedInUser.getEmail() + let supportAddress = "support-transfer@hft-stuttgart.de" + //let supportAddress = "rosanny.sihombing@hft-stuttgart.de" + let projectName = req.body.projectName + let emailContent = "Guten Tag, \n\nhiermit beantrage Ich die Freischaltung einer Webseite auf dem Transferportal für folgendes Projekt: \n" + +projectName+"\n\nVielen Dank,\n"+loggedInUser.getFullName() + let emailSubject = "M4_LAB New Website Publish Request" + async.waterfall([ + function(done) { + mailer.options.to = supportAddress + mailer.options.cc = emailAddress + mailer.options.subject = emailSubject + mailer.options.text = emailContent + mailer.transport.sendMail(mailer.options, function(err) { + done(err, 'done') + }) + } + ], function(err) { + if (err) { + console.log(err) + res.send('Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.') + } + else { + res.send('Vielen Dank für Ihre Anfrage. Eine Kopie Ihrer Anfrage wurde an ' + emailAddress + ' versandt.') + } + }) } }) - + // ============= NEW USERS REGISTRATION =========================== app.get('/registration', function(req, res) { res.render(lang+'/account/registration') @@ -717,8 +798,8 @@ module.exports = function (app, config, passport, i18n) { var emailDomain = userEmail.slice(pos, emailLength); if ( emailDomain.toLowerCase() == "@hft-stuttgart.de") { - req.flash('error', "Fehlgeschlagen: HFT-Account") - res.redirect('/account/registration'); + res.flash('error', "Fehlgeschlagen: HFT-Account") + res.redirect('/account/registration') } else { let token @@ -746,7 +827,7 @@ module.exports = function (app, config, passport, i18n) { function(newAccount, err) { methods.registerNewUser(newAccount, function(err){ if (err) { - req.flash('error', "Fehlgeschlagen") + res.flash('error', "Fehlgeschlagen") } else { // send email @@ -772,7 +853,7 @@ module.exports = function (app, config, passport, i18n) { } }) // user feedback - req.flash('success', 'Vielen Dank für Ihre Registrierung!'+'\r\n\r\n'+ + res.flash('success', 'Vielen Dank für Ihre Registrierung!'+'\r\n\r\n'+ 'Wir haben Ihnen eine E-Mail an Ihre verwendete Adresse gesendet. Diese enthält einen Link zur Bestätigung Ihres Accounts.'+'\r\n'+ 'Wenn Sie die Mail nicht in ihrem Postfach vorfinden, prüfen Sie bitte auch Ihren Spam-Ordner.') } @@ -784,6 +865,7 @@ module.exports = function (app, config, passport, i18n) { }) // ============= USER VERIFICATION ================================ + // RS: update loggedInUser status after successfull verification? app.get("/verifyAccount", function(req, res){ console.log(req.query) methods.getUserIdByVerificationToken(req.query.token, function(userId, err){ @@ -899,10 +981,10 @@ module.exports = function (app, config, passport, i18n) { }) app.get('/contact', function (req, res) { - res.render(lang+'/account/contact', { - user: req.user - }); - }); + res.render(lang+'/account/contact', { + user: req.user + }) + }) app.post('/contact', function(req, res, next) { //methods.currentDate(); @@ -925,13 +1007,14 @@ module.exports = function (app, config, passport, i18n) { } ], function(err) { if (err) { - req.flash('error', 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.'); + res.flash('error', 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.'); } else { - req.flash('success', 'Vielen Dank für Ihre Anfrage. Wir melden uns baldmöglichst bei Ihnen. Eine Kopie Ihrer Anfrage wurde an ' + emailAddress + ' versandt.'); + res.flash('success', 'Vielen Dank für Ihre Anfrage. Wir melden uns baldmöglichst bei Ihnen. Eine Kopie Ihrer Anfrage wurde an ' + emailAddress + ' versandt.'); } //res.redirect('/forgotPwd'); // deployment res.redirect('/account/contact'); // localhost - }); - }); -}; \ No newline at end of file + }) + }) + +} \ No newline at end of file