From e917c0e7b403840548e3638ce7468f85dd7c1eb7 Mon Sep 17 00:00:00 2001 From: Derrick Hammer Date: Sun, 31 Jul 2022 00:54:42 -0400 Subject: [PATCH] *Add resolveDns shared provider method to parse a domain, check icann, sanitize, check if we have already queried for the current request id, and cache the result *Add setData and getData helper methods --- src/contentProviders/baseProvider.ts | 50 ++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/contentProviders/baseProvider.ts b/src/contentProviders/baseProvider.ts index 0d7bf2c..59529c7 100644 --- a/src/contentProviders/baseProvider.ts +++ b/src/contentProviders/baseProvider.ts @@ -5,6 +5,9 @@ import { OnRequestDetailsType, } from "../types"; import WebEngine from "../webEngine.js"; +import { getTld, isDomain, isIp, normalizeDomain } from "../util.js"; +import tldEnum from "@lumeweb/tld-enum"; +import { resolve } from "@lumeweb/kernel-dns-client"; export default abstract class BaseProvider { private engine: WebEngine; @@ -33,4 +36,51 @@ export default abstract class BaseProvider { ): Promise { return false; } + + protected async resolveDns(details: OnBeforeRequestDetailsType) { + const originalUrl = new URL(details.url); + const hostname = normalizeDomain(originalUrl.hostname); + + if (tldEnum.list.includes(getTld(hostname))) { + return false; + } + + if (isIp(hostname) && !isDomain(hostname)) { + return false; + } + + const cached = this.getData(details, "dns"); + + if (cached !== undefined) { + return cached; + } + + let result; + + try { + result = await resolve(hostname, {}); + } catch (e) { + debugger; + } + if (!result) { + this.setData(details, "dns", false); + return false; + } + + this.setData(details, "dns", result); + + return result; + } + + protected getData(details: OnBeforeRequestDetailsType, key: string) { + return this.engine.getRequestData(details.requestId, key); + } + + protected setData( + details: OnBeforeRequestDetailsType, + key: string, + value: any + ) { + return this.engine.setRequestData(details.requestId, key, value); + } }