diff --git a/app.js b/app.js
index 5680690e17ddac58af6c0f9c59b19d833042c36a..8d28149d7a4c9e75caf207b894989eb912d37c96 100644
--- a/app.js
+++ b/app.js
@@ -13,14 +13,9 @@ const helmet = require('helmet');
const compression = require('compression');
const methodOverride = require('method-override');
-const i18n = require('i18n'); // internationalization
-i18n.configure({
- locales:['de', 'en'],
- directory: './locales'
-});
-
var env = process.env.NODE_ENV || 'testing';
const config = require('./config/config')[env];
+const lang = 'DE';
var app = express();
@@ -44,9 +39,7 @@ app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(express.static(path.join(__dirname, 'public')));
-app.use(i18n.init);
app.use((req, res, next) => {
- res.setLocale('de');
next();
});
@@ -68,17 +61,18 @@ app.use(function(req, res, next) {
next();
});
-require('./routes/routes-account')(app, config, passport, i18n);
+require('./routes/routes-account')(app, config, passport, lang);
+require('./routes/public')(app, config, lang);
// Handle 404
app.use(function (req, res) {
- res.status(404).render('DE/404')
+ res.status(404).render(lang+'/404')
})
// Handle 500 - any server error
app.use(function (err, req, res, next) {
console.error(err.stack)
- res.status(500).render('DE/500', {
+ res.status(500).render(lang+'/500', {
error: err
})
})
diff --git a/config/const.js b/config/const.js
new file mode 100644
index 0000000000000000000000000000000000000000..dcbb821a4bf191c8a5ddd0dd10e9e0abab0a1c56
--- /dev/null
+++ b/config/const.js
@@ -0,0 +1,19 @@
+module.exports = {
+
+ mailSignature: 'Mit den besten Grüßen,
das Transferportal-Team der HFT Stuttgart
' +
+ 'Transferportal der Hochschule für Technik Stuttgart
' +
+ 'Schellingstr. 24 70174 Stuttgart
' +
+ 'm4lab@hft-stuttgart.de
' +
+ 'https://transfer.hft-stuttgart.de
' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ '' +
+ '' +
+ '
',
+ updatePasswordMailSubject: "Ihr Passwort für das Transferportal wurde gespeichert.",
+ updatePasswordMailContent: '
Lieber Nutzer,
' +
- '
herzlich willkommen beim Transferportal der HFT Stuttgart!
' +
- 'Sie können nun alle Dienste des Portals nutzen.
' + 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 = "Lieber Nutzer,\n\n"+
- // "vielen Dank für Ihre Anmeldung am Transferportal der HFT Stuttgart. "+
- // "\nUm Ihre Anmeldung zu bestätigen, klicken Sie bitte diesen Link: "+config.app.host+"/verifyAccount?token="+token+
- // "\n\nOhne Bestätigung Ihres Kontos müssen wir Ihr Konto leider nach 7 Tagen löschen.\n\n"+mailSignature
- var emailContent = '
Lieber Nutzer,
' +
- '
vielen Dank für Ihre Anmeldung am Transferportal der HFT Stuttgart.
' +
- 'Um Ihre Anmeldung zu bestätigen, klicken Sie bitte diesen Link: ' + config.app.host + '/verifyAccount?token=' + token +
- '
' +
- 'Ohne Bestätigung Ihres Kontos müssen wir Ihr Konto leider nach 7 Tagen löschen.
' + mailSignature +
- '
';
- 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)
- }
- }
- })
- })
-
- app.get('/contact', function (req, res) {
- res.render(lang+'/account/contact', {
- user: req.user
- })
- })
-
- app.post('/contact', function(req, res, next) {
- //methods.currentDate();
- let emailAddress = req.body.inputEmail;
- let supportAddress = "support-transfer@hft-stuttgart.de";
- let inputName = req.body.name;
- let inputContent = req.body.message;
- let emailContent = "Es wurde eine Anfrage an das Transferportal gestellt: \n\n NAME: " + inputName + "\n NACHRICHT:\n "+ inputContent;
- let emailSubject = "Ihre Anfrage an das Transferportal";
- async.waterfall([
- function(done) {
- // send email
- 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) {
- res.flash('error', 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.');
- }
- else {
- 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('/account/contact')
- })
- })
-
}
\ No newline at end of file
diff --git a/routes/public.js b/routes/public.js
new file mode 100644
index 0000000000000000000000000000000000000000..19ce7da250b99b0602a6d45123cc8c544a2648e8
--- /dev/null
+++ b/routes/public.js
@@ -0,0 +1,301 @@
+const methods = require('../functions/methods')
+const async = require('async')
+const mailer = require('../config/mailer')
+const constants = require('../config/const')
+// pwd encryption
+const crypto = require('crypto')
+const bcrypt = require('bcryptjs')
+const saltRounds = 10
+const salt = 64
+
+module.exports = function (app, config, lang) {
+
+ // ================== NEW USERS REGISTRATION ======================
+
+ app.get('/registration', function(req, res) {
+ res.render(lang+'/account/registration')
+ })
+ app.post('/registration', function(req, res) {
+ // user data
+ var curDate = new Date()
+ var userData = {
+ salutation: req.body.inputSalutation,
+ title: req.body.inputTitle,
+ firstname: req.body.inputFirstname,
+ lastname: req.body.inputLastname,
+ email: req.body.inputEmail,
+ organisation: req.body.inputOrganisation,
+ industry: req.body.inputIndustry,
+ speciality: req.body.inputSpeciality,
+ createdDate: curDate.toISOString().slice(0,10)
+ }
+
+ var userEmail = userData.email
+ var pos = userEmail.indexOf('@')
+ var emailLength = userEmail.length
+ var emailDomain = userEmail.slice(pos, emailLength);
+
+ if ( emailDomain.toLowerCase() == "@hft-stuttgart.de") {
+ res.flash('error', "Fehlgeschlagen: HFT-Account")
+ res.redirect('/account/registration')
+ } else {
+ let token
+ async.waterfall([
+ function(done) {
+ crypto.randomBytes(20, function(err, buf) {
+ token = buf.toString('hex');
+ done(err, token);
+ });
+ },
+ // encrypt password
+ function(token, done) {
+ bcrypt.genSalt(saltRounds, function(err, salt) {
+ bcrypt.hash(req.body.inputPassword, salt, function(err, hash) {
+ var newAccount = {
+ profile: userData,
+ password: hash,
+ verificationToken: token
+ }
+ done(err, newAccount)
+ });
+ });
+ },
+ // save data
+ function(newAccount, err) {
+ methods.registerNewUser(newAccount, function(err){
+ if (err) {
+ res.flash('error', "Fehlgeschlagen")
+ }
+ else {
+ // send email
+ var emailSubject = "Bitte bestätigen Sie Ihr M4_LAB Benutzerkonto"
+ var emailContent = '
Lieber Nutzer,
' +
+ '
vielen Dank für Ihre Anmeldung am Transferportal der HFT Stuttgart.
' +
+ 'Um Ihre Anmeldung zu bestätigen, klicken Sie bitte diesen Link ' +
+ '
' +
+ 'Ohne Bestätigung Ihres Kontos müssen wir Ihr Konto leider nach 7 Tagen löschen.
' + constants.mailSignature +
+ '
';
+ mailer.options.to = req.body.inputEmail;
+ mailer.options.subject = emailSubject;
+ mailer.options.html = emailContent;
+ mailer.transport.sendMail(mailer.options, function(err) {
+ if (err) {
+ console.log('cannot send email')
+ throw err
+ }
+ })
+ // user feedback
+ 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.')
+ }
+ res.redirect('/account/registration')
+ })
+ }
+ ])
+ }
+ })
+
+ // =================== 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 = '
Lieber Nutzer,
' +
+ '
herzlich willkommen beim Transferportal der HFT Stuttgart!
' +
+ 'Sie können nun alle Dienste des Portals nutzen.
' + 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 = '
Lieber Nutzer,
' +
+ '
wir haben Ihre Anfrage zur Erneuerung Ihres Passwortes erhalten. Falls Sie diese Anfrage nicht gesendet haben, ignorieren Sie bitte diese E-Mail.
' +
+ 'Sie können Ihr Passwort mit dem Klick auf diesen Link ändern: '+config.app.host+'/reset/' + token + '
' +
+ 'Dieser Link ist aus Sicherheitsgründen nur für 1 Stunde gültig.
' + constants.mailSignature + '
'
+
+ 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+'
'+constants.mailSignature+'
'
+ 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', {
+ user: req.user
+ })
+ })
+ app.post('/contact', function(req, res, next) {
+ //methods.currentDate();
+ let emailAddress = req.body.inputEmail;
+ let supportAddress = "support-transfer@hft-stuttgart.de";
+ let inputName = req.body.name;
+ let inputContent = req.body.message;
+ let emailContent = "Es wurde eine Anfrage an das Transferportal gestellt: \n\n NAME: " + inputName + "\n NACHRICHT:\n "+ inputContent;
+ let emailSubject = "Ihre Anfrage an das Transferportal";
+ async.waterfall([
+ function(done) {
+ // send email
+ 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) {
+ res.flash('error', 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.');
+ }
+ else {
+ 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('/account/contact')
+ })
+ })
+
+}
\ No newline at end of file
diff --git a/views/DE/account/contact.pug b/views/DE/account/contact.pug
index 937926036ae76d55d45a43e1f67d6828c3de912e..99c37ce949e6a54d2e8c31b406d8a674edc73058 100644
--- a/views/DE/account/contact.pug
+++ b/views/DE/account/contact.pug
@@ -6,10 +6,7 @@ html(lang="de")
meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no")
link(rel="stylesheet", type="text/css", href="/css/bootstrap.min.css")
link(rel="stylesheet", type="text/css", href="/css/m4lab.css")
- link(rel="stylesheet", type="text/css", href="/fonts/ionicons.min.css")
link(rel="stylesheet", type="text/css", href="/css/Contact-Form-Clean.css")
- link(rel="stylesheet", type="text/css", href="/css/Testimonials.css")
- link(rel="stylesheet", type="text/css", href="/css/custom/login.css")
link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous")
body
div(class="container")
@@ -32,9 +29,9 @@ html(lang="de")
div(class="form-group")
textarea#message(class="form-control" name="message" placeholder="Nachricht" rows="14")
div(class="form-group")
- input#submitBtn(class="btn contact_send_btn" type="submit" value="SENDEN")
+ input#submitBtn(class="btn btn-primary" type="submit" value="SENDEN")
div(class="contact-clean contact_footer")
- form(method="POST")
+ form
p(class="m_top_25")
Hochschule für Technik StuttgartInstitut für Angewandte Forschung
Innovative Hochschule - Projekt M4_LAB
Schellingstr. 24
70174 Stuttgart
Deutschland
support-transfer@hft-stuttgart.dewww.hft-stuttgart.de /
www.hft-stuttgart.de/M4LAB
div(class="background_8a348b")
div(class="container")
diff --git a/views/DE/account/security.pug b/views/DE/account/security.pug
index bd021a682c64235580b13c2a2892205116e9b676..897086e660881f7ddbd4ec9121e4b300536f1ec1 100644
--- a/views/DE/account/security.pug
+++ b/views/DE/account/security.pug
@@ -20,7 +20,7 @@ html(lang="de")
ul(class="flex-md-column flex-row navbar-nav w-100 justify-content-between")
li(class="nav-item")
a(class="nav-link pl-0 text-nowrap" href="/account/")
- span(class="font-weight-bold color_black") #{user.firstname} #{user.lastname}
+ span(class="font-weight-bold color_black") #{user.firstName} #{user.lastName}
li(class="nav-item")
a(class="nav-link pl-0" href="/account/profile")
i(class="fa fa-user fa-fw")