let fs = require("fs");
let http = require("http");
let DST_DIR = "/var/log/consult";
//let DST_DIR = "/tmp";
let TEMPLATE_FILE_NAME = "%DIR%/consult_%UUID%";
let URL_CONSULT = "/api/consult";
let srv = http.createServer((req, res) => {
if (req.method == "POST") {
var dat = "";
req.on("data", (chunk) => {
dat += chunk;
});
req.on("end", () => {
// /api/consult
if (isConsultationRequestValid(req, dat)) {
saveUserContacts(dat);
returnSuccess(res);
} else {
returnError(res);
}
});
} else if (req.method == "OPTIONS") {
returnNoCORS(res);
} else {
returnError(res);
}
});
function isConsultationRequestValid(req, dat) {
var json = {};
try {
json = JSON.parse(dat);
} catch (e) {
//console.log("ERR isCRV error:", e);
}
if (
req.url == URL_CONSULT &&
req.method == "POST" &&
"name" in json &&
"phone" in json
) {
return true;
}
return false;
}
function returnError(res) {
res.writeHead(404, { "Content-Type": "text/html" });
res.end(`
404 Not Found
404 Not Found
nginx/1.24.0 (Ubuntu)
`);
}
function returnNoCORS(res) {
res.writeHead(
204,
{
"Access-Control-Allow-Headers": "Content-Type",
"Access-Control-Allow-Origin": "*",
"Content-Length": "0",
"Content-Type": "text/plain;charset=UTF-8",
}
);
res.end();
}
function returnSuccess(res) {
res.writeHead(
200,
{
"Access-Control-Allow-Origin": "*",
"Content-Type": "application/json;charset=UTF-8",
}
);
let dat = { code: 4 };
res.end(JSON.stringify(dat));
}
function saveUserContacts(dat) {
let fileName = TEMPLATE_FILE_NAME
.replaceAll("%DIR%", DST_DIR)
.replaceAll("%UUID%", uuidString());
fs.writeFile(fileName, dat, (err) => {
console.log("ИГР saveUC fileN/err:", fileName, err);
});
}
// https://stackoverflow.com/a/2117523
function uuidString() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
/[xy]/g,
function(c)
{
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
}
);
}
// Launch.
srv.listen(8001);