klnodekb/routes/users.js

308 lines
11 KiB
JavaScript

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');
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'
}
});
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
});
}
})
});
// 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.update(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.update(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;