fix: allow sharing ports >9999 (#22273)

Closes https://github.com/coder/coder/issues/22267
This commit is contained in:
Steven Masley
2026-02-24 23:46:43 -06:00
committed by GitHub
parent 6c16794173
commit 93e823931b
2 changed files with 25 additions and 4 deletions
+4 -1
View File
@@ -19,7 +19,10 @@ var (
appURL = regexp.MustCompile(fmt.Sprintf( appURL = regexp.MustCompile(fmt.Sprintf(
`^(?P<AppSlug>%[1]s)(?:--(?P<AgentName>%[1]s))?--(?P<WorkspaceName>%[1]s)--(?P<Username>%[1]s)$`, `^(?P<AppSlug>%[1]s)(?:--(?P<AgentName>%[1]s))?--(?P<WorkspaceName>%[1]s)--(?P<Username>%[1]s)$`,
nameRegex)) nameRegex))
PortRegex = regexp.MustCompile(`^\d{4}s?$`) // PortRegex should not be able to be greater than 65535. In usage though, if a
// user tries to use a greater port, the proxy will just block it and not cause
// any issues. This is a good enough regex check.
PortRegex = regexp.MustCompile(`^\d{4,5}s?$`)
validHostnameLabelRegex = regexp.MustCompile(`^[a-z0-9]([-a-z0-9]*[a-z0-9])?$`) validHostnameLabelRegex = regexp.MustCompile(`^[a-z0-9]([-a-z0-9]*[a-z0-9])?$`)
) )
+21 -3
View File
@@ -193,6 +193,16 @@ func TestParseSubdomainAppURL(t *testing.T) {
Username: "user", Username: "user",
}, },
}, },
{
Name: "Port(5)--Agent--Workspace--User",
Subdomain: "12412--agent--workspace--user",
Expected: appurl.ApplicationURL{
AppSlugOrPort: "12412",
AgentName: "agent",
WorkspaceName: "workspace",
Username: "user",
},
},
{ {
Name: "Port--Agent--Workspace--User", Name: "Port--Agent--Workspace--User",
Subdomain: "8080s--agent--workspace--user", Subdomain: "8080s--agent--workspace--user",
@@ -225,11 +235,11 @@ func TestParseSubdomainAppURL(t *testing.T) {
}, },
}, },
{ {
Name: "5DigitAppSlug--Workspace--User", Name: "5DigitPort--agent--Workspace--User",
Subdomain: "30000--workspace--user", Subdomain: "30000--agent--workspace--user",
Expected: appurl.ApplicationURL{ Expected: appurl.ApplicationURL{
AppSlugOrPort: "30000", AppSlugOrPort: "30000",
AgentName: "", AgentName: "agent",
WorkspaceName: "workspace", WorkspaceName: "workspace",
Username: "user", Username: "user",
}, },
@@ -599,6 +609,14 @@ func TestURLGenerationVsParsing(t *testing.T) {
Name: "5DigitAppSlug_AgentOmittedInParsing", Name: "5DigitAppSlug_AgentOmittedInParsing",
AppSlugOrPort: "30000", AppSlugOrPort: "30000",
AgentName: "agent", AgentName: "agent",
ExpectedParsed: "agent",
},
{
// 6 digits is not a valid port, so it is treated as an app slug.
// App slugs do not require the agent name, so it is dropped
Name: "6DigitAppSlug_AgentOmittedInParsing",
AppSlugOrPort: "300000",
AgentName: "agent",
ExpectedParsed: "", ExpectedParsed: "",
}, },
} }