const crypto = require('crypto') const exec = require('child_process').exec const CFG = require('../config') const tools = {} tools.createHash = function (pData, pHash, pSalt) { let hash = pHash || 'md5' let data = typeof pData === 'object' ? JSON.stringify(pData) : pData if (pSalt) { data = `${data}$-|-$${pSalt}` } return crypto.createHash(hash).update(data).digest('hex') } tools.buildClientInfo = function (req) { return { uaHash: tools.createHash(req.headers['user-agent']), ip: req.clientIp } } tools.jwt = {} tools.jwt.checkPayload = function (req, pPayload) { let clientInfo = tools.buildClientInfo(req) if (!pPayload.user) return 'user' if (!pPayload.user.id) return 'user.id' if (!pPayload.user.pass) return 'user.pass' if (!pPayload.clientInfo) return 'clientInfo' if (pPayload.clientInfo.ip !== clientInfo.ip) return 'clientInfo.ip' if (pPayload.clientInfo.uaHash !== clientInfo.uaHash) return 'clientInfo.uaHash' if (pPayload.sid !== CFG.jwt.sid) return 'clientInfo.sid' return null } tools.git = {} tools.git.currentRevision = '---' exec('git rev-parse --short HEAD | xargs echo -n', function (pErr, pStdout) { if (pStdout) tools.git.currentRevision = pStdout }) module.exports = tools