mirror of
https://github.com/netbirdio/netbird.git
synced 2025-07-17 23:02:05 +02:00
- Clients now subscribe to peer status changes. - The server manages and maintains these subscriptions. - Replaced raw string peer IDs with a custom peer ID type for better type safety and clarity.
34 lines
923 B
Go
34 lines
923 B
Go
package server
|
|
|
|
import (
|
|
"fmt"
|
|
"net/url"
|
|
"strings"
|
|
)
|
|
|
|
// 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) (string, 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 "", fmt.Errorf("invalid exposed address: %s", exposedAddress)
|
|
}
|
|
|
|
parsedURL, err := url.ParseRequestURI(addr)
|
|
if err != nil {
|
|
return "", fmt.Errorf("invalid exposed address: %v", err)
|
|
}
|
|
|
|
if parsedURL.Scheme != "rel" && parsedURL.Scheme != "rels" {
|
|
return "", fmt.Errorf("invalid scheme: %s", parsedURL.Scheme)
|
|
}
|
|
|
|
return parsedURL.String(), nil
|
|
}
|