update parser to handle h2c

This commit is contained in:
Pallavi
2025-09-01 21:47:50 +05:30
parent 5e5754fa62
commit b670e6e3dc
2 changed files with 22 additions and 10 deletions

View File

@@ -650,8 +650,8 @@ export default function ReverseProxyTargets(props: {
className="min-w-[150px]" className="min-w-[150px]"
onBlur={(e) => { onBlur={(e) => {
const input = e.target.value.trim(); const input = e.target.value.trim();
const hasProtocol = /^https?:\/\//.test(input); const hasProtocol = /^(https?|h2c):\/\//.test(input);
const hasPort = /:\d+/.test(input); const hasPort = /:\d+(?:\/|$)/.test(input);
if (hasProtocol || hasPort) { if (hasProtocol || hasPort) {
const parsed = parseHostTarget(input); const parsed = parseHostTarget(input);
@@ -675,9 +675,7 @@ export default function ReverseProxyTargets(props: {
}); });
} }
}} }}
/> />
) )
}, },
{ {
@@ -973,8 +971,8 @@ export default function ReverseProxyTargets(props: {
{...field} {...field}
onBlur={(e) => { onBlur={(e) => {
const input = e.target.value.trim(); const input = e.target.value.trim();
const hasProtocol = /^https?:\/\//.test(input); const hasProtocol = /^(https?|h2c):\/\//.test(input);
const hasPort = /:\d+/.test(input); const hasPort = /:\d+(?:\/|$)/.test(input);
if (hasProtocol || hasPort) { if (hasProtocol || hasPort) {
const parsed = parseHostTarget(input); const parsed = parseHostTarget(input);

View File

@@ -1,15 +1,29 @@
export function parseHostTarget(input: string) { export function parseHostTarget(input: string) {
try { try {
const normalized = input.match(/^https?:\/\//) ? input : `http://${input}`; const normalized = input.match(/^(https?|h2c):\/\//) ? input : `http://${input}`;
const url = new URL(normalized); const url = new URL(normalized);
const protocol = url.protocol.replace(":", ""); // http | https const protocol = url.protocol.replace(":", ""); // http | https | h2c
const host = url.hostname; const host = url.hostname;
const port = url.port ? parseInt(url.port, 10) : protocol === "https" ? 443 : 80;
let defaultPort: number;
switch (protocol) {
case "https":
defaultPort = 443;
break;
case "h2c":
defaultPort = 80;
break;
default: // http
defaultPort = 80;
break;
}
const port = url.port ? parseInt(url.port, 10) : defaultPort;
return { protocol, host, port }; return { protocol, host, port };
} catch { } catch {
return null; return null;
} }
} }