UNPKG

will-lib

Version:
71 lines (70 loc) 3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CaptchaLibrary = void 0; const uuid_1 = require("uuid"); const will_sql_1 = require("will-sql"); const will_util_1 = require("will-util"); const Captchar_1 = require("./Captchar"); const EnvironmentVariable_1 = require("./EnvironmentVariable"); class CaptchaLibrary { async createCaptcha(conn, capid, mathing = "+") { let cap = await (0, Captchar_1.captchar)({ math: mathing }); cap.id = capid; await this.deleteCaptcha(conn, capid); cap.id = await this.insertCaptcha(conn, cap); return Promise.resolve(cap); } async insertCaptcha(conn, cap) { let now = new Date(); let expiretimes = now.getTime() + EnvironmentVariable_1.CAPTCHA_EXPIRE_TIMES; let expdate = new Date(expiretimes); let capid = (0, uuid_1.v4)(); if (cap.id) capid = cap.id; let sql = new will_sql_1.KnSQL("insert into tcaptcha(capid,captext,capanswer,createdate,createtime,createmillis,expiretimes,expiredate,expiretime) "); sql.append("values(?capid,?captext,?capanswer,?createdate,?createtime,?createmillis,?expiretimes,?expiredate,?expiretime) "); sql.set("capid", capid); sql.set("captext", cap.text); sql.set("capanswer", cap.code); sql.set("createdate", now); sql.set("createtime", now); sql.set("createmillis", will_util_1.Utilities.currentTimeMillis(now)); sql.set("expiretimes", expiretimes); sql.set("expiredate", expdate); sql.set("expiretime", expdate); let rs = await sql.executeUpdate(conn); console.log("affected " + rs.rows.affectedRows + " rows."); return Promise.resolve(capid); } async verifyCaptcha(conn, capid, answer, now) { let result = false; if (!now) now = new Date(); let sql = new will_sql_1.KnSQL("select capanswer from tcaptcha where capid = ?capid and expiretimes >= ?expiretimes "); sql.set("capid", capid); sql.set("expiretimes", now.getTime()); let rs = await sql.executeQuery(conn); if (rs.rows && rs.rows.length > 0) { let row = rs.rows[0]; let capanswer = row.capanswer; if (capanswer == answer) { result = true; } } if (result) { this.deleteCaptcha(conn, capid); } return Promise.resolve(result); } async deleteCaptcha(conn, capid) { if (!capid || capid.trim().length == 0) return Promise.resolve(0); let result = 0; let sql = new will_sql_1.KnSQL("delete from tcaptcha where capid = ?capid "); sql.set("capid", capid); let rs = await sql.executeQuery(conn); result = rs.rows.affectedRows; return Promise.resolve(result); } } exports.CaptchaLibrary = CaptchaLibrary;