yapi/server/utils/token.js
2019-01-30 10:13:43 +08:00

68 lines
2.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const yapi = require('../yapi')
const crypto = require('crypto');
/*
下面是使用加密算法
*/
// 创建加密算法
const aseEncode = function(data, password) {
// 如下方法使用指定的算法与密码来创建cipher对象
const cipher = crypto.createCipher('aes192', password);
// 使用该对象的update方法来指定需要被加密的数据
let crypted = cipher.update(data, 'utf-8', 'hex');
crypted += cipher.final('hex');
return crypted;
};
// 创建解密算法
const aseDecode = function(data, password) {
/*
该方法使用指定的算法与密码来创建 decipher对象, 第一个算法必须与加密数据时所使用的算法保持一致;
第二个参数用于指定解密时所使用的密码其参数值为一个二进制格式的字符串或一个Buffer对象该密码同样必须与加密该数据时所使用的密码保持一致
*/
const decipher = crypto.createDecipher('aes192', password);
/*
第一个参数为一个Buffer对象或一个字符串用于指定需要被解密的数据
第二个参数用于指定被解密数据所使用的编码格式,可指定的参数值为 'hex', 'binary', 'base64'等,
第三个参数用于指定输出解密数据时使用的编码格式,可选参数值为 'utf-8', 'ascii' 或 'binary';
*/
let decrypted = decipher.update(data, 'hex', 'utf-8');
decrypted += decipher.final('utf-8');
return decrypted;
};
const defaultSalt = 'abcde';
exports.getToken = function getToken(token, uid){
if(!token)throw new Error('token 不能为空')
yapi.WEBCONFIG.passsalt = yapi.WEBCONFIG.passsalt || defaultSalt;
return aseEncode(uid + '|' + token, yapi.WEBCONFIG.passsalt)
}
exports.parseToken = function parseToken(token){
if(!token)throw new Error('token 不能为空')
yapi.WEBCONFIG.passsalt = yapi.WEBCONFIG.passsalt || defaultSalt;
let tokens;
try{
tokens = aseDecode(token, yapi.WEBCONFIG.passsalt)
}catch(e){}
if(tokens && typeof tokens === 'string' && tokens.indexOf('|') > 0){
tokens = tokens.split('|')
return {
uid: tokens[0],
projectToken: tokens[1]
}
}
return false;
}