insomnia/packages/insomnia-app/app/network/url-matches-cert-host.ts

39 lines
1.2 KiB
TypeScript
Raw Normal View History

2021-07-22 23:04:56 +00:00
import { setDefaultProtocol } from 'insomnia-url';
2018-06-25 17:42:50 +00:00
import { parse as urlParse } from 'url';
2021-07-22 23:04:56 +00:00
2018-06-25 17:42:50 +00:00
import { escapeRegex } from '../common/misc';
2021-07-22 23:04:56 +00:00
import certificateUrlParse from './certificate-url-parse';
const DEFAULT_PORT = 443;
2018-06-25 17:42:50 +00:00
export function urlMatchesCertHost(certificateHost, requestUrl) {
const cHostWithProtocol = setDefaultProtocol(certificateHost, 'https:');
2018-06-25 17:42:50 +00:00
const { hostname, port } = urlParse(requestUrl);
2018-10-17 16:42:33 +00:00
const { hostname: cHostname, port: cPort } = certificateUrlParse(cHostWithProtocol);
// @ts-expect-error -- TSCONVERSION `parseInt(null)` returns `NaN`
const assumedPort = parseInt(port) || DEFAULT_PORT;
// @ts-expect-error -- TSCONVERSION `parseInt(null)` returns `NaN`
const assumedCPort = parseInt(cPort) || DEFAULT_PORT;
const cHostnameRegex = escapeRegex(cHostname || '').replace(/\\\*/g, '.*');
const cPortRegex = escapeRegex(cPort || '').replace(/\\\*/g, '.*');
// Check ports
if ((cPort + '').includes('*')) {
if (!(port || '').match(`^${cPortRegex}$`)) {
return false;
}
} else {
if (assumedCPort !== assumedPort) {
return false;
}
}
// Check hostnames
if (!(hostname || '').match(`^${cHostnameRegex}$`)) {
return false;
}
// Everything matches
return true;
}