From eb4195d0e935fdce888c5fce63f57433e91c79a4 Mon Sep 17 00:00:00 2001
From: Erik Brakkee <erik@brakkee.org>
Date: Fri, 26 Jul 2024 20:40:01 +0200
Subject: [PATCH] good url validation.

---
 cmd/agent/agent.go | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/cmd/agent/agent.go b/cmd/agent/agent.go
index 39752c1..3cf05e0 100755
--- a/cmd/agent/agent.go
+++ b/cmd/agent/agent.go
@@ -222,9 +222,17 @@ func main() {
 	if len(args) != 1 {
 		printHelp("")
 	}
-	validateString(args[0], "wsUrl", `^wss?://[a-zA-Z0-9]*(:[0-9]+)?$`)
 
-	wsURL := args[0] + "/agent/" + id
+	wsURL := args[0]
+	url, err := url.Parse(wsURL)
+	if err != nil {
+		printHelp(fmt.Sprintf("Invalid URL %s", wsURL))
+	}
+	if url.Path != "" && url.Path != "/" {
+		printHelp(fmt.Sprintf("Only a base URL without path may be specified: %s", wsURL))
+	}
+
+	wsURL += "/agent/" + id
 
 	dialer := websocket.Dialer{
 		Proxy:            http.ProxyFromEnvironment,