// 引入 express 模块
const express = require('express');
// 创建 express 应用
const app = express();
// 定义全局字符串变量
let strValues = '';
let strUvalues = '';
// 设置端口号
const port = 7860;
// 从环境变量中获取密码
const password = process.env.PASSWORD || '123456' ;
// 定义一个函数,接受 Cookie-Values 和要保留的键的数组作为参数
function filterCookieValues(cookieValues, keepKeys) {
// 定义一个空字符串,用于存储新的 Cookie-Values 值
let newCookieValues = "";
// 用分号分割 Cookie-Values,得到一个键值对的数组
let pairs = cookieValues.split(";");
// 遍历每个键值对
for (let pair of pairs) {
// 用第一个等号分割键和值,得到一个数组
let parts = pair.split("=");
// 取出数组的第一个元素作为键,去除前后空格
let key = parts[0].trim();
// 把数组的剩余元素用等号连接起来,得到完整的值
let value = parts.slice(1).join("=");
// 如果键在要保留的键的数组中,就把键值对添加到新的 Cookie-Values 值中,用分号和空格分隔
if (keepKeys.includes(key)) {
newCookieValues += key + "=" + value + "; ";
}
}
// 去除新的 Cookie-Values 值的最后一个分号和空格
newCookieValues = newCookieValues.slice(0, -2);
// 返回新的 Cookie-Values 值
return newCookieValues;
}
// 处理 POST 请求
app.post('/SET', (req, res) => {
// 获取请求的方法
let method = req.method;
// 获取 pwd 参数的值
let pwd = req.query.pwd;
// 如果没有 pwd 参数,或者 pwd 参数的值不等于密码变量的值,返回错误信息
if (!pwd || pwd !== password) {
res.status(401).send('Invalid password');
return;
}
// 获取请求头中的 set-Values 值
//let setValue = req.header('Cookie-Values');
// 定义一个数组,包含要保留的键
let keepKeys = ["_U",
"MUID",
'KievRPSSecAuth',
'cct',
'_RwBf',
'SRCHHPGUSR',
'WLS'];
// 定义一个数组,包含要保留的键
let keepKeysU = ["_U",
"WLS"];
// 从请求头中获取 Cookie-Values 字段的值
let cookieValues = req.header('Cookie-Values');
// 调用函数,传入 Cookie-Values 和要保留的键的数组,得到新的 Cookie-Values 值
let setValue = filterCookieValues(cookieValues, keepKeys);
let getUValue = filterCookieValues(cookieValues, keepKeysU);
// 如果有值,就存入全局变量
if (setValue) {
strValues = setValue;
if (getUValue){
// 如果 getUValue 不在 strUvalues 中,将其添加到 strUvalues 中
if (!strUvalues.includes(getUValue)) {
strUvalues += ';' + getUValue;
}
}
// 返回成功信息
res.send('Set value successfully');
} else {
// 返回错误信息
res.status(400).send('No Cookie-Values in header');
}
});
// 处理 GET 请求
app.all('/GET', (req, res) => {
// 获取请求的方法
let method = req.method;
// 获取 pwd 参数的值
let pwd = req.query.pwd;
// 如果没有 pwd 参数,或者 pwd 参数的值不等于密码变量的值,返回错误信息
if (!pwd || pwd !== password) {
res.status(401).send('Invalid password');
return;
}
// 将全局变量添加到 JSON 数据中
let result = { result: { cookies: strValues } };
// 返回 JSON 数据
res.json(result);
});
// 处理 CLS 请求
app.all('/CLS', (req, res) => {
// 获取请求的方法
let method = req.method;
// 获取 pwd 参数的值
let pwd = req.query.pwd;
// 如果没有 pwd 参数,或者 pwd 参数的值不等于密码变量的值,返回错误信息
if (!pwd || pwd !== password) {
res.status(401).send('Invalid password');
return;
}
//显示历史值
const replacedStr = strUvalues.replace(/;/g, "
");
// 清除全局变量的值
strValues = '';
strUvalues = '';
// 返回成功信息
res.send('Clear value successfully'+ "\n" + replacedStr);
// 返回 JSON 数据
//res.json(jsonString);
});
// 处理 HisU 请求
app.all('/HisU', (req, res) => {
// 获取请求的方法
let method = req.method;
// 获取 pwd 参数的值
let pwd = req.query.pwd;
// 如果没有 pwd 参数,或者 pwd 参数的值不等于密码变量的值,返回错误信息
if (!pwd || pwd !== password) {
res.status(401).send('Invalid password');
return;
}
//显示历史值
const replacedStr = strUvalues.replace(/;/g, "
");
// 返回成功信息
res.send('Ukey History:'+ "\n" + replacedStr);
});
// 处理 / 请求
app.all('/', (req, res) => {
// 返回提示信息
res.send('Please visit /SET /GET or /CLS with ?pwd=xxxxxx');
});
// 监听端口
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});