summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client_test.go3
-rw-r--r--internal/server/common.go4
-rw-r--r--internal/util/util.go9
-rw-r--r--internal/util/util_test.go41
4 files changed, 35 insertions, 22 deletions
diff --git a/client_test.go b/client_test.go
index 77be634..583553b 100644
--- a/client_test.go
+++ b/client_test.go
@@ -175,7 +175,8 @@ func Test_connect_oauth_parameters(t *testing.T) {
serverURI := getServerURI(t)
- iss := serverURI + "/"
+ // serverURI already ends with a / due to using the util EnsureValidURL function
+ iss := serverURI
tests := []struct {
expectedErr interface{}
parameters httpw.URLParameters
diff --git a/internal/server/common.go b/internal/server/common.go
index 2ab282d..c4ca0ef 100644
--- a/internal/server/common.go
+++ b/internal/server/common.go
@@ -258,8 +258,8 @@ func GetISS(server Server) (string, error) {
if baseErr != nil {
return "", &types.WrappedErrorMessage{Message: "failed getting server ISS", Err: baseErr}
}
- // The base URL does not end with a /, but the ISS does
- return base.URL + "/", nil
+ // We have already ensured that the base URL ends with a /
+ return base.URL, nil
}
func GetOAuthURL(server Server, name string) (string, error) {
diff --git a/internal/util/util.go b/internal/util/util.go
index a8abd80..a500e15 100644
--- a/internal/util/util.go
+++ b/internal/util/util.go
@@ -29,7 +29,14 @@ func EnsureValidURL(s string) (string, error) {
// https://pkg.go.dev/path#Clean
parsedURL.Path = path.Clean(parsedURL.Path)
}
- return parsedURL.String(), nil
+
+ returnedURL := parsedURL.String()
+
+ // Make sure the URL ends with a /
+ if returnedURL[len(returnedURL)-1:] != "/" {
+ returnedURL = returnedURL + "/"
+ }
+ return returnedURL, nil
}
// Creates a random byteslice of `size`
diff --git a/internal/util/util_test.go b/internal/util/util_test.go
index f671251..eb1a9f6 100644
--- a/internal/util/util_test.go
+++ b/internal/util/util_test.go
@@ -13,24 +13,29 @@ func Test_EnsureValidURL(t *testing.T) {
t.Fatal("Got nil error, want: non-nil")
}
- valid, validErr := EnsureValidURL("valid.com")
- if validErr != nil {
- t.Fatalf("Got: %v, want: nil", validErr)
- }
-
- afterValid := "https://valid.com"
- if valid != afterValid {
- t.Fatalf("Got: %v, want: %v", valid, afterValid)
- }
-
- valid, validErr = EnsureValidURL("http://valid.com")
- if validErr != nil {
- t.Fatalf("Got: %v, want: nil", validErr)
- }
-
- afterValid = "http://valid.com"
- if valid != afterValid {
- t.Fatalf("Got: %v, want: %v", valid, afterValid)
+ testCases := map[string]string{
+ // Make sure we set https
+ "example.com/": "https://example.com/",
+ // Make sure we do not override the scheme if provided
+ "http://example.com/": "http://example.com/",
+ // This URL is already valid
+ "https://example.com/": "https://example.com/",
+ // Make sure to add a trailing slash (/)
+ "https://example.com": "https://example.com/",
+ // Cleanup the path 1
+ "https://example.com/////": "https://example.com/",
+ // Cleanup the path 2
+ "https://example.com/..": "https://example.com/",
+ }
+
+ for k, v := range testCases {
+ valid, validErr := EnsureValidURL(k)
+ if validErr != nil {
+ t.Fatalf("Got: %v, want: nil", validErr)
+ }
+ if valid != v {
+ t.Fatalf("Got: %v, want: %v", valid, v)
+ }
}
}