diff options
| -rw-r--r-- | internal/util/util.go | 12 | ||||
| -rw-r--r-- | state.go | 6 |
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) @@ -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 |
