457 lines
10 KiB
JavaScript
457 lines
10 KiB
JavaScript
// 一键修改密码
|
||
async function changePasswordBatch(users) {
|
||
// RSA加密
|
||
function encryptPassword(password, publicKey) {
|
||
const jsencrypt = new JSEncrypt();
|
||
jsencrypt.setPublicKey(publicKey);
|
||
const encrypted = jsencrypt.encrypt(password);
|
||
if (!encrypted) throw new Error("密码加密失败");
|
||
return encrypted;
|
||
}
|
||
|
||
// 给单个用户改密(带重试)
|
||
async function updateUserPassword(user, retry = 3) {
|
||
try {
|
||
// 1. 获取验证码
|
||
const ts1 = Date.now();
|
||
const imgRes = await fetch(
|
||
`https://oa.zwgczx.com/weaver/weaver.file.MakeValidateCode?isView=1&validatetype=0&validatenum=4&seriesnum_=${ts1}`,
|
||
{ credentials: "include" }
|
||
);
|
||
const buf = await imgRes.arrayBuffer();
|
||
const base64 = btoa(
|
||
new Uint8Array(buf).reduce((data, byte) => data + String.fromCharCode(byte), "")
|
||
);
|
||
|
||
// 2. OCR 识别验证码
|
||
const ocrRes = await fetch("https://nest.zwgczx.com/api/v1/tmp-redis/test", {
|
||
method: "POST",
|
||
headers: { "Content-Type": "application/json" },
|
||
body: JSON.stringify({ base64 })
|
||
});
|
||
const { data: validatecode } = await ocrRes.json();
|
||
console.log("识别验证码:", validatecode);
|
||
|
||
// 3. 获取RSA公钥
|
||
const ts2 = Date.now();
|
||
const { rsa_pub, rsa_flag, rsa_code } = await (
|
||
await fetch(`https://oa.zwgczx.com/rsa/weaver.rsa.GetRsaInfo?ts=${ts2}`, {
|
||
credentials: "include"
|
||
})
|
||
).json();
|
||
|
||
const encPwd = encryptPassword(user.password + rsa_code, rsa_pub) + rsa_flag;
|
||
|
||
const ts3 = Date.now();
|
||
const { rsa_pub: rsa_pub1, rsa_flag: rsa_flag1, rsa_code: rsa_code1 } = await (
|
||
await fetch(`https://oa.zwgczx.com/rsa/weaver.rsa.GetRsaInfo?ts=${ts3}`, {
|
||
credentials: "include"
|
||
})
|
||
).json();
|
||
|
||
const encPwd1 = encryptPassword(user.password + rsa_code1, rsa_pub1) + rsa_flag1;
|
||
|
||
// 4. 提交改密
|
||
const body = new URLSearchParams({
|
||
id: user.id,
|
||
loginid: user.loginid,
|
||
password: encPwd,
|
||
password1: encPwd1,
|
||
usbstate: "0",
|
||
isADAccount: "0",
|
||
validatecode,
|
||
seclevel: 0,
|
||
useSecondaryPwd: 0,
|
||
passwordlock: 0,
|
||
needauto: 0,
|
||
enableDate: "2025-09-10",
|
||
enableUsbType: 0
|
||
});
|
||
|
||
const saveRes = await fetch("https://oa.zwgczx.com/api/hrm/systeminfo/save", {
|
||
method: "POST",
|
||
headers: {
|
||
"Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
|
||
"x-requested-with": "XMLHttpRequest"
|
||
},
|
||
body,
|
||
credentials: "include"
|
||
});
|
||
|
||
const resultText = await saveRes.text();
|
||
|
||
let result = {};
|
||
try {
|
||
result = JSON.parse(resultText);
|
||
} catch {
|
||
// 如果不是标准JSON,就简单返回原始文本
|
||
result = { raw: resultText };
|
||
}
|
||
|
||
if (result.status === "-1") {
|
||
if (retry > 0) {
|
||
console.warn(
|
||
`用户 ${user.loginid} 验证码失败,重试剩余 ${retry} 次...`
|
||
);
|
||
return await updateUserPassword(user, retry - 1);
|
||
} else {
|
||
throw new Error(`用户 ${user.loginid} 改密失败(验证码多次失败)`);
|
||
}
|
||
}
|
||
|
||
console.log(`用户 ${user.loginid} 改密结果:`, result);
|
||
} catch (err) {
|
||
console.error(`用户 ${user.loginid} 改密失败:`, err);
|
||
}
|
||
}
|
||
|
||
// 遍历用户批量处理
|
||
for (const user of users) {
|
||
await updateUserPassword(user);
|
||
}
|
||
}
|
||
|
||
// 示例调用,id需要是hrmresource的id,密码需要符合系统安全设置
|
||
changePasswordBatch([
|
||
{
|
||
"id": 523,
|
||
"loginid": "CUS-CDYH",
|
||
"password": "RY.42281"
|
||
},
|
||
{
|
||
"id": 524,
|
||
"loginid": "CUS-GYYH",
|
||
"password": "RY.13953"
|
||
},
|
||
{
|
||
"id": 525,
|
||
"loginid": "CUS-JTYH",
|
||
"password": "RY.98457"
|
||
},
|
||
{
|
||
"id": 526,
|
||
"loginid": "CUS-LLT",
|
||
"password": "RY.11517"
|
||
},
|
||
{
|
||
"id": 527,
|
||
"loginid": "CUS-NDYH",
|
||
"password": "RY.20880"
|
||
},
|
||
{
|
||
"id": 304,
|
||
"loginid": "RY-BSFGS",
|
||
"password": "RY.48137"
|
||
},
|
||
{
|
||
"id": 343,
|
||
"loginid": "RY-CHGS",
|
||
"password": "RY.93925"
|
||
},
|
||
{
|
||
"id": 315,
|
||
"loginid": "RY-CSHX",
|
||
"password": "RY.78478"
|
||
},
|
||
{
|
||
"id": 330,
|
||
"loginid": "RY-CZGLZX",
|
||
"password": "RY.41274"
|
||
},
|
||
{
|
||
"id": 347,
|
||
"loginid": "RY-DCGS",
|
||
"password": "RY.55742"
|
||
},
|
||
{
|
||
"id": 349,
|
||
"loginid": "RY-DYFGS",
|
||
"password": "RY.71620"
|
||
},
|
||
{
|
||
"id": 309,
|
||
"loginid": "RY-EGFGS",
|
||
"password": "RY.20707"
|
||
},
|
||
{
|
||
"id": 351,
|
||
"loginid": "RY-FKFGS",
|
||
"password": "RY.64596"
|
||
},
|
||
{
|
||
"id": 350,
|
||
"loginid": "RY-GFGS",
|
||
"password": "RY.05010"
|
||
},
|
||
{
|
||
"id": 306,
|
||
"loginid": "RY-GFZGS",
|
||
"password": "RY.86999"
|
||
},
|
||
{
|
||
"id": 308,
|
||
"loginid": "RY-GHFGS",
|
||
"password": "RY.63878"
|
||
},
|
||
{
|
||
"id": 337,
|
||
"loginid": "RY-GHGS",
|
||
"password": "RY.45039"
|
||
},
|
||
{
|
||
"id": 340,
|
||
"loginid": "RY-GLGS",
|
||
"password": "RY.59570"
|
||
},
|
||
{
|
||
"id": 310,
|
||
"loginid": "RY-GSFGS",
|
||
"password": "RY.81003"
|
||
},
|
||
{
|
||
"id": 302,
|
||
"loginid": "RY-GSZGS",
|
||
"password": "RY.44099"
|
||
},
|
||
{
|
||
"id": 299,
|
||
"loginid": "RY-GZXX",
|
||
"password": "RY.05592"
|
||
},
|
||
{
|
||
"id": 328,
|
||
"loginid": "RY-HHGGLZX",
|
||
"password": "RY.90622"
|
||
},
|
||
{
|
||
"id": 303,
|
||
"loginid": "RY-HMDQ",
|
||
"password": "RY.81619"
|
||
},
|
||
{
|
||
"id": 301,
|
||
"loginid": "RY-HMEWFGS",
|
||
"password": "RY.25967"
|
||
},
|
||
{
|
||
"id": 311,
|
||
"loginid": "RY-HQGS",
|
||
"password": "RY.89632"
|
||
},
|
||
{
|
||
"id": 318,
|
||
"loginid": "RY-HZGLC",
|
||
"password": "RY.92680"
|
||
},
|
||
{
|
||
"id": 320,
|
||
"loginid": "RY-JGGLC",
|
||
"password": "RY.29439"
|
||
},
|
||
{
|
||
"id": 329,
|
||
"loginid": "RY-JHGLZX",
|
||
"password": "RY.83392"
|
||
},
|
||
{
|
||
"id": 293,
|
||
"loginid": "RY-JLFGS",
|
||
"password": "RY.00699"
|
||
},
|
||
{
|
||
"id": 354,
|
||
"loginid": "RY-JS",
|
||
"password": "RY.53500"
|
||
},
|
||
{
|
||
"id": 353,
|
||
"loginid": "RY-JTJT",
|
||
"password": "RY.10700"
|
||
},
|
||
{
|
||
"id": 338,
|
||
"loginid": "RY-JZB",
|
||
"password": "RY.31698"
|
||
},
|
||
{
|
||
"id": 319,
|
||
"loginid": "RY-JZGLZX",
|
||
"password": "RY.43983"
|
||
},
|
||
{
|
||
"id": 298,
|
||
"loginid": "RY-JZGS",
|
||
"password": "RY.91799"
|
||
},
|
||
{
|
||
"id": 297,
|
||
"loginid": "RY-JZGSGZBD",
|
||
"password": "RY.35764"
|
||
},
|
||
{
|
||
"id": 296,
|
||
"loginid": "RY-JZGSGZD",
|
||
"password": "RY.40224"
|
||
},
|
||
{
|
||
"id": 335,
|
||
"loginid": "RY-KYGS",
|
||
"password": "RY.40975"
|
||
},
|
||
{
|
||
"id": 313,
|
||
"loginid": "RY-LDFGS",
|
||
"password": "RY.43105"
|
||
},
|
||
{
|
||
"id": 327,
|
||
"loginid": "RY-LLGLC",
|
||
"password": "RY.50593"
|
||
},
|
||
{
|
||
"id": 355,
|
||
"loginid": "RY-LQ",
|
||
"password": "RY.37570"
|
||
},
|
||
{
|
||
"id": 348,
|
||
"loginid": "RY-MPGS",
|
||
"password": "RY.39292"
|
||
},
|
||
{
|
||
"id": 333,
|
||
"loginid": "RY-MZGS",
|
||
"password": "RY.14628"
|
||
},
|
||
{
|
||
"id": 300,
|
||
"loginid": "RY-NHDFGS",
|
||
"password": "RY.50066"
|
||
},
|
||
{
|
||
"id": 314,
|
||
"loginid": "RY-NHGS",
|
||
"password": "RY.14002"
|
||
},
|
||
{
|
||
"id": 356,
|
||
"loginid": "RY-NY",
|
||
"password": "RY.35568"
|
||
},
|
||
{
|
||
"id": 325,
|
||
"loginid": "RY-NYLYGLC",
|
||
"password": "RY.81717"
|
||
},
|
||
{
|
||
"id": 321,
|
||
"loginid": "RY-QYGLZX",
|
||
"password": "RY.12508"
|
||
},
|
||
{
|
||
"id": 324,
|
||
"loginid": "RY-RXGLC",
|
||
"password": "RY.38510"
|
||
},
|
||
{
|
||
"id": 345,
|
||
"loginid": "RY-SFGS",
|
||
"password": "RY.55017"
|
||
},
|
||
{
|
||
"id": 357,
|
||
"loginid": "RY-SG",
|
||
"password": "RY.98997"
|
||
},
|
||
{
|
||
"id": 323,
|
||
"loginid": "RY-SGGLZX",
|
||
"password": "RY.16123"
|
||
},
|
||
{
|
||
"id": 339,
|
||
"loginid": "RY-SGGQFGS",
|
||
"password": "RY.55621"
|
||
},
|
||
{
|
||
"id": 332,
|
||
"loginid": "RY-SGZJFGS",
|
||
"password": "RY.94912"
|
||
},
|
||
{
|
||
"id": 342,
|
||
"loginid": "RY-SSXFGS",
|
||
"password": "RY.23889"
|
||
},
|
||
{
|
||
"id": 312,
|
||
"loginid": "RY-SZFGS",
|
||
"password": "RY.63003"
|
||
},
|
||
{
|
||
"id": 522,
|
||
"loginid": "RY-SZTD",
|
||
"password": "RY.33575"
|
||
},
|
||
{
|
||
"id": 358,
|
||
"loginid": "RY-TZ",
|
||
"password": "RY.84725"
|
||
},
|
||
{
|
||
"id": 334,
|
||
"loginid": "RY-TZFGS",
|
||
"password": "RY.21588"
|
||
},
|
||
{
|
||
"id": 326,
|
||
"loginid": "RY-XBGLC",
|
||
"password": "RY.13156"
|
||
},
|
||
{
|
||
"id": 346,
|
||
"loginid": "RY-XBYHFGS",
|
||
"password": "RY.04216"
|
||
},
|
||
{
|
||
"id": 336,
|
||
"loginid": "RY-YANGMAOGS",
|
||
"password": "RY.38286"
|
||
},
|
||
{
|
||
"id": 341,
|
||
"loginid": "RY-YGFGS",
|
||
"password": "RY.06696"
|
||
},
|
||
{
|
||
"id": 359,
|
||
"loginid": "RY-YGS",
|
||
"password": "RY.12380"
|
||
},
|
||
{
|
||
"id": 316,
|
||
"loginid": "RY-YHGLC",
|
||
"password": "RY.92641"
|
||
},
|
||
{
|
||
"id": 322,
|
||
"loginid": "RY-YHGLCH",
|
||
"password": "RY.86731"
|
||
},
|
||
{
|
||
"id": 295,
|
||
"loginid": "RY-YUNMAOGS",
|
||
"password": "RY.56787"
|
||
},
|
||
{
|
||
"id": 305,
|
||
"loginid": "RY-YWFGS",
|
||
"password": "RY.61043"
|
||
},
|
||
{
|
||
"id": 307,
|
||
"loginid": "RY-YZGS",
|
||
"password": "RY.33185"
|
||
}
|
||
]);
|