mirror of
https://github.com/YMFE/yapi.git
synced 2025-02-17 13:49:43 +08:00
68 lines
2.1 KiB
JavaScript
68 lines
2.1 KiB
JavaScript
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;
|
||
|
||
}
|
||
|