diff --git a/modules/iapi.mjs b/modules/iapi.mjs index d5ca29fd..77212da9 100644 --- a/modules/iapi.mjs +++ b/modules/iapi.mjs @@ -264,10 +264,40 @@ class IAPI { } }); } - userLogout(req, token){ - + userLogout(req, uid, token){ + return new Promise((resolve, reject) => { + let promisePool = []; + let redisKey = this.rp + ":user_session:" + uid; + this.redis.lrange(redisKey, 0, -1, (err, results) => { + for(const element of results){ + let parsedElement = JSON.parse(element); + if(parsedElement.token === token){ + promisePool.push(new Promise((resolve, reject) => { + this.redis.lrem(redisKey, 0, element, (err, results) => { + if(err){ + reject(err); + }else{ + resolve(results); + } + }); + })); + } + } + return Promise.all(promisePool).then((results) => { + if(results.length > 0){ + resolve(); + }else{ + reject("Token not found"); + } + }).catch((err) => { + reject(err); + }); + }).catch((err) => { + reject(err); + }); + }); } - + //userSessionList(req, uid, token) } export { IAPI }; \ No newline at end of file diff --git a/modules/router.mjs b/modules/router.mjs index b17ce7ae..cc007f0b 100644 --- a/modules/router.mjs +++ b/modules/router.mjs @@ -133,12 +133,31 @@ function initializeRouter(mysqlConnection, redisConnection, siteConfig, log, sal } }); + blorumRouter.get('/user/permissions', function (req, res) { + }); + blorumRouter.post('/user/logout', function (req, res) { + let b = req.body; + res.set("Content-Type","application/json"); + res.set(commonHeader); + if(objHasAllProperties(b, "uid", "token")){ + iapi.userLogout(req, b.uid, b.token).then(function(result){ + res.sendStatus(200); + }).catch(function(err){ + res.status(500).send(err); + } + ); + }else{ + res.sendStatus(400); + } }); - blorumRouter.post('/user/invite', function (req, res) { + blorumRouter.post('/user/sessionList', function (req, res) { }); + blorumRouter.post('/user/invite', function (req, res) { + }); + blorumRouter.post('/user/remove', function (req, res) { });