const express = require('express'); const router = express.Router(); const bcrypt = require('bcryptjs'); const passport = require('passport'); const checkUserAdmin3 = require('../js/helperFuncs'); // Bring in User Model let User = require('../models/user'); var utils = require('../js/utils'); var nodemailer = require('nodemailer'); var generator = require('generate-password'); const emailFelado='klportal@outlook.com'; String.prototype.replaceAt=function(index, replacement) { return this.substr(0, index) + replacement+ this.substr(index + replacement.length); } // Register Form router.get('/register', function(req, res){ res.render('register'); }); // Email Értesítő var transporter = nodemailer.createTransport({ host: 'mail.klelectro.hu', port: 465, secret: true, auth: { user: 'munkanyilvantarto@klelectro.hu', pass: 'IoSn1Pb1' } }); // Regisztrációs email kiküldése function sendEmailNewPasswordNotify(user,visiblePassword) { var mailOptions = { from: emailFelado,//'munkanyilvantarto@klelectro.hu',//'szamlaertesito@gmail.com', to: user.email, subject: 'Munkanyílvántartó új jelszó.', text: 'That was easy!' }; mailOptions.text='Tisztelt '+user.name+'!\nÖn új jelszót kapott.\n\nBelépési adatok:\nWeblap: www.iotechnic.eu\nFelhasználó név: '+user.username+'\nJelszó: '+visiblePassword+'\n'; transporter.sendMail(mailOptions, function(error, info){ if (error) { console.log(error); } else { console.log('Email sent: ' + info.response); } }); } function sendEmailRegisterNotify(username,pwd,email) { var mailOptions = { from: 'munkanyilvantarto@klelectro.hu',//'szamlaertesito@gmail.com', to: email, subject: 'Munkanyílvántartó regisztráció.', text: 'That was easy!' }; mailOptions.text="Sikeres regisztráció!\nBelépési adatok:\nWeblap: www.iotechnic.eu\nFelhasználó név: "+username+"\nJelszó: "+pwd+"\n"; transporter.sendMail(mailOptions, function(error, info){ if (error) { console.log(error); } else { console.log('Email sent: ' + info.response); } }); } // Register Proccess router.post('/register', function(req, res){ const name = req.body.name; const email = req.body.email; const username = req.body.username; const password = req.body.password; const password2 = req.body.password2; req.checkBody('name', 'Name is required').notEmpty(); req.checkBody('email', 'Email is required').notEmpty(); req.checkBody('email', 'Email is not valid').isEmail(); req.checkBody('username', 'Username is required').notEmpty(); req.checkBody('password', 'Password is required').notEmpty(); req.checkBody('password2', 'Passwords do not match').equals(req.body.password); let errors = req.validationErrors(); if(errors){ res.render('register', { errors:errors }); } else { let newUser = new User({ name:name, email:email, username:username, auth: 'Test', password:password, user:req.user, chatId:'none' }); var visiblePassword=password; bcrypt.genSalt(10, function(err, salt){ bcrypt.hash(newUser.password, salt, function(err, hash){ if(err){ console.log(err); } newUser.password = hash; if(req.body.chk_AddUser==='on') { newUser.canAdd.user=true;} if(req.body.chk_AddWork==='on') { newUser.canAdd.work=true;} if(req.body.chk_AddDevice==='on') { newUser.canAdd.device=true;} if(req.body.chk_AddFiles==='on') { newUser.canAdd.files=true;} if(req.body.chk_EditUser==='on') { newUser.canModify.user= true;} if(req.body.chk_EditWork==='on') { newUser.canModify.work= true;} if(req.body.chk_EditDevice==='on') { newUser.canModify.device= true;} if(req.body.chk_DeleteUser==='on') { newUser.canDelete.user= true;} if(req.body.chk_DeleteWork==='on') { newUser.canDelete.work= true;} if(req.body.chk_DeleteDevice==='on') { newUser.canDelete.device= true;} if(req.body.chk_DeleteFiles==='on') { newUser.canDelete.files= true;} if(req.body.chk_DownloadFiles==='on') { newUser.canDownload= true;} if(req.body.chk_Invoices==='on') { newUser.canAccess.invoices= true;} if(req.body.chk_Clients==='on') { newUser.canAccess.clients= true;} if(req.body.chkIsadmin==='on') { newUser.isAdmin= true;} if(req.body.chkIsEmployee==='on') { newUser.isEmployee= true;} if (req.body.chk_InvoicesMail==='on') {newUser.notifyInvoices=true;} newUser.save(function(err){ if(err){ console.log(err); return; } else { req.flash('success','Sikeres regisztráció, kérem jelentkezzen be'); sendEmailRegisterNotify(newUser.username,visiblePassword,email); res.redirect('/users/login'); } }); }); }); } }); // Login Form router.get('/login', function(req, res){ res.render('login',{ user:req.user }); }); // Login Process router.post('/login', function(req, res, next){ passport.authenticate('local', { successRedirect:'/', failureRedirect:'/users/login', })(req, res, next); }); // logout router.get('/logout', function(req, res){ req.logout(); //utils.logAppend("Sikeres kijelentkezés",'req.user.username'); req.flash('success', 'Kijelentkezett'); res.redirect('/users/login'); }); // Edit Form router.get('/user_edit/:id', utils.ensureAuthenticated,function(req, res){ User.findById(req.params.id, function(err,user){ if (err) { req.flash('danger', 'Nincs ilyen felhasználó!'); res.render('user_edit',{ user:user, cuser:req.user }); } else { res.render('user_edit',{ user:user, cuser:req.user }); } }) }); // New Api key router.get('/newPassword/:id', utils.ensureAuthenticated,function (req, res) { //calling.aFunction(); let user={}; var password = generator.generate({ length: 10, numbers: true, symbols: true, }); bcrypt.genSalt(10, function(err, salt){ bcrypt.hash(password, salt, function(err, hash){ if(err){ console.log(err); res.send({'result': 'error'}); } else { user.password=hash; let query = {_id:req.params.id} User.findOneAndUpdate(query,user,{ returnNewDocument: true },function(err,document){ if(err){ console.log(err); res.send({'result': 'error'}); }else{ sendEmailNewPasswordNotify(document,password) //console.log(document.name); res.send({'result': 'success'}); } }); } }); }); }); // Register Proccess router.post('/user_edit/:id', function(req, res){ let user={}; req.checkBody('name', 'Név megadása kötelező').notEmpty(); req.checkBody('email', 'Email megadása kötelező').notEmpty(); req.checkBody('email', 'Nem valódi email cím').isEmail(); req.checkBody('username', 'Username megadása kötelező').notEmpty(); req.checkBody('password', 'Jelszó megadása kötelező').notEmpty(); req.checkBody('password2', 'A megadott jelszavak nem egyeznek').equals(req.body.password); //req.checkBody('passwordOld', 'A régi jelszó hibás').equals(req.user.password); let errors = req.validationErrors(); if(errors){ res.render('user_edit', { errors:errors, user:req.user }); } else { let query = {_id:req.user._id} //var oldpass=req.body.passwordOld; console.log("Current User:"); console.log(req.user); // console.log(oldpass); User.findById(req.params.id,function(err,eUser){ // eUser=aki adatait szerkesztjük query = {_id:eUser._id} // eUser.comparePassword(oldpass, function(err, isMatch) { //req.user.comparePassword(oldpass, function(err, isMatch) { // if (isMatch) { eUser.name = req.body.name; eUser.email = req.body.email; eUser.username = req.body.username; if(req.body.chk_AddUser==='on') { eUser.canAdd.user=true;} else { eUser.canAdd.user=false;} if(req.body.chk_AddWork==='on') { eUser.canAdd.work=true;} else { eUser.canAdd.work=false;} if(req.body.chk_AddDevice==='on') { eUser.canAdd.device=true;} else { eUser.canAdd.device=false;} if(req.body.chk_AddFiles==='on') { eUser.canAdd.files=true;} else { eUser.canAdd.files=false;} if(req.body.chk_EditUser==='on') { eUser.canModify.user= true;} else { eUser.canModify.user= false;} if(req.body.chk_EditWork==='on') { eUser.canModify.work= true;} else { eUser.canModify.work= false;} if(req.body.chk_EditDevice==='on') { eUser.canModify.device= true;} else { eUser.canModify.device= false;} if(req.body.chk_DeleteUser==='on') { eUser.canDelete.user= true;} else { eUser.canDelete.user= false;} if(req.body.chk_DeleteWork==='on') { eUser.canDelete.work= true;} else { eUser.canDelete.work= false;} if(req.body.chk_DeleteDevice==='on') { eUser.canDelete.device= true;} else { eUser.canDelete.device= false;} if(req.body.chk_DeleteFiles==='on') { eUser.canDelete.files= true;} else { eUser.canDelete.files= false;} if(req.body.chk_DownloadFiles==='on') { eUser.canDownload= true;} else { eUser.canDownload= false;} if(req.body.chk_Invoices==='on') { eUser.canAccess.invoices= true;} else { eUser.canAccess.invoices= false;} if(req.body.chk_Clients==='on') { eUser.canAccess.clients= true;} else { eUser.canAccess.clients= false;} if(req.body.chkIsadmin==='on') { eUser.isAdmin= true;} else { eUser.isAdmin= false;} if(req.body.chkIsEmployee==='on') { eUser.isEmployee= true;} else { eUser.isEmployee= false;} if (req.body.chk_InvoicesMail==='on') {eUser.notifyInvoices=true;} else {eUser.notifyInvoices=false;} if (req.body.password!=eUser.password)//!=req.user.password) { eUser.password = req.body.password; bcrypt.genSalt(10, function(err, salt){ bcrypt.hash(eUser.password, salt, function(err, hash){ if(err){ console.log(err); } eUser.password = hash; User.updateOne(query, eUser, function(err){ if(err){ req.flash('success','Felhasználói adatok módosítása sikertelen'); console.log(err); return; }else{ req.logout(); req.flash('success','Felhasználói adatok módosítása sikeres, kérem jelentkezzen be újra'); res.redirect('/users/login'); } }); }); }); } else { User.updateOne(query, eUser, function(err){ if(err){ req.flash('success','Felhasználói adatok módosítása sikertelen'); console.log(err); return; }else{ req.logout(); req.flash('success','Felhasználói adatok módosítása sikeres, kérem jelentkezzen be újra'); res.redirect('/users/login'); } }); } /* } else { req.flash('error','Hejtelen régi jelszót adott meg'); res.redirect('/users/user_edit/'+eUser._id); console.log('Incorrect password.' ); }*/ // }); }); } }); // Get User list router.get('/',utils.ensureAuthenticated,function(req,res){ checkUserAdmin3(req,function(err,res){ admin=res; console.log(admin); }); User.find({}, function(err,user){ var admin=false; if (err) { res.render('user', { title: 'Felhasználók', users: users, rot: admin }); }else { res.render('user', { title: 'Felhasználók', users: user, rot: admin }); } }); }); module.exports = router;