2019-06-18 22:44:35 +00:00
|
|
|
/*
|
|
|
|
* This file is part of the authRXBN single sign-on package.
|
|
|
|
*
|
|
|
|
* (c) Ruben Meyer <contact@rxbn.de>
|
|
|
|
*/
|
|
|
|
|
|
|
|
var express = require('express');
|
|
|
|
var route = express.Router();
|
|
|
|
|
|
|
|
route.post('/register', (req, res) => {
|
|
|
|
if(!global['app'].cfg.web.registration) {
|
|
|
|
return res.type('json').status(400).end(JSON.stringify({status: 400, message: "msg.auth.registration.deactivated"}));
|
2019-11-30 22:42:34 +00:00
|
|
|
} else {
|
|
|
|
// TODO: register
|
|
|
|
return res.type('json').status(200).end(JSON.stringify({}));
|
2019-06-18 22:44:35 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
route.post('/login', (req, res) => {
|
2019-11-23 23:37:01 +00:00
|
|
|
/*
|
|
|
|
* done - check body vars -> else ERR 401 'msg.auth.login.failed'
|
|
|
|
* done - get users by mail / nickname -> else ERR 401 'msg.auth.login.failed' OR ERR 500 'msg.database.error'
|
|
|
|
* done - validate password hash -> else ERR 401 'msg.auth.login.failed'
|
|
|
|
* TODO - add new activity 'action.user.login'
|
|
|
|
*/
|
|
|
|
|
|
|
|
if(req.session.user) {
|
|
|
|
return res.type('json').end(JSON.stringify({
|
|
|
|
status: 401,
|
|
|
|
message: 'msg.auth.logout.required'
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
|
|
|
|
// check body variables
|
|
|
|
if(!req.body.email && !req.body.password) {
|
|
|
|
return res.type('json').status(401).end(JSON.stringify({
|
|
|
|
status: 401,
|
|
|
|
message: [
|
|
|
|
'msg.request.data.missing',
|
|
|
|
'msg.auth.login.failed'
|
|
|
|
]
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
let email = req.body.email;
|
|
|
|
let pass = req.body.password;
|
|
|
|
|
|
|
|
global['modules'].database.getUser(email, (err, rep) => {
|
|
|
|
console.log(err, rep);
|
|
|
|
if(err) {
|
|
|
|
global['logs'].debug(err);
|
|
|
|
return res.type('json').status(500).end(JSON.stringify({
|
|
|
|
status: 500,
|
|
|
|
message: [
|
|
|
|
'msg.database.error',
|
|
|
|
'msg.auth.login.failed'
|
|
|
|
]
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
if(!rep || rep === null || rep.length == 0 || rep.length > 1 || !global['modules'].auth.validateHash(rep[0].passhash, pass)) {
|
|
|
|
return res.type('json').status(401).end(JSON.stringify({
|
|
|
|
status: 401,
|
|
|
|
message: 'msg.auth.login.failed'
|
|
|
|
}));
|
|
|
|
} else {
|
|
|
|
// add cookies; login
|
|
|
|
// new activity 'action.user.login'
|
|
|
|
|
|
|
|
// add session data
|
|
|
|
req.session.user = {
|
|
|
|
'id': rep[0]._id,
|
|
|
|
'group': rep[0].group
|
|
|
|
};
|
|
|
|
|
|
|
|
return res.type('json').end(JSON.stringify({
|
|
|
|
status: 200,
|
|
|
|
message: 'msg.auth.login.successful',
|
|
|
|
type: 'form' // TODO: types - { form, access_app}
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
});
|
2019-06-18 22:44:35 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
route.post('/authenticate', (req, res) => {
|
|
|
|
// TODO: authenticate
|
|
|
|
});
|
|
|
|
|
2019-11-30 22:42:34 +00:00
|
|
|
route.get('/redirect', (req, res) => {
|
|
|
|
if(req.session && req.session.user) {
|
|
|
|
if(!req.query || !req.query.id) {
|
|
|
|
return res.type('json').status(500).end(JSON.stringify({
|
|
|
|
status: 500,
|
|
|
|
message: [
|
|
|
|
'msg.request.data.missing'
|
|
|
|
]
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
global['modules'].database.setAuthCode({
|
|
|
|
aId: req.query.id,
|
|
|
|
uId: req.session.user.id
|
|
|
|
}, (err, rep) => {
|
|
|
|
if(err) {
|
|
|
|
global['logs'].debug(err);
|
|
|
|
return res.type('json').status(500).end(JSON.stringify({
|
|
|
|
status: 500,
|
|
|
|
message: [
|
|
|
|
'msg.database.error'
|
|
|
|
]
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
else if(rep) {
|
|
|
|
global['modules'].database.getApps((err2, rep2) => {
|
|
|
|
if(err2) {
|
|
|
|
global['logs'].debug(err2);
|
|
|
|
return res.type('json').status(500).end(JSON.stringify({
|
|
|
|
status: 500,
|
|
|
|
message: [
|
|
|
|
'msg.database.error'
|
|
|
|
]
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
rep2.forEach((app) => {
|
|
|
|
if(app.id == req.query.id) {
|
|
|
|
return res.redirect(app.access+"?uid="+req.session.user.id+"&token="+rep.token);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
return res.type('json').status(500).end(JSON.stringify({
|
|
|
|
status: 500,
|
|
|
|
message: [
|
|
|
|
'msg.database.error'
|
|
|
|
]
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
return res.type('json').end(JSON.stringify({
|
|
|
|
status: 401,
|
|
|
|
message: 'msg.auth.login.required'
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2019-06-18 22:44:35 +00:00
|
|
|
route.get('/logout', (req, res) => {
|
2019-11-30 22:42:34 +00:00
|
|
|
if(!req.session || !req.session.user) {
|
2019-06-18 22:44:35 +00:00
|
|
|
return res.type('json').end(JSON.stringify({
|
|
|
|
status: 401,
|
|
|
|
message: 'msg.auth.login.required'
|
|
|
|
}));
|
|
|
|
} else {
|
|
|
|
res.clearCookie('RememberMe');
|
|
|
|
req.session.destroy();
|
|
|
|
return res.type('json').end(JSON.stringify({
|
|
|
|
status: 200,
|
|
|
|
message: 'msg.auth.logout.successful'
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
if(global['gds'].debug) {
|
|
|
|
// DEBUG info
|
|
|
|
route.get('/info', (req, res) => {
|
|
|
|
let obj = {};
|
|
|
|
if(req.session) obj.session = req.session;
|
|
|
|
if(req.cookies) obj.cookie = req.cookies;
|
|
|
|
res.type('json').end(JSON.stringify(obj));
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = route;
|