rentgen/request-cluster.ts

96 lines
2.2 KiB
TypeScript
Raw Normal View History

2021-10-03 16:33:23 +02:00
import { EventEmitter } from "events";
import ExtendedRequest from "./extended-request";
import { parseCookie } from "./util";
2021-10-03 20:13:36 +02:00
export class StolenDataEntry {
constructor(public type: string, public name: string, public value: string) {}
}
2021-10-03 16:33:23 +02:00
export class RequestCluster extends EventEmitter {
public requests: ExtendedRequest[] = [];
constructor(public id: string) {
super();
}
add(request: ExtendedRequest) {
this.requests.push(request);
this.emit("change");
}
hasCookies() {
for (const request of this.requests) {
if (request.hasCookie()) {
return true;
}
}
return false;
}
getCookiesContent({
minValueLength,
}: {
minValueLength: number;
2021-10-03 20:13:36 +02:00
}): StolenDataEntry[] {
this.getQueryParamsContent({ minValueLength });
2021-10-03 16:33:23 +02:00
const cookieValues = new Set<string>();
for (const request of this.requests) {
if (request.hasCookie()) {
cookieValues.add(request.getCookie());
}
}
return Array.from(cookieValues.values())
.map(parseCookie)
.map((o) => Object.entries(o))
.reduce((a, b) => a.concat(b), [])
2021-10-03 20:13:36 +02:00
.map(([key, value]) => new StolenDataEntry("cookie", key, value))
.filter((e) => e.value.length >= minValueLength);
}
getQueryParamsContent({
minValueLength,
}: {
minValueLength: number;
}): StolenDataEntry[] {
const result = [];
for (const request of this.requests) {
console.log(request.data.url);
}
return result;
}
getPathnameParamsContent({
minValueLength,
}: {
minValueLength: number;
}): StolenDataEntry[] {
let result = [];
for (const request of this.requests) {
result = [...result, ...request.getPathParams()];
}
console.log("PATHNAME PARAMS FOR", this.id, result);
return result;
}
getStolenData(filter: { minValueLength: number }) {
return [
...this.getCookiesContent(filter),
...this.getPathnameParamsContent(filter),
];
2021-10-03 16:33:23 +02:00
}
static sortCompare(a: RequestCluster, b: RequestCluster) {
if (a.hasCookies() == b.hasCookies()) {
if (a.id < b.id) {
return -1;
} else {
return 1;
}
} else {
if (a.hasCookies()) {
return -1;
} else {
return 1;
}
}
}
}