diff --git a/package.json b/package.json index 53ce2e1..6928cf8 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "express": "~4.16.1", "express-ws": "^4.0.0", "http-errors": "~1.6.3", + "md5": "^2.3.0", "morgan": "~1.9.1", "pug": "^2.0.4", "redis": "^2.8.0", diff --git a/src/routes/index.js b/src/routes/index.js index ca1729f..f7df3c2 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -2,6 +2,7 @@ var express = require('express'); var expressWs = require('express-ws'); var router = express.Router(); var redis = require('redis'); +var md5 = require('md5'); /* redis start */ @@ -9,36 +10,56 @@ var rc = new redis.createClient({ host: 'redis' }); -router.get('/set', function(req, res, next) { + +var checkRedirect = (id, resolve, reject) => { + rc.get('session/redirect/'+id, (err, val) => { + if(err){ + setTimeout(checkRedirect, 20, id, resolve, reject); + }else{ + resolve(val); + } + }); +} + +var getAddress = (fp, mask) => { + let id = md5(fp+mask); + return new Promise((resolve, reject) => { + checkRedirect(id, resolve, reject); + }); +} + +router.get('/set', async function(req, res, next) { res.header('Access-Control-Allow-Origin', '*'); - if(!req.query.key || !req.query.val || !req.query.fp || !req.query.t) {res.send({"code":"500"});;return;} - - rc.hset('session/'+req.query.fp, req.query.key, req.query.val); - rc.hset('session/'+req.query.fp, 'LastOperateTime', req.query.t); + if(!req.query.key || !req.query.val || !req.query.fp || !req.query.t || !req.query.mask) {res.send({"code":"500"});;return;} + let hash = await getAddress(req.query.fp, req.query.mask); + rc.hset('session/dialog/'+hash, req.query.key, req.query.val); + rc.hset('session/dialog/'+hash, 'LastOperateTime', req.query.t); res.send({code:"200"}); }); -router.get('/del', function(req, res, next) { +router.get('/del', async function(req, res, next) { res.header('Access-Control-Allow-Origin', '*'); - if(!req.query.del || !req.query.fp || !req.query.t) {res.send({"code":"500"});;return;} + if(!req.query.del || !req.query.fp || !req.query.mask || !req.query.t) {res.send({"code":"500"});;return;} - rc.hdel('session/'+req.query.fp, req.query.del); - rc.hset('session/'+req.query.fp, 'LastOperateTime', req.query.t); + let hash = await getAddress(req.query.fp, req.query.mask); + rc.hdel('session/dialog/'+hash, req.query.del); + rc.hset('session/dialog/'+hash, 'LastOperateTime', req.query.t); res.send({code:"200"}); }); -router.get('/get', function(req, res, next) { +router.get('/get', async function(req, res, next) { res.header('Access-Control-Allow-Origin', '*'); - if(!req.query.fp) {res.send({"code":"500"});;return;} + if(!req.query.fp || !req.query.mask) {res.send({"code":"500"});;return;} + let hash = await getAddress(req.query.fp, req.query.mask); var o = {}; - rc.hkeys('session/'+req.query.fp, function(err, keys){ + rc.hkeys('session/dialog/'+hash, function(err, keys){ if(!err){ if(!keys.length){ res.send(o); } keys.forEach(function(key, i){ - rc.hget('session/'+req.query.fp, key, function(err2, val){ + rc.hget('session/dialog/'+hash, key, function(err2, val){ if(!err2){ o[key] = val; if(i == keys.length - 1){ @@ -58,20 +79,22 @@ router.get('/get', function(req, res, next) { expressWs(router); router - .ws('/', function (ws, req){ - if(req.query.fp.length == 8){ + .ws('/', async function (ws, req){ + if(req.query.fp.length == 6 && req.query.mask){ var fp = req.query.fp; + var mask = req.query.mask; + var hash = await getAddress(req.query.fp, req.query.mask); }else{ ws.close(); } ws.on('message', function (msg) { if(msg == 'get'){ var o = {}; - rc.hkeys('session/'+fp, function(err, keys){ + rc.hkeys('session/dialog/'+hash, function(err, keys){ if(!err){ keys.forEach(function(key, i){ - rc.hget('session/'+fp, key, function(err2, val){ + rc.hget('session/dialog/'+hash, key, function(err2, val){ if(!err2){ o[key] = val; if(i == keys.length - 1){ @@ -85,12 +108,12 @@ router }else if(isJson(msg)){ obj = JSON.parse(msg); if(obj.del && obj.t){ - rc.hdel('session/'+fp, obj.del); - rc.hset('session/'+fp, 'LastOperateTime', obj.t); + rc.hdel('session/dialog/'+hash, obj.del); + rc.hset('session/dialog/'+hash, 'LastOperateTime', obj.t); } if(obj.key && obj.val && obj.t){ - rc.hset('session/'+fp, obj.key, obj.val); - rc.hset('session/'+fp, 'LastOperateTime', obj.t); + rc.hset('session/dialog/'+hash, obj.key, obj.val); + rc.hset('session/dialog/'+hash, 'LastOperateTime', obj.t); } } }) diff --git a/yarn.lock b/yarn.lock index 5375c17..91aeb0b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -134,6 +134,11 @@ character-parser@^2.1.1: dependencies: is-regex "^1.0.3" +charenc@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= + clean-css@^4.1.11: version "4.2.3" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" @@ -198,6 +203,11 @@ core-js@^2.4.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== +crypt@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= + debug@2.6.9, debug@~2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -353,7 +363,7 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-buffer@^1.1.5: +is-buffer@^1.1.5, is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== @@ -413,6 +423,15 @@ longest@^1.0.1: resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= +md5@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" + integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== + dependencies: + charenc "0.0.2" + crypt "0.0.2" + is-buffer "~1.1.6" + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"