318 lines
8.6 KiB
JavaScript
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; |