import * as https from "https";
import Database from "better-sqlite3";
import grimm from "../grimm.js";
import { probablySpam, tripcodeHash } from "../../shush/shush.js";
const db = new Database("./db/site.db");
db.pragma("journal_mode = DELETE");
const leaveComment = (req, res, next) => {
const query = Object.assign(req.query, req.body);
const submitDate = new Date().toISOString();
const confirmMessage = grimm.translate(
query.lang || "en",
"comments.confirmed"
);
if (probablySpam(query)) {
return res.send(confirmMessage);
}
let row = {
page_id: query.pageid,
name: query.name.trim(),
hashcode: query.hashcode
? tripcodeHash(query.name, query.hashcode)
: null,
website: query.website.trim() || null,
content: query.content.trim(),
submit_date: submitDate,
country: null,
lang: query.lang,
planet: query.planet
};
function success() {
db.transaction(() => {
db.prepare(
`Insert Into comments
(page_id, "name", hashcode, website, content, submit_date, country, lang, planet)
Values (@page_id, @name, @hashcode, @website, @content, @submit_date, @country, @lang, @planet)`
).run(row);
})();
res.send(confirmMessage);
}
https
.get(`https://api.country.is/${req.headers["x-real-ip"]}`, r => {
let body = "";
r.on("data", chunk => {
body += chunk;
});
r.on("end", () => {
try {
row.country = JSON.parse(body).country.toLowerCase();
} catch {}
success();
});
})
.on("error", error => {
success();
});
};
export default leaveComment;