fix: use CRC32 to shorten app subdomain (#9645)

This commit is contained in:
Marcin Tojek
2023-09-12 17:11:45 +02:00
committed by GitHub
parent 898971b329
commit 0e28397c82
4 changed files with 24 additions and 6 deletions
+9 -1
View File
@@ -2,6 +2,7 @@ package httpapi
import (
"fmt"
"hash/crc32"
"net"
"regexp"
"strings"
@@ -18,6 +19,8 @@ var (
nameRegex))
validHostnameLabelRegex = regexp.MustCompile(`^[a-z0-9]([-a-z0-9]*[a-z0-9])?$`)
crcTable = crc32.MakeTable(crc32.IEEE)
)
// ApplicationURL is a parsed application URL hostname.
@@ -39,7 +42,12 @@ func (a ApplicationURL) String() string {
_, _ = appURL.WriteString(a.WorkspaceName)
_, _ = appURL.WriteString("--")
_, _ = appURL.WriteString(a.Username)
return appURL.String()
hostname := appURL.String()
if len(hostname) < 64 { // max length for the subdomain level
return hostname
}
return fmt.Sprintf("app-%08x", crc32.Checksum([]byte(hostname), crcTable))
}
// ParseSubdomainAppURL parses an ApplicationURL from the given subdomain. If
+10
View File
@@ -42,6 +42,16 @@ func TestApplicationURLString(t *testing.T) {
},
Expected: "8080--agent--workspace--user",
},
{
Name: "LongAppName",
URL: httpapi.ApplicationURL{
AppSlugOrPort: "0123456789012345678901234567890123456789",
AgentName: "agent",
WorkspaceName: "workspace",
Username: "user",
},
Expected: "app-90667f72",
},
}
for _, c := range testCases {