feat: complete TASK-WP0-03 browser gate
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
export const DADA_LOOPBACK_HOST = "127.0.0.1";
|
||||
export const DADA_LOOPBACK_PORT = 43121;
|
||||
|
||||
export interface NetworkBoundaryOptions {
|
||||
allowTestPort?: boolean;
|
||||
}
|
||||
|
||||
interface NetworkRequest {
|
||||
host: string | undefined;
|
||||
method: string;
|
||||
origin: string | undefined;
|
||||
}
|
||||
|
||||
export function isAllowedNetworkRequest(
|
||||
request: NetworkRequest,
|
||||
options: NetworkBoundaryOptions = {},
|
||||
) {
|
||||
if (request.method === "OPTIONS" || !request.host) return false;
|
||||
const allowedHost = options.allowTestPort
|
||||
? /^127\.0\.0\.1:[1-9][0-9]{0,4}$/.test(request.host)
|
||||
: request.host === `${DADA_LOOPBACK_HOST}:${DADA_LOOPBACK_PORT}`;
|
||||
if (!allowedHost) return false;
|
||||
|
||||
if (request.origin !== undefined && request.origin !== `http://${request.host}`) return false;
|
||||
if (!["GET", "HEAD"].includes(request.method) && request.origin === undefined) return false;
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user