in cli/api/catalog/catalog.go [219:302]
func AddCatalog(network *net.Network, resource string) (*models.CatalogBundleAddResult, error) {
urlString := "/v1/catalog"
urlStringWithDetail := urlString + "?detail=true"
var result models.CatalogBundleAddResult
var body []byte
//Force auto-detect by default
contentType := "application/octet-stream"
u, err := url.Parse(resource)
if err != nil {
return nil, err
}
//If the resource exists as a file, or if the resource-parsed-as-URL as file scheme
_, err = os.Stat(resource)
if err == nil || "file" == u.Scheme {
if "file" == u.Scheme {
if u.Path == "" {
return nil, errors.New("No resource in 'file:' URL: " + resource)
}
resource = u.Path
}
file, err := os.Open(filepath.Clean(resource))
if err != nil {
return nil, err
}
fileStat, err := file.Stat()
if err != nil {
return nil, err
}
var dat []byte
if fileStat.IsDir() {
//A dir is a special case, we need to zip it up, and call a different network method
buf, err := ZipResource(resource)
if err != nil {
return nil, err
}
dat = buf.Bytes()
contentType = "application/x-zip"
} else {
extension := filepath.Ext(resource)
lowercaseExtension := strings.ToLower(extension)
if lowercaseExtension == ".zip" {
contentType = "application/x-zip"
urlString = urlStringWithDetail
} else if lowercaseExtension == ".jar" {
contentType = "application/x-jar"
urlString = urlStringWithDetail
} else if lowercaseExtension == ".yaml" || lowercaseExtension == ".bom" {
contentType = "application/x-yaml"
}
dat, err = ioutil.ReadFile(resource)
if err != nil {
return nil, err
}
}
body, err = network.SendPostRequestWithContentType(urlStringWithDetail, dat, contentType)
if err != nil {
return nil, err
}
} else if "http" == u.Scheme || "https" == u.Scheme {
body, err = network.SendPostResourceRequest(urlString, resource, contentType)
if err != nil {
return nil, err
}
} else {
return nil, errors.New("File does not exist or unrecognised URL protocol scheme: " + resource)
}
err = json.Unmarshal(body, &result)
if result.Code == "" {
// detail API not supported, just store the types
err = json.Unmarshal(body, &result.Types)
}
return &result, err
}