diff --git a/批量更新用户密码 b/批量更新用户密码 new file mode 100644 index 0000000..53f6bf5 --- /dev/null +++ b/批量更新用户密码 @@ -0,0 +1,456 @@ +// 一键修改密码 +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" + } +]);