in internal/files/files.go [96:138]
func getDownloaders(fileURL string, managedIdentity *handlersettings.RunCommandManagedIdentity, msiDownloader download.MsiDownloader) ([]download.Downloader, error) {
if fileURL == "" {
return nil, fmt.Errorf("fileURL is empty")
}
if download.IsAzureStorageBlobUri(fileURL) {
// if managed identity was specified in the configuration, try to use it to download the files
var msiProvider download.MsiProvider
switch {
case managedIdentity == nil || (managedIdentity.ClientId == "" && managedIdentity.ObjectId == ""):
// get msi Provider for blob url implicitly (uses system managed identity)
msiProvider = msiDownloader.GetMsiProvider(fileURL)
case managedIdentity.ClientId != "" && managedIdentity.ObjectId == "":
// uses user-managed identity
msiProvider = msiDownloader.GetMsiProviderByClientId(fileURL, managedIdentity.ClientId)
case managedIdentity.ClientId == "" && managedIdentity.ObjectId != "":
// uses user-managed identity
msiProvider = msiDownloader.GetMsiProviderByObjectId(fileURL, managedIdentity.ObjectId)
default:
return nil, fmt.Errorf("use either ClientId or ObjectId for managed identity. Not both")
}
_, msiError := msiProvider()
if msiError == nil {
return []download.Downloader{
//Try downloading with MSI token first, if that fails attempt public download
download.NewBlobWithMsiDownload(fileURL, msiProvider),
download.NewURLDownload(fileURL), // Try downloading the Azure storage blob as public URI
}, nil
} else {
return []download.Downloader{
// Try downloading the Azure storage blob as public URI
download.NewURLDownload(fileURL),
}, nil
}
} else {
// Public URI - do not use MSI downloader if the uri is not azure storage blob
return []download.Downloader{download.NewURLDownload(fileURL)}, nil
}
}