mirror of
https://github.com/AikidoSec/safe-chain.git
synced 2026-05-26 12:10:49 +00:00
Add interceptors for MITM
This commit is contained in:
parent
0b056e92de
commit
e251908cb3
4 changed files with 123 additions and 11 deletions
|
|
@ -0,0 +1,50 @@
|
|||
/**
|
||||
* @typedef {import('./requestInterceptorBuilder.js').RequestInterceptorBuilder} RequestInterceptorBuilder
|
||||
* @typedef {import('./requestInterceptorBuilder.js').RequestInterceptor} RequestInterceptor
|
||||
*
|
||||
* @typedef {Object} InterceptorBuilder
|
||||
* @property {(requestFunc: (requestHandlerBuilder: RequestInterceptorBuilder) => Promise<void>) => void} onRequest
|
||||
* @property {() => Interceptor} build
|
||||
*
|
||||
* @typedef {Object} Interceptor
|
||||
* @property {(targetUrl: string) => Promise<RequestInterceptor>} handleRequest
|
||||
*/
|
||||
|
||||
import { createRequestInterceptorBuilder } from "./requestInterceptorBuilder.js";
|
||||
|
||||
/**
|
||||
* @returns {InterceptorBuilder}
|
||||
*/
|
||||
export function createInterceptorBuilder() {
|
||||
/**
|
||||
* @type {Array<(requestHandlerBuilder: RequestInterceptorBuilder) => Promise<void>>}
|
||||
*/
|
||||
const requestHandlers = [];
|
||||
|
||||
return {
|
||||
onRequest(requestFunc) {
|
||||
requestHandlers.push(requestFunc);
|
||||
},
|
||||
build() {
|
||||
return buildInterceptor(requestHandlers);
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Array<(requestHandlerBuilder: RequestInterceptorBuilder) => Promise<void>>} requestHandlers
|
||||
* @returns {Interceptor}
|
||||
*/
|
||||
function buildInterceptor(requestHandlers) {
|
||||
return {
|
||||
async handleRequest(targetUrl) {
|
||||
const reqInterceptorBuilder = createRequestInterceptorBuilder(targetUrl);
|
||||
|
||||
for (const handler of requestHandlers) {
|
||||
await handler(reqInterceptorBuilder);
|
||||
}
|
||||
|
||||
return reqInterceptorBuilder.build();
|
||||
},
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
/**
|
||||
* @typedef {Object} RequestInterceptorBuilder
|
||||
* @property {string} targetUrl
|
||||
* @property {(statusCode: number, message: string) => void} blockRequest
|
||||
* @property {() => RequestInterceptor} build
|
||||
*
|
||||
* @typedef {Object} RequestInterceptor
|
||||
* @property {{statusCode: number, message: string} | undefined} blockResponse
|
||||
*/
|
||||
|
||||
/**
|
||||
* @param {string} targetUrl
|
||||
* @returns {RequestInterceptorBuilder}
|
||||
*/
|
||||
export function createRequestInterceptorBuilder(targetUrl) {
|
||||
/** @type {{statusCode: number, message: string} | undefined} */
|
||||
let blockResponse = undefined;
|
||||
|
||||
return {
|
||||
targetUrl,
|
||||
blockRequest(statusCode, message) {
|
||||
blockResponse = { statusCode, message };
|
||||
},
|
||||
build() {
|
||||
return {
|
||||
blockResponse,
|
||||
};
|
||||
},
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue