mirror of
https://github.com/netbirdio/netbird.git
synced 2026-03-31 06:24:18 -04:00
Replaces string-based exposed address handling with URL-based InstanceURL() (type url.URL) across relay/server and relay/healthcheck; adds SchemeREL/SchemeRELS constants; updates getInstanceURL to return *url.URL with scheme and TLS validation; adjusts WS dialing and health-check logic to use URL fields.
44 lines
1.1 KiB
Go
44 lines
1.1 KiB
Go
package server
|
|
|
|
import (
|
|
"fmt"
|
|
"net/url"
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
SchemeREL = "rel"
|
|
SchemeRELS = "rels"
|
|
)
|
|
|
|
// getInstanceURL checks if user supplied a URL scheme otherwise adds to the
|
|
// provided address according to TLS definition and parses the address before returning it
|
|
func getInstanceURL(exposedAddress string, tlsSupported bool) (*url.URL, error) {
|
|
addr := exposedAddress
|
|
split := strings.Split(exposedAddress, "://")
|
|
switch {
|
|
case len(split) == 1 && tlsSupported:
|
|
addr = "rels://" + exposedAddress
|
|
case len(split) == 1 && !tlsSupported:
|
|
addr = "rel://" + exposedAddress
|
|
case len(split) > 2:
|
|
return nil, fmt.Errorf("invalid exposed address: %s", exposedAddress)
|
|
}
|
|
|
|
parsedURL, err := url.ParseRequestURI(addr)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("invalid exposed address: %v", err)
|
|
}
|
|
|
|
if parsedURL.Scheme != SchemeREL && parsedURL.Scheme != SchemeRELS {
|
|
return nil, fmt.Errorf("invalid scheme: %s", parsedURL.Scheme)
|
|
}
|
|
|
|
// Validate scheme matches TLS configuration
|
|
if tlsSupported && parsedURL.Scheme == SchemeREL {
|
|
return nil, fmt.Errorf("non-TLS scheme '%s' provided but TLS is supported", SchemeREL)
|
|
}
|
|
|
|
return parsedURL, nil
|
|
}
|