nas-denar/routes/user.js
2017-09-14 20:06:51 +02:00

318 lines
8.6 KiB
JavaScript

var express = require('express');
var router = express.Router();
var speakeasy = require('speakeasy');
var qrcode = require('qrcode-npm');
var funkcije = require('./funkcije')
var options = require('./dbconfig');
//
// Postresql
//
var Pool = require('pg').Pool;
var config = {
user: 'matjaz',
password: 'mesnjak',
database: 'supervizor',
host: 'server.dev',
port: 5432,
max: 10,
idleTimeoutMillis: 30000,
};
var pool = new Pool(config);
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('OK');
});
router.get('/registracija', function(req, res, next) {
var secret = speakeasy.generateSecret();
var qr = qrcode.qrcode(5, 'M');
qr.addData(secret.otpauth_url);
qr.make();
var imgTag = qr.createImgTag(4);
res.render('user/registracija', {title:"Registracija", tempSecret: secret.base32, imgtag: imgTag});
});
router.post('/registracija', function(req, res, next) {
console.log(req.body.uporabniskoime + ' ' + req.body.secret + ' ' + req.body.tempsecret);
var uporabnik = req.body.uporabniskoime;
var userToken = req.body.secret;
var base32secret = req.body.tempsecret;
var verified = speakeasy.totp.verify({secret: base32secret, encoding: 'base32', token: userToken});
if(verified) {
pool.query('INSERT INTO uporabniki (ime, secret) values($1, $2)', [uporabnik, base32secret], function(err) {
if(err) {
res.render('user/registracija', {title: "Ime je že zasedeno", tempSecret: err, imgtag: ""})
} else {
res.render('user/prijava', {title: "Registracija uspela. Lahko se prijavite"})
}
});
} else {
res.render('user/registracija', {title: "Napačno geslo", tempSecret: "", imgtag: ""})
}
})
router.get('/prijava', function(req, res, next) {
res.render('user/prijava', {title: "Prijava"});
})
router.post('/prijava', function(req, res, next) {
var uporabnik = req.body.uporabniskoime;
var userToken = req.body.secret;
var naprava = req.headers['user-agent'];
pool.query('SELECT secret, id FROM uporabniki where ime = $1', [uporabnik], function(err, result) {
if(err) {
res.render('user/prijava', {title: "Napaka pri povezavi na bazo"});
console.log('Napaka pri povezavi na bazo: '+ err);
} else {
if(!result.rows[0]) {
res.redirect('/user/prijava');
} else {
var base32secret = result.rows[0].secret;
var userid = result.rows[0].id;
var verified = speakeasy.totp.verify({secret: base32secret, encoding: 'base32', token: userToken})
if(verified) {
var randomNumber=Math.random().toString();
randomNumber=randomNumber.substring(2,randomNumber.length);
pool.query('INSERT INTO seja VALUES ($1, $2, now()+ interval \'30 days\', $3)', [userid, randomNumber, naprava], function(err) {
if(err) {
res.render('user/prijava', {title: "Prijava ni uspela"});
} else {
res.cookie('uplink',randomNumber, { maxAge: 30 * 24 * 60 * 60 * 1000, httpOnly: true });
console.log('cookie created successfully');
res.redirect('/user/profil');
}
})
} else {
res.render('user/prijava', {title: "Prijava ni uspela"});
}
}
}
})
})
router.get('/profil', function(req, res, next) {
var sessionid = req.cookies.uplink;
funkcije.jePrijavljen(sessionid, function(err, result) {
if(err) {
res.redirect('/user/prijava');
}
else {
res.render('user/profil', {title: 'Profil uporabnika ' + result.ime, uporabnik: result})
}
})
})
router.get('/api/vseseje', function(req, res, next) {
var sessionid = req.cookies.uplink;
funkcije.jePrijavljen(sessionid, function(err, result) {
if(err) {
res.send({napaka: err});
}
else {
pool.query('SELECT * FROM seja WHERE userid = $1', [result.id], function(err, result) {
if(err) {
res.send({napaka: err});
}
else {
var seje = {}
seje.data = result.rows
res.send(seje)
}
})
}
})
})
router.get('/api/zbrisisejo/:sid', function(req, res, next) {
var sessionid = req.cookies.uplink;
funkcije.jePrijavljen(sessionid, function(err, result) {
if(err) {
res.send({napaka: err});
}
else {
pool.query('DELETE FROM seja WHERE userid = $1 AND sid = $2', [result.id, req.params.sid], function(err) {
if(err) {
res.send({napaka: err});
}
else {
console.log('Brišem sejo ...')
res.send('OK')
}
})
}
})
})
router.get('/odjava', function(req, res, next) {
var sessionid = req.cookies.uplink;
funkcije.jePrijavljen(sessionid, function(err, result) {
if(err) {
res.redirect('/')
}
else {
pool.query('DELETE FROM seja WHERE userid = $1 AND sid = $2', [result.id, sessionid], function(err) {
if(err) {
res.redirect('/')
}
else {
console.log('Brišem sejo ... odjava')
res.clearCookie('uplink')
res.redirect('/')
}
})
}
})
})
router.post('/api/shrani', function(req, res, next) {
var sessionid = req.cookies.uplink;
var setIme = req.body.setIme;
var setJS = req.body.setJS;
var setZS = req.body.setZS;
funkcije.jePrijavljen(sessionid, function(err, result) {
if(err) {
res.send({napaka: err});
}
else {
pool.query('INSERT INTO seti (userid, ime, set_js, set_zs) VALUES ($1, $2, $3, $4)', [result.id, setIme, setJS, setZS], function(err) {
if(err) {
res.send({napaka: err});
}
else {
res.send('OK')
}
})
}
})
})
router.get('/api/vsiseti', function(req, res, next) {
var sessionid = req.cookies.uplink;
funkcije.jePrijavljen(sessionid, function(err, result) {
if(err) {
res.send({napaka: err});
}
else {
pool.query('SELECT * FROM seti WHERE userid = $1', [result.id], function(err, result) {
if(err) {
res.send({napaka: err});
}
else {
var seti = {}
seti.data = result.rows
res.send(seti)
}
})
}
})
})
router.get('/api/zbrisiset/:id', function(req, res, next) {
var sessionid = req.cookies.uplink;
funkcije.jePrijavljen(sessionid, function(err, result) {
if(err) {
res.send({napaka: err});
}
else {
pool.query('DELETE FROM seti WHERE userid = $1 AND id = $2', [result.id, req.params.id], function(err) {
if(err) {
res.send({napaka: err});
}
else {
res.send('OK')
}
})
}
})
})
router.get('/api/getset/:id', function(req, res, next) {
var sessionid = req.cookies.uplink;
funkcije.jePrijavljen(sessionid, function(err, result) {
if(err) {
res.send({napaka: err});
}
else {
pool.query('SELECT * FROM seti WHERE userid = $1 AND id=$2', [result.id, req.params.id], function(err, result) {
if(err) {
console.log('Napaka 3 ' + err)
res.send({napaka: err});
}
else {
res.send(result.rows[0])
}
})
}
})
})
router.get('/api/zbrisiuporabnika/:id', function(req, res, next) {
var sessionid = req.cookies.uplink;
funkcije.jeAdmin(sessionid, function(err, result) {
if(err) {
res.send({napaka: err});
}
else {
var napaka;
pool.query('DELETE FROM uporabniki WHERE id = $1', [req.params.id], function(err) {
if(err) {
console.log('Napaka 3 ' + err)
napaka += err + '\n';
}
})
pool.query('DELETE FROM seja WHERE userid = $1', [req.params.id], function(err) {
if(err) {
console.log('Napaka 3 ' + err)
napaka += err + '\n';
}
})
if(napaka) {
res.send({napaka: napaka})
}
else {
res.send('OK')
}
}
})
})
router.get('/api/vsiuporabniki', function(req, res, next) {
var sessionid = req.cookies.uplink;
funkcije.jeAdmin(sessionid, function(err, result) {
if(err) {
res.send({err: "Niste prijavljeni"})
}
else {
pool.query('SELECT * FROM uporabniki', [], function(err, result) {
if(err) {
res.send({napaka: err});
}
else {
var seti = {}
seti.data = result.rows
res.send(seti)
}
})
}
})
})
router.get('/admin', function(req, res, next) {
var sessionid = req.cookies.uplink;
funkcije.jeAdmin(sessionid, function(err, result) {
if(err) {
res.redirect('/user/prijava');
}
else {
res.render('user/admin', {uporabnik: result, title: 'Administracija uporabnikov'})
}
})
})
module.exports = router;