summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/util/util.go12
-rw-r--r--state.go6
2 files changed, 18 insertions, 0 deletions
diff --git a/internal/util/util.go b/internal/util/util.go
index b86e4cb..17ae1c3 100644
--- a/internal/util/util.go
+++ b/internal/util/util.go
@@ -11,6 +11,18 @@ import (
"github.com/jwijenbergh/eduvpn-common/internal/types"
)
+func EnsureValidURL(s string) (string, error) {
+ parsedURL, parseErr := url.Parse(s)
+ if parseErr != nil {
+ return "", &types.WrappedErrorMessage{Message: fmt.Sprintf("failed parsing url: %s", s), Err: parseErr}
+ }
+
+ if parsedURL.Scheme == "" {
+ parsedURL.Scheme = "https"
+ }
+ return parsedURL.String(), nil
+}
+
// Creates a random byteslice of `size`
func MakeRandomByteSlice(size int) ([]byte, error) {
byteSlice := make([]byte, size)
diff --git a/state.go b/state.go
index c046185..594df8d 100644
--- a/state.go
+++ b/state.go
@@ -234,6 +234,12 @@ func (state *VPNState) addInstituteServer(url string) (server.Server, error) {
func (state *VPNState) addCustomServer(url string) (server.Server, error) {
errorMessage := fmt.Sprintf("failed adding Custom server with url %s", url)
+ url, urlErr := util.EnsureValidURL(url)
+
+ if urlErr != nil {
+ return nil, &types.WrappedErrorMessage{Message: errorMessage, Err: urlErr}
+ }
+
customServer := &types.DiscoveryServer{BaseURL: url, DisplayName: map[string]string{"en": url}, Type: "custom_server"}
// A custom server is just an institute access server under the hood