in internal/files/files.go [48:91]
func downloadAndProcessURL(ctx *log.Context, url, downloadDir string, fileName string, scriptSAS string, sourceManagedIdentity *handlersettings.RunCommandManagedIdentity) (string, error) {
var err error
if !urlutil.IsValidUrl(url) {
return "", fmt.Errorf(url + " is not a valid url") // url does not contain SAS to se can log it
}
targetFilePath := filepath.Join(downloadDir, fileName)
var scriptSASDownloadErr error = nil
var downloadedFilePath string = ""
if scriptSAS != "" {
if UseMockSASDownloadFailure {
scriptSASDownloadErr = errors.New("Downloading script using SAS token failed.")
} else {
downloadedFilePath, scriptSASDownloadErr = download.GetSASBlob(url, scriptSAS, downloadDir)
}
// Download was successful using SAS. So use downloadedFilePath
if scriptSASDownloadErr == nil && downloadedFilePath != "" {
targetFilePath = downloadedFilePath
}
}
//If there was an error downloading using SAS URI or SAS was not provided, download using managedIdentity or publicly.
if scriptSASDownloadErr != nil || scriptSAS == "" {
downloaders, getDownloadersError := getDownloaders(url, sourceManagedIdentity, download.ProdMsiDownloader{})
if getDownloadersError == nil {
const mode = 0500 // we assume users download scripts to execute
_, err = download.SaveTo(ctx, downloaders, targetFilePath, mode)
} else {
return "", getDownloadersError
}
}
if err != nil {
return "", err
}
err = PostProcessFile(targetFilePath)
if err != nil {
return "", errors.Wrapf(err, "failed to post-process '%s'", fileName)
}
return targetFilePath, nil
}