MCPcopy Create free account
hub / github.com/PIKACHUIM/CFWorkerACME / userRegs

Function userRegs

src/users.ts:199–295  ·  view source on GitHub ↗
(c: Context)

Source from the content-addressed store, hash-verified

197
198// 用户注册 ###############################################################################
199export async function userRegs(c: Context) {
200 let mail_data_in: string = <string>c.req.query('email'); // 邮件明文索引用户
201 let mail_code_in: string = <string>c.req.query('codes'); // 邮件+验证码 HMAC
202 let pass_code_in: string = <string>c.req.query('crypt'); // 密码+验证码 AES2
203 let pass_sets_in: string = <string>c.req.query('token'); // 用户+原密码 HMAC
204 // 修改密码 ==========================================================================
205 if (pass_sets_in != undefined && pass_sets_in.length > 0) {
206 if (!await userAuth(c)) return c.json({"flags": 2, "texts": "用户尚未登录"}, 401);
207 let user_data_db: Record<string, any>[] = await getUsers(c, mail_data_in);
208 if (Object.keys(user_data_db).length <= 0) return c.json({flags: 2}, 401);
209 let user_data_in = user_data_db[0]
210 console.log(user_data_in['pass'], pass_code_in, pass_sets_in);
211 if (user_data_in['pass'] !== pass_code_in) return c.json({flags: 5}, 403);
212 await saves.updateDB(c.env.DB_CF, "Users", {pass: pass_sets_in}, {mail: mail_data_in})
213 return c.redirect("/#/login", 302);
214 }
215 // 校验验证码 ========================================================================
216 let user_data_db: Record<string, any>[] = await getUsers(c, mail_data_in);
217 if (Object.keys(user_data_db).length <= 0)
218 return c.json({error: '请先发送邮件验证码'}, 200);
219 let user_data_in: Record<string, any> = user_data_db[0]
220 let code_hash_db = CryptoJS.SHA256(user_data_in["code"]).toString(CryptoJS.enc.Hex);
221 let mail_data_db = CryptoJS.HmacSHA256(mail_data_in, code_hash_db) // 邮箱
222 let mail_code_db = mail_data_db.toString(CryptoJS.enc.Hex);
223 if (mail_code_db == mail_code_in) { // 验证通过,要保存密码
224 try { // 解密密码sha256 ----------------------------------------------------------
225 const save_word = CryptoJS.enc.Hex.parse(pass_code_in);
226 const save_base = CryptoJS.enc.Base64.stringify(save_word);
227 const keys_word = CryptoJS.enc.Hex.parse(code_hash_db);
228 // ===========================================================================
229 // console.log("save_word", save_word);
230 // console.log("save_text", save_text);
231 // console.log("save_base", save_base);
232 // console.log("keys_word", keys_word);
233 // console.log("keys_text", code_hash_db);
234 // 执行解密 ==================================================================
235 const decrypted = CryptoJS.AES.decrypt(save_base, keys_word, {
236 mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7
237 });
238 const data_text = decrypted.toString(CryptoJS.enc.Hex);
239 // console.log("data_word:", decrypted);
240 // console.log("data_text:", data_text);
241 // 存储密码 =====================================================
242 // const pass_salt = bcrypt.genSaltSync(10);
243 // const pass_save = bcrypt.hashSync(data_text, pass_salt);
244 // console.log("pass_salt:", pass_salt);
245 // console.log("pass_save:", pass_save);
246
247
248 const {publicKey, privateKey} = generateKeyPairSync(
249 'ec', {namedCurve: 'prime256v1'});
250 console.log(publicKey);
251
252 // 新注册用户(flag 原为 0)需要初始化 quota 与 is_admin;
253 // 重置密码路径(flag 已为 1)保留原 quota / is_admin,不被回溯。
254 const isFreshRegister = Number(user_data_in["flag"] ?? 0) === 0;
255 // ACME 账户私钥:
256 // - 新注册:务必生成并存入 keys 字段(后续申请证书直接复用,无需再在申请时生成)

Callers

nothing calls this directly

Calls 4

userAuthFunction · 0.85
getUsersFunction · 0.85
newNonceFunction · 0.85
readIntFunction · 0.85

Tested by

no test coverage detected