will-lib
Version:
Library classes
71 lines (70 loc) • 3 kB
JavaScript
;
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;