pull/3/head
cn.yimian.xyz 4 years ago
parent 447befcffd
commit 35e47a1085
  1. 1
      package.json
  2. 65
      src/routes/index.js
  3. 21
      yarn.lock

@ -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",

@ -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);
}
}
})

@ -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"

Loading…
Cancel
Save