github.com/mwhudson/juju@v0.0.0-20160512215208-90ff01f3497f/environs/utils/urls.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Copyright 2014 Cloudbase Solutions SRL 3 // Licensed under the AGPLv3, see LICENCE file for details. 4 5 package utils 6 7 import ( 8 "fmt" 9 "net/url" 10 "path/filepath" 11 "strings" 12 13 "github.com/juju/utils" 14 ) 15 16 func GetURL(source, basePath string) (string, error) { 17 // If source is a raw directory, we need to append the file:// prefix 18 // so it can be used as a URL. 19 defaultURL := source 20 u, err := url.Parse(source) 21 if err != nil { 22 return "", fmt.Errorf("invalid default %s URL %s: %v", basePath, defaultURL, err) 23 } 24 25 switch u.Scheme { 26 case "http", "https", "file", "test": 27 return source, nil 28 } 29 30 if filepath.IsAbs(defaultURL) { 31 defaultURL = utils.MakeFileURL(defaultURL) 32 if !strings.HasSuffix(defaultURL, "/"+basePath) { 33 defaultURL = fmt.Sprintf("%s/%s", defaultURL, basePath) 34 } 35 } else { 36 return "", fmt.Errorf("%s is not an absolute path", source) 37 } 38 return defaultURL, nil 39 }