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;