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  }