Merge branch 'main' into embedded-vnc

This commit is contained in:
Viktor Liu
2026-09-09 09:30:51 +02:00
115 changed files with 4562 additions and 1324 deletions
+69
View File
@@ -0,0 +1,69 @@
package util
import (
"net/url"
"strconv"
"strings"
)
// SameServiceURL reports whether two service URLs address the same endpoint.
// One endpoint can be written several ways, and every spelling below reaches
// the same server, so none of them is a divergence from another:
//
// an implicit default port https://mgmt.example.com :443
// a zero-padded port https://mgmt.example.com:0443
// a different host case https://MGMT.example.com
// a trailing slash https://mgmt.example.com/
//
// A path is otherwise part of the identity: https://mgmt.example.com and
// https://mgmt.example.com/other are two endpoints.
//
// It lives here rather than next to any one caller because several of them
// compare the same kind of URL — an MDM-enforced management URL against a
// requested one, a stored profile URL against a command-line one — and every
// copy of these rules that drifts turns an equivalent URL into a refused
// request.
func SameServiceURL(a, b *url.URL) bool {
if a == nil || b == nil {
return a == b
}
return strings.EqualFold(a.Hostname(), b.Hostname()) &&
strings.EqualFold(a.Scheme, b.Scheme) &&
ServiceURLPort(a) == ServiceURLPort(b) &&
strings.TrimSuffix(a.Path, "/") == strings.TrimSuffix(b.Path, "/")
}
// SameServiceURLStrings is SameServiceURL for unparsed input. Input that does
// not parse falls back to string equality, which is the strictest thing left
// to do with it.
func SameServiceURLStrings(a, b string) bool {
ua, errA := url.ParseRequestURI(a)
ub, errB := url.ParseRequestURI(b)
if errA != nil || errB != nil {
return a == b
}
return SameServiceURL(ua, ub)
}
// ServiceURLPort is the port a URL addresses: the one it carries, normalized
// numerically so ":0443" and ":443" are one port, or the scheme's default.
func ServiceURLPort(u *url.URL) string {
port := u.Port()
if port == "" {
switch strings.ToLower(u.Scheme) {
case "https":
return "443"
case "http":
return "80"
default:
return ""
}
}
if n, err := strconv.Atoi(port); err == nil {
return strconv.Itoa(n)
}
return port
}
+73
View File
@@ -0,0 +1,73 @@
package util
import (
"net/url"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestSameServiceURLSpellings(t *testing.T) {
tests := []struct {
a, b string
want bool
}{
// One endpoint, written several ways.
{a: "https://mgmt.example.com", b: "https://mgmt.example.com:443", want: true},
{a: "https://mgmt.example.com", b: "https://mgmt.example.com/", want: true},
{a: "https://mgmt.example.com/", b: "https://mgmt.example.com:443/", want: true},
{a: "https://MGMT.example.com", b: "https://mgmt.example.com", want: true},
{a: "https://mgmt.example.com:0443", b: "https://mgmt.example.com:443", want: true},
{a: "http://mgmt.example.com", b: "http://mgmt.example.com:80", want: true},
{a: "HTTPS://mgmt.example.com", b: "https://mgmt.example.com", want: true},
// Different endpoints.
{a: "https://mgmt.example.com", b: "http://mgmt.example.com", want: false},
{a: "https://mgmt.example.com", b: "https://mgmt.example.com:8443", want: false},
{a: "https://mgmt.example.com", b: "https://other.example.com", want: false},
{a: "https://mgmt.example.com", b: "https://mgmt.example.com/other", want: false},
// Unparseable input falls back to string equality.
{a: "mgmt.example.com", b: "mgmt.example.com", want: true},
{a: "mgmt.example.com", b: "https://mgmt.example.com", want: false},
}
for _, tt := range tests {
t.Run(tt.a+" vs "+tt.b, func(t *testing.T) {
assert.Equal(t, tt.want, SameServiceURLStrings(tt.a, tt.b))
assert.Equal(t, tt.want, SameServiceURLStrings(tt.b, tt.a), "the comparison must be symmetric")
})
}
}
// The parsed form is the primitive the string form delegates to, so it must
// answer the same for a spelling that only the parser can tell apart.
func TestSameServiceURLParsed(t *testing.T) {
parse := func(raw string) *url.URL {
t.Helper()
u, err := url.ParseRequestURI(raw)
require.NoError(t, err)
return u
}
assert.True(t, SameServiceURL(parse("https://mgmt.example.com:0443/"), parse("https://MGMT.example.com")))
assert.False(t, SameServiceURL(parse("https://mgmt.example.com"), parse("https://mgmt.example.com:8443")))
assert.True(t, SameServiceURL(nil, nil), "two absent URLs are the same absence")
assert.False(t, SameServiceURL(nil, parse("https://mgmt.example.com")))
}
func TestServiceURLPort(t *testing.T) {
parse := func(raw string) *url.URL {
t.Helper()
u, err := url.ParseRequestURI(raw)
require.NoError(t, err)
return u
}
assert.Equal(t, "443", ServiceURLPort(parse("https://mgmt.example.com")))
assert.Equal(t, "80", ServiceURLPort(parse("http://mgmt.example.com")))
assert.Equal(t, "443", ServiceURLPort(parse("https://mgmt.example.com:0443")))
assert.Equal(t, "8443", ServiceURLPort(parse("https://mgmt.example.com:8443")))
}