Commit ca5d01c5 authored by Rosanny Sihombing's avatar Rosanny Sihombing
Browse files

DE

parent 198aca69
......@@ -96,11 +96,15 @@ module.exports = function (app, config, passport, i18n) {
text: ""
};
var updatePasswordMailContent = "Hello,\n\n"+
"We would like to notify that your password has been successfully updated.\n\n"+
"Thanks,\nM4_LAB Team"
var updatePasswordMailSubject = "Your M4_LAB Password has been updated"
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 = "Lieber Nutzer,\n\n"+"Ihr Passwort wurde erfolgreich geändert.\n\n"+mailSignature
// ================ test i18n ==================
i18n.setLocale('de');
app.get('/de', function(req, res) {
......@@ -108,30 +112,32 @@ module.exports = function (app, config, passport, i18n) {
res.send(greeting)
});
var lang = 'DE'
// ======== APP ROUTES ====================
app.get('/account', function (req, res) {
app.get('/', function (req, res) {
if (req.isAuthenticated()) {
methods.getUserByEmail(req.user.email, function(data, err){
if (!err) {
res.render('home', {
greeting: i18n.__('Hello'),
res.render(lang+'/home', {
user: data
});
}
})
} else {
res.redirect('/account/login');
}
res.redirect('/login'); // localhost
}
});
app.get('/error', function (req, res) {
res.render('error')
res.render(lang+'/error')
});
app.get('/account/login',
app.get('/login',
passport.authenticate(config.passport.strategy,
{
successRedirect: '/account/',
failureRedirect: '/account/login'
successRedirect: '/',
failureRedirect: '/login'
})
);
......@@ -157,22 +163,22 @@ module.exports = function (app, config, passport, i18n) {
});
});
app.get('/account/profile', function (req, res) {
app.get('/profile', function (req, res) {
if (req.isAuthenticated()) {
methods.getUserByEmail(req.user.email, function(data, err){
if (!err) {
res.render('profile', {
res.render(lang+'/profile', {
user: data,
email: req.user.email
});
}
})
} else {
res.redirect('/account/login');
res.redirect('/login');
}
});
app.get('/account/services', function (req, res) {
app.get('/services', function (req, res) {
if (req.isAuthenticated()) {
async.waterfall([
// get userId by email from userdb
......@@ -225,29 +231,30 @@ module.exports = function (app, config, passport, i18n) {
}
// render the page
res.render('services', {
res.render(lang+'/services', {
user: req.user,
project: allProjects
});
}
])
} else {
res.redirect('/account/login');
res.redirect('/login');
}
});
app.get('/account/security', function (req, res) {
app.get('/security', function (req, res) {
if (req.isAuthenticated()) {
res.render('security', {
res.render(lang+'/security', {
user: req.user // useful for view engine, useless for HTML
});
} else {
res.redirect('/account/login');
res.redirect('/login');
}
});
app.post('/updateProfile', function (req, res) {
var userData = {
salutation: req.body.inputSalutation,
title: req.body.inputTitle,
firstname: req.body.inputFirstname,
lastname: req.body.inputLastname,
......@@ -267,11 +274,11 @@ module.exports = function (app, config, passport, i18n) {
else {
req.flash('success', 'Profile updated!');
}
res.redirect('/account/profile');
res.redirect('/profile');
})
}
} else {
res.redirect('/account/login');
res.redirect('/login');
}
});
......@@ -286,7 +293,7 @@ module.exports = function (app, config, passport, i18n) {
// Load hashed passwd from DB
dbconn.user.query('SELECT password FROM credential WHERE user_id='+userId, function (err, rows, fields) {
if (err) {
res.redirect('/account/500')
res.redirect('/500')
throw err
}
var userPwd = rows[0].password
......@@ -294,17 +301,21 @@ module.exports = function (app, config, passport, i18n) {
// check if the password is correct
bcrypt.compare(currPwd, userPwd, function(err, isMatch) {
if (err) {
res.redirect('/account/500')
res.redirect('/500')
throw err
}
else if (!isMatch) {
req.flash('error', "Sorry, your password was incorrect. Please double-check your password.")
res.redirect('/account/security')
//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.redirect('/account/security')
res.redirect('/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', "Passwords do no match. Please make sure you re-type your new password correctly.")
res.redirect('/account/security')
//res.redirect('/account/security')
res.redirect('/security')
}
else {
// update password
......@@ -316,13 +327,16 @@ 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', "Database error: Password cannot be modified.")
req.flash('error', "Datenbankfehler: Passwort kann nicht geändert werden.")
throw err
}
else {
req.flash('success', "Pasword updated!")
//req.flash('success', "Pasword updated!")
req.flash('success', "Passwort aktualisiert!")
mailOptions.to = req.user.email
mailOptions.subject = "Your M4_LAB Password has been updated"
//mailOptions.subject = "Your M4_LAB Password has been updated."
mailOptions.subject = updatePasswordMailSubject
mailOptions.text = updatePasswordMailContent
smtpTransport.sendMail(mailOptions, function(err) {
if (err) {
......@@ -330,7 +344,8 @@ module.exports = function (app, config, passport, i18n) {
}
});
}
res.redirect('/account/security')
//res.redirect('/account/security')
res.redirect('/security')
})
});
});
......@@ -342,12 +357,12 @@ module.exports = function (app, config, passport, i18n) {
})
}
else {
res.redirect('/account/login');
res.redirect('/login');
}
});
app.get('/forgotPwd', function (req, res) {
res.render('forgotPwd', {
res.render(lang+'/forgotPwd', {
user: req.user
});
});
......@@ -372,13 +387,19 @@ module.exports = function (app, config, passport, i18n) {
methods.checkUserEmail(emailAddress, function(err, user){
if (user) {
console.log("email: user found");
var emailSubject = "M4_LAB Password Reset";
var emailContent = "Hi User,\n\n"+
//var emailSubject = "M4_LAB Password Reset";
var emailSubject = "Ihre Passwort-Anfrage an das Transferportal der HFT Stuttgart";
/* var emailContent = "Hi User,\n\n"+
"we've received a request to reset your password. If you didn't make the request, just ignore this email.\n\n"+
"Otherwise, you can reset your password using this link: http://m4lab.hft-stuttgart.de/account/reset/" + token + "\n" +
"This password reset is only valid for 1 hour.\n\n"+
"Thanks,\nM4_LAB Team"
"Thanks,\nM4_LAB Team" */
var emailContent = "Lieber Nutzer,\n\n"+
"wir haben Ihre Anfrage zur Erneuerung Ihres Passwortes erhalten. Falls Sie diese Anfrage nicht gesendet haben, ignorieren Sie bitte diese E-Mail.\n\n"+
//"Sie können Ihr Passwort mit dem Klick auf diesen Link ändern: http://m4lab.hft-stuttgart.de/account/reset/" + token + "\n" + // test server
"Sie können Ihr Passwort mit dem Klick auf diesen Link ändern: http://localhost:9989/reset/" + token + "\n" + // localhost
"Dieser Link ist aus Sicherheitsgründen nur für 1 Stunde gültig.\n\n"+mailSignature
var credentialData = {
user_id: user.id,
resetPasswordToken: token,
......@@ -402,34 +423,30 @@ module.exports = function (app, config, passport, i18n) {
}
});
}
/*,
function(token, user, done) {
mailOptions.to = emailAddress;
mailOptions.subject = emailSubject;
mailOptions.text = emailContent;
smtpTransport.sendMail(mailOptions, function(err) {
done(err, 'done');
});
} */
], function(err) {
if (err) {
req.flash('error', 'An error occured. Please try again.');
//req.flash('error', 'An error occured. Please try again.');
req.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', '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.redirect('/account/forgotPwd');
//res.redirect('/account/forgotPwd'); // deployment
res.redirect('/forgotPwd'); // localhost
});
});
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.');
res.redirect('/account/forgotPwd');
//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.redirect('/account/forgotPwd'); // deployment
res.redirect('/forgotPwd'); // localhost
}
else {
res.render('reset');
res.render(lang+'/reset');
}
});
});
......@@ -448,11 +465,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', "Database error: Password cannot be modified.")
req.flash('error', "Datenbankfehler: Passwort kann nicht geändert werden.")
throw err
}
else {
req.flash('success', "Your pasword has been updated.")
//req.flash('success', "Your pasword has been updated.")
req.flash('success', "Passwort aktualisiert!")
// send notifiaction email
mailOptions.to = user.email
mailOptions.subject = updatePasswordMailSubject
......@@ -463,7 +482,7 @@ module.exports = function (app, config, passport, i18n) {
}
});
// redirect to login page
res.redirect('/account/login')
res.redirect('/login')
}
})
});
......@@ -471,7 +490,7 @@ module.exports = function (app, config, passport, i18n) {
}
else {
req.flash('error', "User not found.")
res.redirect('/account/login')
res.redirect('/login')
}
});
......@@ -479,7 +498,7 @@ module.exports = function (app, config, passport, i18n) {
// todo: user registration with captcha
app.get('/registration', function(req, res) {
res.render('registration')
res.render(lang+'/registration')
})
app.post('/registration', function(req, res) {
......@@ -490,6 +509,7 @@ module.exports = function (app, config, passport, i18n) {
// user data
var curDate = new Date()
var userData = {
salutation: req.body.inputSalutation,
title: req.body.inputTitle,
firstname: req.body.inputFirstname,
lastname: req.body.inputLastname,
......@@ -509,12 +529,15 @@ module.exports = function (app, config, passport, i18n) {
}
methods.registerNewUser(newAccount, function(err){
if (err) {
req.flash('error', "Failed");
//req.flash('error', "Failed")
req.flash('error', "Fehlgeschlagen")
}
else {
req.flash('success', 'Your account has been created. Please log in.');
//req.flash('success', 'Your account has been created. Please log in.')
req.flash('success', 'Ihr Benutzerkonto wurde angelegt. Bitte melden Sie sich an.')
}
res.redirect('/account/registration');
//res.redirect('/account/registration'); // deployment
res.redirect('/registration'); // localhost
})
});
});
......
......@@ -34,9 +34,9 @@ html(lang="de")
h5
span #{user.firstname} #{user.lastname}
div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical")
a(class="nav-link" href="#" aria-selected="true") Benutzerprofil
a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen
a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste
a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil
a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen
a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste
div(class="col-sm-9")
p content goes here
......
......@@ -35,8 +35,8 @@ html(lang="de")
span #{user.firstname} #{user.lastname}
div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical")
a(class="nav-link" href="#" aria-selected="true") Benutzerprofil
a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen
a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste
a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen
a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste
div(class="col-sm-9")
if successes
for success in successes
......@@ -48,9 +48,23 @@ html(lang="de")
a(class="close", href="#", data-dismiss="alert", aria-label="close") ×
form#profileForm(method="POST", action="/updateProfile")
div(class="form-row")
div(class='form-group col-md-2')
label(for="title") Anrede
select#inputSalutation(name="inputSalutation", class="form-control", , value=user.salutation)
option(value="") - Anrede -
option(value="Herr") Herr
option(value="Frau") Frau
option(value="Divers") Divers
script.
var salutationOptions = document.getElementById('inputSalutation').options;
for (i=0; i < salutationOptions.length; i++) {
if (salutationOptions[i].value == '#{user.salutation}')
salutationOptions[i].selected = true;
}
div(class='form-group col-md-2')
label(for="title") Titel
select#inputTitle(name="inputTitle", class="form-control", value=user.title)
option(value="") - Titel -
option(value="Prof.") Prof.
option(value="Dr.") Dr.
option(value="Dipl.-Ing.") Dipl.-Ing.
......@@ -61,15 +75,15 @@ html(lang="de")
if (titleOptions[i].value == '#{user.title}')
titleOptions[i].selected = true;
}
div(class='form-group col-md-3')
div(class='form-group col-md-2')
label(for="firstname") Vorname
input#inputFirstname(name="inputFirstname", type="text", class="form-control", placeholder="Vorname", value=user.firstname required)
div(class='form-group col-md-3')
div(class='form-group col-md-2')
label(for="lastname") Nachname
input#inputLastname(name="inputLastname", type="text", class="form-control", placeholder="Nachname", value=user.lastname required)
div(class="form-row")
div(class='form-group col-md-8')
label(for="email") Email
label(for="email") E-mail Adresse
input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="Email", value=email required)
div(class="form-row")
div(class='form-group col-md-8')
......@@ -83,7 +97,7 @@ html(lang="de")
div(class='form-group col-md-8')
label(for="speciality") Fachgebiete
input#inputSpeciality(name="inputSpeciality", type="text", class="form-control", placeholder="Fachgebiete", value=user.speciality)
input(type="submit", class="btn btn-primary", value="Update")
input(type="submit", class="btn btn-primary", value="Speichern")
// jQuery
script(src="https://code.jquery.com/jquery-3.3.1.min.js")
......
......@@ -82,7 +82,7 @@ html(lang="de")
p <em><small>* Pflichtfeld</small></em>
input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Senden" disabled)
br
p(class="text-center") Sie haben bereits ein Benutzerkonto? <a href="/account">Melden Sie sich hier an</a>.
p(class="text-center") Sie haben bereits ein Benutzerkonto? <a href="/login">Melden Sie sich hier an</a>.
// jQuery
......
......@@ -37,9 +37,9 @@ html(lang="de")
h5
span #{user.firstName} #{user.lastName}
div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical")
a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil
a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil
a(class="nav-link" href="#" aria-selected="false") Sicherheitseinstellungen
a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste
a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste
div(class="col-sm-9")
if successes
for success in successes
......@@ -53,18 +53,18 @@ html(lang="de")
div(class="form-group row")
label(for="currPwd") Aktuelles Passwort
input(id="inputCurrPwd", name="inputCurrPwd", type="password", class="form-control" required)
div(class="invalid-feedback") Please fill in this field.
div(class="invalid-feedback") Bitte füllen Sie dieses Feld aus.
div(class="form-group row")
label(for="newPwd") Neues Passwort
input#inputNewPwd(name="inputNewPwd", type="password", class="form-control" required)
span#recommendation
div(class="invalid-feedback") Please fill in this field.
div(class="invalid-feedback") Bitte füllen Sie dieses Feld aus.
div(class="form-group row")
label(for="confirm") Bestätigen Sie das neue Passwort
input#inputConfirm(name="inputConfirm", type="password", class="form-control" required)
span#message
div(class="invalid-feedback") Please fill in this field.
input#updateBtn(type="submit", class="btn btn-primary", value="Update Password" disabled)
div(class="invalid-feedback") Bitte füllen Sie dieses Feld aus.
input#updateBtn(type="submit", class="btn btn-primary", value="Passwort ändern" disabled)
// jQuery
script(src="https://code.jquery.com/jquery-3.3.1.min.js")
......
......@@ -34,8 +34,8 @@ html(lang="de")
h5
span #{user.firstName} #{user.lastName}
div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical")
a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil
a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen
a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil
a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen
a(class="nav-link" href="#" aria-selected="false") Projekte und Dienste
div(class="col-sm-9")
if successes
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment