refactor: pass around the requested url so we have context to merge it absolute with the path

This commit is contained in:
Derrick Hammer 2023-10-18 07:20:36 -04:00
parent 6c5ec99dff
commit f4294ce880
Signed by: pcfreak30
GPG Key ID: C997C339BE476FF2
5 changed files with 35 additions and 14 deletions

View File

@ -7,11 +7,19 @@ export class ContentProcessor {
this.filters.push(filter);
}
async process(response: Response, mimeType: string): Promise<Response> {
async process(
response: Response,
mimeType: string,
requestor: string,
): Promise<Response> {
let processedResponse = response;
for (const filter of this.filters) {
processedResponse = await filter.process(processedResponse, mimeType);
processedResponse = await filter.process(
processedResponse,
mimeType,
requestor,
);
}
return processedResponse;

View File

@ -4,8 +4,14 @@ import tldEnum from "@lumeweb/tld-enum";
import * as cheerio from "cheerio";
import urlJoin from "proper-url-join";
const swUrl = new URL(self.location.origin);
export default class URLRewriteFilter implements ContentFilter {
async process(response: Response, mimeType: string): Promise<Response> {
async process(
response: Response,
mimeType: string,
requestor: string,
): Promise<Response> {
if (mimeType !== "text/html") {
return response;
}
@ -24,15 +30,9 @@ export default class URLRewriteFilter implements ContentFilter {
const isExternal = urlValue.startsWith("http");
if (!isExternal || !isICANN(urlValue)) {
if (!isExternal) {
//@ts-ignore
urlValue = urlJoin("/browse/", urlValue);
} else {
urlValue = `/browse/${urlValue}`;
urlValue = urlJoin(requestor, urlValue);
}
console.log(urlValue);
$(element).attr(attrName, urlValue);
urlValue = `${swUrl.protocol}://${swUrl.hostname}/browse/${urlValue}`;
}
}
});

View File

@ -15,7 +15,11 @@ export class ProviderManager {
this.providers.push(provider);
}
async fetch(dnsResult: DNSResult, path: string): Promise<Response> {
async fetch(
url: string,
dnsResult: DNSResult,
path: string,
): Promise<Response> {
for (const record of dnsResult.records) {
for (const provider of this.providers) {
if (provider.supports(record.value)) {
@ -25,6 +29,7 @@ export class ProviderManager {
return this._processor.process(
content,
content.headers.get("Content-Type")!,
url,
);
}

View File

@ -8,5 +8,9 @@ export interface ContentProvider {
}
export interface ContentFilter {
process: (response: Response, mineType: string) => Promise<Response>;
process: (
response: Response,
mineType: string,
requestor: string,
) => Promise<Response>;
}

View File

@ -62,7 +62,11 @@ addEventListener("fetch", (event: any) => {
console.log("realUrl", realUrl);
if (!dnsResult.error && dnsResult.records.length > 0) {
return providerManager.fetch(dnsResult, new URL(realUrl).pathname);
return providerManager.fetch(
realUrl,
dnsResult,
new URL(realUrl).pathname,
);
}
return new Response("Sorry, that is not a valid web3 website.");