UNPKG

@a11ywatch/core

Version:
120 lines 5.45 kB
"use strict"; 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