diff --git a/package-lock.json b/package-lock.json index a18ba24..8ce5347 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "txtdot", - "version": "1.0.0", + "version": "1.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "txtdot", - "version": "1.0.0", + "version": "1.1.1", "license": "MIT", "dependencies": { "@fastify/static": "^6.10.2", diff --git a/package.json b/package.json index 6f3f68a..87583ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "txtdot", - "version": "1.0.0", + "version": "1.1.1", "private": true, "description": "", "main": "dist/app.js", diff --git a/src/app.ts b/src/app.ts index f92fc18..eb3df5c 100644 --- a/src/app.ts +++ b/src/app.ts @@ -27,6 +27,7 @@ class App { async init() { const fastify = Fastify({ logger: true, + trustProxy: this.config.reverse_proxy_enabled, }); fastify.register(fastifyStatic, { @@ -58,9 +59,12 @@ class App { fastify.setErrorHandler(errorHandler); - fastify.listen({ host: this.config.host, port: this.config.port }, (err) => { - err && console.log(err); - }); + fastify.listen( + { host: this.config.host, port: this.config.port }, + (err) => { + err && console.log(err); + } + ); } } diff --git a/src/config/config.service.ts b/src/config/config.service.ts index f88c60c..10b8bfc 100644 --- a/src/config/config.service.ts +++ b/src/config/config.service.ts @@ -3,6 +3,7 @@ import { config } from "dotenv"; export class ConfigService { public readonly host: string; public readonly port: number; + public readonly reverse_proxy_enabled: boolean; constructor() { const parsed = config().parsed; @@ -11,7 +12,9 @@ export class ConfigService { throw new Error("Invalid .env file"); } - this.host = process.env.HOST || 'localhost'; + this.host = process.env.HOST || "localhost"; this.port = Number(process.env.PORT) || 8080; + this.reverse_proxy_enabled = + Boolean(process.env.REVERSE_PROXY_ENABLED) || false; } } diff --git a/src/handlers/google.ts b/src/handlers/google.ts index 17c6df2..9caccf8 100644 --- a/src/handlers/google.ts +++ b/src/handlers/google.ts @@ -8,17 +8,17 @@ export default async function google( const googleAnchors = [ ...window.document.querySelectorAll("a[jsname=ACyKwe]"), ] as HTMLAnchorElement[]; - const googleNames = [...window.document.querySelectorAll(".VuuXrf")]; - const results = googleAnchors.map( - (a: HTMLAnchorElement, i: number): GoogleProps => { + const results = googleAnchors + .map((a: HTMLAnchorElement): GoogleProps => { + const parsedHref = new URL(new URL(a.href).searchParams.get("url")!); return { href: a.href!, - siteName: googleNames[i].textContent!, - heading: a.childNodes[1].textContent!, + siteName: parsedHref.hostname, + heading: a.childNodes[1]?.textContent, }; - } - ); + }) + .filter((a) => a.heading); if (!googleAnchors) { throw new EngineParseError( @@ -26,12 +26,6 @@ export default async function google( ); } - if (!googleNames) { - throw new EngineParseError( - "Failed to find names in search result [google]" - ); - } - const convertToFormat = (result: GoogleProps, isHtml: boolean) => { return isHtml ? `
${result.siteName} - ${result.heading}
` @@ -90,5 +84,5 @@ export default async function google( interface GoogleProps { href: string; siteName: string; - heading: string; + heading: string | null; } diff --git a/src/handlers/main.ts b/src/handlers/main.ts index 01d8983..6769283 100644 --- a/src/handlers/main.ts +++ b/src/handlers/main.ts @@ -18,6 +18,7 @@ import { export default async function handlePage( url: string, // remote URL + requestUrl: URL, // proxy URL engine?: string ): Promise