Commit 28fe54f1 authored by Rosanny Sihombing's avatar Rosanny Sihombing
Browse files

clean codes

parent 9b0bffa7
// check password and password confirmation input fields // check password and password confirmation input fields
// used in Security and Reset Password // used in Security and Reset Password
$('#inputNewPwd, #inputConfirm').on('keyup', function () { $('#inputNewPwd, #inputConfirm').on('keyup', function () {
var isBest, isMatch; let isBest, isMatch
isBest = checkPasswordReq($('#inputNewPwd').val()) isBest = checkPasswordReq($('#inputNewPwd').val())
$('#recommendation').empty(); $('#recommendation').empty()
if (!isBest) { if (!isBest) {
//$('#recommendation').html('Must be at least 8 characters').css('color', 'red'); // $('#recommendation').html('Must be at least 8 characters').css('color', 'red');
$('#recommendation').html('Das Passwort muss mindestens 8 Zeichen haben').css('color', 'red'); $('#recommendation').html('Das Passwort muss mindestens 8 Zeichen haben').css('color', 'red')
} }
// match or not? // match or not?
if ($('#inputNewPwd').val() == $('#inputConfirm').val()) { if ($('#inputNewPwd').val() == $('#inputConfirm').val()) {
//$('#message').html('Matching').css('color', 'green'); // $('#message').html('Matching').css('color', 'green');
$('#message').html('Übereinstimmend').css('color', 'green'); $('#message').html('Übereinstimmend').css('color', 'green')
isMatch = true; isMatch = true
} else { } else {
//$('#message').html('Not Matching').css('color', 'red'); // $('#message').html('Not Matching').css('color', 'red');
$('#message').html('Nicht übereinstimmend').css('color', 'red'); $('#message').html('Nicht übereinstimmend').css('color', 'red')
isMatch = false; isMatch = false
} }
// enable/disable update button // enable/disable update button
if (isBest && isMatch) { if (isBest && isMatch) {
$('#updateBtn').prop('disabled', false); $('#updateBtn').prop('disabled', false)
} else { } else {
$('#updateBtn').prop('disabled', true); $('#updateBtn').prop('disabled', true)
} }
}); })
\ No newline at end of file
This diff is collapsed.
...@@ -4,19 +4,18 @@ import methods from '../functions/methods' ...@@ -4,19 +4,18 @@ import methods from '../functions/methods'
import mailer from '../config/mailer' import mailer from '../config/mailer'
import constants from '../config/const' import constants from '../config/const'
const saltRounds:number = 10 const saltRounds: number = 10
const salt:number = 64 const salt: number = 64
export = function (app:any, config:any, lang:string) {
export = function (app: any, config: any, lang: string) {
// ================== NEW USERS REGISTRATION ====================== // ================== NEW USERS REGISTRATION ======================
app.get('/registration', function(req:any, res:any) { app.get('/registration', function (req: any, res: any) {
res.render(lang+'/account/registration') res.render(lang + '/account/registration')
}) })
app.post('/registration', function(req:any, res:any) { app.post('/registration', function (req: any, res: any) {
// user data // user data
let curDate:Date = new Date() const curDate: Date = new Date()
let userData:any = { const userData: any = {
salutation: req.body.inputSalutation, salutation: req.body.inputSalutation,
title: req.body.inputTitle, title: req.body.inputTitle,
firstname: req.body.inputFirstname, firstname: req.body.inputFirstname,
...@@ -25,65 +24,64 @@ export = function (app:any, config:any, lang:string) { ...@@ -25,65 +24,64 @@ export = function (app:any, config:any, lang:string) {
organisation: req.body.inputOrganisation, organisation: req.body.inputOrganisation,
industry: req.body.inputIndustry, industry: req.body.inputIndustry,
speciality: req.body.inputSpeciality, speciality: req.body.inputSpeciality,
createdDate: curDate.toISOString().slice(0,10) createdDate: curDate.toISOString().slice(0, 10)
} }
let userEmail:any = userData.email const userEmail: any = userData.email
let pos:number = userEmail.indexOf('@') const pos: number = userEmail.indexOf('@')
let emailLength:number = userEmail.length const emailLength: number = userEmail.length
let emailDomain:any = userEmail.slice(pos, emailLength); const emailDomain: any = userEmail.slice(pos, emailLength)
if ( emailDomain.toLowerCase() == "@hft-stuttgart.de") { if (emailDomain.toLowerCase() == '@hft-stuttgart.de') {
res.flash('error', "Fehlgeschlagen: HFT-Account") res.flash('error', 'Fehlgeschlagen: HFT-Account')
res.redirect('/account/registration') res.redirect('/account/registration')
} else { } else {
async.waterfall([ async.waterfall([
function(done:any) { function (done: any) {
// generate token // generate token
let token:string = ''; let token: string = ''
let randomChars:string = 'abcdefghijklmnopqrstuvwxyz0123456789'; const randomChars: string = 'abcdefghijklmnopqrstuvwxyz0123456789'
for ( let i = 0; i<40; i++ ) { for (let i = 0; i < 40; i++) {
token += randomChars.charAt(Math.floor(Math.random() * randomChars.length)); token += randomChars.charAt(Math.floor(Math.random() * randomChars.length))
} }
// encrypt password // encrypt password
bcrypt.genSalt(saltRounds, function(err, salt) { bcrypt.genSalt(saltRounds, function (err, salt) {
bcrypt.hash(req.body.inputPassword, salt, function(err:any, hash:any) { bcrypt.hash(req.body.inputPassword, salt, function (err: any, hash: any) {
let newAccount:any = { const newAccount: any = {
profile: userData, profile: userData,
password: hash, password: hash,
verificationToken: token verificationToken: token
} }
done(err, newAccount) done(err, newAccount)
}); })
}); })
}, },
// save data // save data
function(newAccount:any, err:any) { function (newAccount: any, err: any) {
methods.registerNewUser(newAccount, function(err:any){ methods.registerNewUser(newAccount, function (err: any) {
if (err) { if (err) {
res.flash('error', "Fehlgeschlagen") res.flash('error', 'Fehlgeschlagen')
} } else {
else {
// send email // send email
let emailSubject = "Bitte bestätigen Sie Ihr M4_LAB Benutzerkonto" const emailSubject = 'Bitte bestätigen Sie Ihr M4_LAB Benutzerkonto'
let emailContent = '<div>Lieber Nutzer,<br/><br/>' + const emailContent = '<div>Lieber Nutzer,<br/><br/>' +
'<p>vielen Dank für Ihre Anmeldung am Transferportal der HFT Stuttgart. <br/>' + '<p>vielen Dank für Ihre Anmeldung am Transferportal der HFT Stuttgart. <br/>' +
'Um Ihre Anmeldung zu bestätigen, klicken Sie bitte <a href='+config.app.host+'/verifyAccount?token='+newAccount.verificationToken+'>diesen Link</a> ' + 'Um Ihre Anmeldung zu bestätigen, klicken Sie bitte <a href=' + config.app.host + '/verifyAccount?token=' + newAccount.verificationToken + '>diesen Link</a> ' +
'<br/><br/>' + '<br/><br/>' +
'Ohne Bestätigung Ihres Kontos müssen wir Ihr Konto leider nach 7 Tagen löschen.</p><br/>' + constants.mailSignature + 'Ohne Bestätigung Ihres Kontos müssen wir Ihr Konto leider nach 7 Tagen löschen.</p><br/>' + constants.mailSignature +
'</div>'; '</div>'
mailer.options.to = req.body.inputEmail; mailer.options.to = req.body.inputEmail
mailer.options.subject = emailSubject; mailer.options.subject = emailSubject
mailer.options.html = emailContent; mailer.options.html = emailContent
mailer.transporter.sendMail(mailer.options, function(err:any) { mailer.transporter.sendMail(mailer.options, function (err: any) {
if (err) { if (err) {
console.error('Cannot send email. [Error] '+err) console.error('Cannot send email. [Error] ' + err)
throw err throw err
} }
}) })
// user feedback // user feedback
res.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'+ '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.') 'Wenn Sie die Mail nicht in ihrem Postfach vorfinden, prüfen Sie bitte auch Ihren Spam-Ordner.')
} }
res.redirect('/account/registration') res.redirect('/account/registration')
...@@ -93,62 +91,62 @@ export = function (app:any, config:any, lang:string) { ...@@ -93,62 +91,62 @@ export = function (app:any, config:any, lang:string) {
} }
}) })
// to check whether or not an account is already exist // to check whether or not an account is already exist
app.get('/email/:email', async function(req:any, res:any) { app.get('/email/:email', async function (req: any, res: any) {
let user = await methods.checkUserEmail(req.params.email) const user = await methods.checkUserEmail(req.params.email)
if (!user) { if (!user) {
console.log('No user found: '+req.params.email) console.log('No user found: ' + req.params.email)
res.send(true) res.send(true)
} else { } else {
console.log('User found: '+req.params.email) console.log('User found: ' + req.params.email)
res.send(false) res.send(false)
} }
}) })
// =================== USERS VERIFICATION ========================= // =================== USERS VERIFICATION =========================
app.get("/verifyAccount", async function(req:any, res:any){ app.get('/verifyAccount', async function (req: any, res: any) {
let userId:number = await methods.getUserIdByVerificationToken(req.query.token) const userId: number = await methods.getUserIdByVerificationToken(req.query.token)
if (!userId) { if (!userId) {
// no user found // no user found
res.render(lang+'/account/verification', { res.render(lang + '/account/verification', {
status: null status: null
}) })
} else { } else {
// a user found, verify the account // a user found, verify the account
let userData:any = { const userData: any = {
id: userId, id: userId,
verificationStatus: 1 verificationStatus: 1
} }
methods.verifyUserAccount(userData, async function(err:any){ methods.verifyUserAccount(userData, async function (err: any) {
if (err) { if (err) {
console.log("Error: "+err) console.log('Error: ' + err)
res.render(lang+'/account/verification', { res.render(lang + '/account/verification', {
status: false status: false
}); })
} else { } else {
// send welcome email after successful account verification // send welcome email after successful account verification
let userEmail:string = await methods.getUserEmailById(userId) const userEmail: string = await methods.getUserEmailById(userId)
if (!userEmail) { if (!userEmail) {
res.render(lang+'/account/verification', { res.render(lang + '/account/verification', {
status: false status: false
}) })
} else { } else {
// send email // send email
let emailSubject = "Herzlich willkommen"; const emailSubject = 'Herzlich willkommen'
let emailContent = '<div>Lieber Nutzer,<br/><br/>' + const emailContent = '<div>Lieber Nutzer,<br/><br/>' +
'<p>herzlich willkommen beim Transferportal der HFT Stuttgart!<br/>' + '<p>herzlich willkommen beim Transferportal der HFT Stuttgart!<br/>' +
'Sie können nun alle Dienste des Portals nutzen.<p/><br/>' + constants.mailSignature; 'Sie können nun alle Dienste des Portals nutzen.<p/><br/>' + constants.mailSignature
mailer.options.to = userEmail; mailer.options.to = userEmail
mailer.options.subject = emailSubject; mailer.options.subject = emailSubject
mailer.options.html = emailContent; mailer.options.html = emailContent
mailer.transporter.sendMail(mailer.options, function(err:any) { mailer.transporter.sendMail(mailer.options, function (err: any) {
if (err) { if (err) {
console.log('cannot send email'); console.log('cannot send email')
throw err; throw err
} }
}) })
res.render(lang+'/account/verification', { res.render(lang + '/account/verification', {
status: true status: true
}) })
} }
...@@ -159,38 +157,38 @@ export = function (app:any, config:any, lang:string) { ...@@ -159,38 +157,38 @@ export = function (app:any, config:any, lang:string) {
// ==================== FORGOT PASSWORD =========================== // ==================== FORGOT PASSWORD ===========================
app.get('/forgotPwd', function (req:any, res:any) { app.get('/forgotPwd', function (req: any, res: any) {
res.render(lang+'/account/forgotPwd', { res.render(lang + '/account/forgotPwd', {
user: req.user user: req.user
}) })
}) })
app.post('/forgotPwd', function(req:any, res:any) { app.post('/forgotPwd', function (req: any, res: any) {
let emailAddress = req.body.inputEmail const emailAddress = req.body.inputEmail
async.waterfall([ async.waterfall([
async function(done:any) { async function (done: any) {
let user = await methods.checkUserEmail(emailAddress) const user = await methods.checkUserEmail(emailAddress)
if (!user) { if (!user) {
console.log('No user found: '+emailAddress) console.log('No user found: ' + emailAddress)
} else { } else {
// generate token // generate token
let token:string = ''; let token: string = ''
let randomChars:string = 'abcdefghijklmnopqrstuvwxyz0123456789'; const randomChars: string = 'abcdefghijklmnopqrstuvwxyz0123456789'
for ( let i = 0; i<40; i++ ) { for (let i = 0; i < 40; i++) {
token += randomChars.charAt(Math.floor(Math.random() * randomChars.length)); token += randomChars.charAt(Math.floor(Math.random() * randomChars.length))
} }
let emailSubject = "Ihre Passwort-Anfrage an das Transferportal der HFT Stuttgart"; const emailSubject = 'Ihre Passwort-Anfrage an das Transferportal der HFT Stuttgart'
let emailContent = '<div>Lieber Nutzer,<br/><br/>' + const 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/>' + '<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/>' + '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>' 'Dieser Link ist aus Sicherheitsgründen nur für 1 Stunde gültig.<br/></p>' + constants.mailSignature + '</div>'
let credentialData = { const credentialData = {
user_id: user.id, user_id: user.id,
resetPasswordToken: token, resetPasswordToken: token,
resetPasswordExpires: Date.now() + 3600000 // 1 hour resetPasswordExpires: Date.now() + 3600000 // 1 hour
} }
let result = await methods.updateCredential(credentialData) const result = await methods.updateCredential(credentialData)
if (!result) { if (!result) {
console.log('failed to update credential') console.log('failed to update credential')
} else { } else {
...@@ -198,18 +196,17 @@ export = function (app:any, config:any, lang:string) { ...@@ -198,18 +196,17 @@ export = function (app:any, config:any, lang:string) {
mailer.options.to = emailAddress mailer.options.to = emailAddress
mailer.options.subject = emailSubject mailer.options.subject = emailSubject
mailer.options.html = emailContent mailer.options.html = emailContent
mailer.transporter.sendMail(mailer.options, function(err:any) { mailer.transporter.sendMail(mailer.options, function (err: any) {
if (err) { console.error(err) } if (err) { console.error(err) }
}) })
} }
} }
done(null) done(null)
} }
], function(err:any) { ], function (err: any) {
if (err) { if (err) {
res.flash('error', 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.') res.flash('error', 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.')
} } else {
else {
res.flash('success', 'Wenn Ihre E-Mail-Adresse registriert ist, wurde eine E-Mail mit dem weiteren Vorgehen an ' + emailAddress + ' versendet.') 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') res.redirect('/account/forgotPwd')
...@@ -217,89 +214,86 @@ export = function (app:any, config:any, lang:string) { ...@@ -217,89 +214,86 @@ export = function (app:any, config:any, lang:string) {
}) })
// reset // reset
app.get('/reset/:token', async function(req:any, res:any) { app.get('/reset/:token', async function (req: any, res: any) {
let user = await methods.getUserByToken(req.params.token) const user = await methods.getUserByToken(req.params.token)
if (!user) { if (!user) {
res.flash('error', 'Der Schlüssel zum zurücksetzen des Passworts ist ungültig oder abgelaufen.') res.flash('error', 'Der Schlüssel zum zurücksetzen des Passworts ist ungültig oder abgelaufen.')
res.redirect('/account/forgotPwd') res.redirect('/account/forgotPwd')
} else { } else {
res.render(lang+'/account/reset') res.render(lang + '/account/reset')
} }
}) })
app.post('/reset/:token', async function(req:any, res:any) { app.post('/reset/:token', async function (req: any, res: any) {
let newPwd = req.body.inputNewPwd const newPwd = req.body.inputNewPwd
let user = await methods.getUserByToken(req.params.token) const user = await methods.getUserByToken(req.params.token)
if (!user) { if (!user) {
res.flash('error', "User not found.") res.flash('error', 'User not found.')
res.redirect('/login') res.redirect('/login')
} else { } else {
// encrypt password // encrypt password
bcrypt.genSalt(saltRounds, function(err, salt) { bcrypt.genSalt(saltRounds, function (err, salt) {
bcrypt.hash(newPwd, salt, async function(err:any, hash) { bcrypt.hash(newPwd, salt, async function (err: any, hash) {
let credentialData = { const credentialData = {
password: hash, password: hash,
user_id: user.user_id, user_id: user.user_id,
resetPasswordToken: null, resetPasswordToken: null,
resetPasswordExpires: null resetPasswordExpires: null
} }
// update password // update password
let result = await methods.updateCredential(credentialData) const result = await methods.updateCredential(credentialData)
if (!result) { if (!result) {
console.log('Failed to reset password') console.log('Failed to reset password')
res.flash('error', "Datenbankfehler: Passwort kann nicht geändert werden.") res.flash('error', 'Datenbankfehler: Passwort kann nicht geändert werden.')
} else { } else {
res.flash('success', "Passwort aktualisiert!") res.flash('success', 'Passwort aktualisiert!')
// send notification email // send notification email
mailer.options.to = user.email mailer.options.to = user.email
mailer.options.subject = constants.updatePasswordMailSubject mailer.options.subject = constants.updatePasswordMailSubject
mailer.options.html = constants.updatePasswordMailContent+'<div>'+constants.mailSignature+'</div>' mailer.options.html = constants.updatePasswordMailContent + '<div>' + constants.mailSignature + '</div>'
mailer.transporter.sendMail(mailer.options, function(err:any) { mailer.transporter.sendMail(mailer.options, function (err: any) {
if (err) { console.log(err) } if (err) { console.log(err) }
}) })
} }
res.redirect('/login') res.redirect('/login')
}); })
}); })
} }
}) })
// ======================= CONTACT FORM =========================== // ======================= CONTACT FORM ===========================
app.get('/contact', function (req:any, res:any) { app.get('/contact', function (req: any, res: any) {
res.render(lang+'/account/contact', { res.render(lang + '/account/contact', {
user: req.user user: req.user
}) })
}) })
app.post('/contact', function(req:any, res:any, next:any) { app.post('/contact', function (req: any, res: any, next: any) {
//methods.currentDate(); // methods.currentDate();
let emailAddress = req.body.inputEmail; const emailAddress = req.body.inputEmail
let supportAddress = "support-transfer@hft-stuttgart.de"; const supportAddress = 'support-transfer@hft-stuttgart.de'
let inputName = req.body.name; const inputName = req.body.name
let inputContent = req.body.message; const inputContent = req.body.message
let emailSubject = "Ihre Anfrage an das Transferportal"; const emailSubject = 'Ihre Anfrage an das Transferportal'
let emailContent = "<div>Es wurde eine Anfrage an das Transferportal gestellt: <br/><br/>NAME: " + inputName + "<br/>NACHRICHT: "+ inputContent+"</div>"; const emailContent = '<div>Es wurde eine Anfrage an das Transferportal gestellt: <br/><br/>NAME: ' + inputName + '<br/>NACHRICHT: ' + inputContent + '</div>'
async.waterfall([ async.waterfall([
function(done:any) { function (done: any) {
// send email // send email
mailer.options.to = supportAddress; mailer.options.to = supportAddress
mailer.options.cc = emailAddress; mailer.options.cc = emailAddress
mailer.options.subject = emailSubject; mailer.options.subject = emailSubject
mailer.options.html = emailContent; mailer.options.html = emailContent
mailer.transporter.sendMail(mailer.options, function(err:any) { mailer.transporter.sendMail(mailer.options, function (err: any) {
done(err, 'done'); done(err, 'done')
}); })
} }
], function(err:any) { ], function (err: any) {
if (err) { if (err) {
console.error(err) console.error(err)
res.flash('error', 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.'); res.flash('error', 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.')
} } else {
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.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') res.redirect('/account/contact')
}) })
}) })
} }
Supports Markdown
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