diff --git a/extended-request.ts b/extended-request.ts index d0af544..2a89421 100644 --- a/extended-request.ts +++ b/extended-request.ts @@ -1,5 +1,10 @@ import { StolenDataEntry } from "./stolen-data-entry"; -import { getshorthost, parseCookie, Request } from "./util"; +import { + flattenObjectEntries, + getshorthost, + parseCookie, + Request, +} from "./util"; type NameValue = { name: string; value: string }; @@ -151,9 +156,13 @@ export default class ExtendedRequest { if (!this.hasCookie() || this.getCookie() === undefined) { return []; } - return Object.entries(parseCookie(this.getCookie())) - .map(([key, value]) => [key, value || ""]) - .map(([key, value]) => new StolenDataEntry(this, "cookie", key, value)); + return flattenObjectEntries( + Object.entries(parseCookie(this.getCookie())) + .map(([key, value]) => [key, value || ""]) + .map(([key, value]) => { + return [key, StolenDataEntry.parseValue(value)]; + }) + ).map(([key, value]) => new StolenDataEntry(this, "cookie", key, value)); } hasReferer() { @@ -174,50 +183,56 @@ export default class ExtendedRequest { if (!path.includes(";")) { return []; } - return path - .split(";") - .map((e) => e.split("=")) - .map(([key, value]) => [key, value || ""]) - .map( - ([key, value]) => - new StolenDataEntry(this, "pathname", key, decodeURIComponent(value)) - ); + return flattenObjectEntries( + path + .split(";") + .map((e) => e.split("=")) + .map(([key, value]) => [key, value || ""]) + .map(([key, value]) => { + return [key, StolenDataEntry.parseValue(decodeURIComponent(value))]; + }) + ).map(([key, value]) => new StolenDataEntry(this, "pathname", key, value)); } getQueryParams(): StolenDataEntry[] { const url = new URL(this.data.url); - return Array.from((url.searchParams as any).entries()) - .map(([key, value]) => [key, value || ""]) - .map(([key, value]) => { - try { - value = decodeURIComponent(value); - } catch (e) {} - return new StolenDataEntry(this, "queryparams", key, value); - }); + return flattenObjectEntries( + Array.from((url.searchParams as any).entries()) + .map(([key, value]) => [key, value || ""]) + .map(([key, value]) => { + return [key, StolenDataEntry.parseValue(decodeURIComponent(value))]; + }) + ).map(([key, value]) => { + return new StolenDataEntry(this, "queryparams", key, value); + }); } getHeadersData(): StolenDataEntry[] { - return this.data.requestHeaders - .filter((header) => { - for (const regex of whitelisted_cookies) { - if (regex.test(header.name)) { - return false; + return flattenObjectEntries( + this.data.requestHeaders + .filter((header) => { + for (const regex of whitelisted_cookies) { + if (regex.test(header.name)) { + return false; + } } - } - return true; - }) - .map( - (header) => - new StolenDataEntry(this, "header", header.name, header.value) - ); + return true; + }) + .map((header) => { + return [ + header.name, + StolenDataEntry.parseValue(decodeURIComponent(header.value)), + ]; + }) + ).map(([key, value]) => new StolenDataEntry(this, "header", key, value)); } hasMark() { - return this.stolenData.some((data) => data.hasMark()); + return this.stolenData.some((data) => data.isMarked); } getMarkedEntries() { - return this.stolenData.filter((data) => data.hasMark()); + return this.stolenData.filter((data) => data.isMarked); } getHost() { diff --git a/mark.ts b/mark.ts index 6fa4f13..e69de29 100644 --- a/mark.ts +++ b/mark.ts @@ -1,32 +0,0 @@ -import { Classifications, StolenDataEntry } from "./stolen-data-entry"; - -export default class Mark { - classification: keyof typeof Classifications; - constructor(public entry: StolenDataEntry, public key: string) { - this.classification = entry.classification; - } - - getParsedValue() { - return this.entry.getParsedValue(this.key); - } - - get shorthost() { - return this.entry.request.shorthost; - } - - get source() { - return this.entry.source; - } - - get name() { - return this.entry.name; - } - - get originalURL() { - return this.entry.request.originalURL; - } - - get valuePreview(): string { - return this.entry.getValuePreview(this.key); - } -} diff --git a/package.json b/package.json index c79b856..ef73da9 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,9 @@ "description": "", "main": "email-template-harsh.js", "scripts": { - "build": "npx esbuild sidebar/sidebar.tsx report-window/report-window.tsx --bundle background.ts --bundle --outdir=./lib", - "watch": "npm run build -- --watch" + "build": "npx esbuild sidebar/sidebar.tsx test.ts report-window/report-window.tsx --bundle background.ts --bundle --outdir=./lib", + "watch": "npm run build -- --watch", + "typecheck": "tsc" }, "repository": { "type": "git", diff --git a/report-window/domain-summary.tsx b/report-window/domain-summary.tsx index 9350658..02c6510 100644 --- a/report-window/domain-summary.tsx +++ b/report-window/domain-summary.tsx @@ -25,18 +25,11 @@ export default function DomainSummary({ Właściciel domeny {cluster.id} otrzymał:{" "} diff --git a/report-window/email-template.tsx b/report-window/email-template.tsx index 2406262..49f395d 100644 --- a/report-window/email-template.tsx +++ b/report-window/email-template.tsx @@ -1,16 +1,16 @@ import React, { useState } from "react"; -import Mark from "../mark"; import { RequestCluster } from "../request-cluster"; +import { StolenDataEntry } from "../stolen-data-entry"; import { getDate, toBase64 } from "../util"; import DomainSummary from "./domain-summary"; type PopupState = "not_clicked" | "clicked_but_no_reject_all"; export default function EmailTemplate({ - marks, + entries, clusters, }: { - marks: Mark[]; + entries: StolenDataEntry[]; clusters: Record; version: number; }): JSX.Element { @@ -68,8 +68,8 @@ export default function EmailTemplate({ ) : null}

Dzień dobry, w dniu {getDate()} odwiedziłem stronę{" "} - {marks[0].originalURL}. Strona ta wysłała moje dane osobowe do podmiotów - trzecich - bez mojej zgody.{" "} + {entries[0].request.originalURL}. Strona ta wysłała moje dane osobowe do + podmiotów trzecich - bez mojej zgody.{" "}