@a11ywatch/core
Version:
a11ywatch central API
120 lines • 5.45 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.setDnsVerifyRoutes = void 0;
const dns_1 = __importDefault(require("dns"));
const extracter_1 = require("../params/extracter");
const is_client_1 = require("../../core/utils/is-client");
const index_1 = require("../../database/index");
const config_1 = require("../../config");
const utils_1 = require("../../core/utils");
const strings_1 = require("../../core/strings");
const validateUserRequest = (req) => {
var _a;
const isClient = (0, is_client_1.frontendClientOrigin)(req.headers["origin"]) ||
(0, is_client_1.frontendClientOrigin)(req.headers["host"]) ||
(0, is_client_1.frontendClientOrigin)(req.headers["referer"]);
const softAuth = req.headers.authorization || req.cookies.jwt;
const usr = (0, utils_1.getUserFromToken)(req.headers.authorization || req.cookies.jwt);
const userId = (_a = usr === null || usr === void 0 ? void 0 : usr.payload) === null || _a === void 0 ? void 0 : _a.keyid;
if ((0, extracter_1.validateUID)(userId) && isClient && (config_1.SUPER_MODE || softAuth)) {
return userId;
}
};
const verifiedProps = {
message: "Domain verified!",
data: { verified: true },
};
const setDnsVerifyRoutes = (app) => {
app.get("/api/website/dns", (req, res) => __awaiter(void 0, void 0, void 0, function* () {
const userId = validateUserRequest(req);
if (typeof userId !== "undefined") {
const domain = (0, extracter_1.paramParser)(req, "domain");
if (!domain) {
return res.status(422).send({
data: { verifed: false },
message: `Website params missing :domain`,
});
}
const website = yield index_1.websitesCollection.findOne({ domain, userId });
if (!website) {
return res.status(404).send({
data: { verifed: false },
message: `Website not found`,
});
}
res.send({
data: { verifed: website.verified },
message: `Website ${website.verified ? "verified" : "not verified"}`,
});
}
res.status(401).send({ message: strings_1.AUTH_ERROR, data: null });
}));
app.post("/api/website/dns", (req, res) => __awaiter(void 0, void 0, void 0, function* () {
const userId = validateUserRequest(req);
if (typeof userId !== "undefined") {
const domain = (0, extracter_1.paramParser)(req, "domain");
if (!domain) {
return res.status(422).send({
data: { verifed: false },
message: `Website body missing :domain`,
});
}
const params = { domain, userId };
const website = yield index_1.websitesCollection.findOne(params);
if (!website) {
return res.status(404).send({
data: { verifed: false },
message: `Website not found`,
});
}
const verificationCode = website.verificationCode || (yield (0, utils_1.asyncRandomGenerate)());
if (!website.verified) {
if (!website.verificationCode) {
yield index_1.websitesCollection.updateOne(params, {
$set: { verificationCode },
});
}
else if (yield resolveDnsRecord(domain, website.verificationCode)) {
yield index_1.websitesCollection.updateOne(params, {
$set: { verified: true },
});
return res.status(200).send(verifiedProps);
}
return res.status(200).send({
message: `Add the Txt Record ${verificationCode}`,
data: { verified: false, txtRecord: verificationCode },
});
}
else {
return res.status(200).send(verifiedProps);
}
}
res.status(401).send({ message: strings_1.AUTH_ERROR });
}));
};
exports.setDnsVerifyRoutes = setDnsVerifyRoutes;
const resolveDnsRecord = (domain, record) => {
return new Promise((resolve) => {
dns_1.default.resolveTxt(domain, (err, addresses) => {
if (err) {
resolve(false);
}
else {
resolve(addresses.flat().includes(record));
}
});
});
};
//# sourceMappingURL=dns-verify.js.map
;