From 81063883103f5f5f7b78b67cdf5baf3eea69921e Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Tue, 17 May 2022 12:33:36 +0200 Subject: [PATCH 1/8] Allow downloading index and signature in a tar.bz2 archive --- arduino/resources/index.go | 50 ++++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 5 deletions(-) diff --git a/arduino/resources/index.go b/arduino/resources/index.go index c50b0ae4daa..a176f501543 100644 --- a/arduino/resources/index.go +++ b/arduino/resources/index.go @@ -16,6 +16,8 @@ package resources import ( + "context" + "errors" "net/url" "path" "strings" @@ -25,6 +27,7 @@ import ( "github.com/arduino/arduino-cli/arduino/security" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" + "github.com/codeclysm/extract/v3" "go.bug.st/downloader/v2" ) @@ -56,8 +59,42 @@ func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadP return &arduino.FailedDownloadError{Message: tr("Error downloading index '%s'", res.URL), Cause: err} } + var signaturePath, tmpSignaturePath *paths.Path + hasSignature := false + // Expand the index if it is compressed - if strings.HasSuffix(indexFileName, ".gz") { + if strings.HasSuffix(indexFileName, ".tar.bz2") { + indexFileName = strings.TrimSuffix(indexFileName, ".tar.bz2") + ".json" // == package_index.json + signatureFileName := indexFileName + ".sig" + signaturePath = destDir.Join(signatureFileName) + + // .tar.gz may contain both index and signature + + // Extract archive in a tmp/archive subdirectory + f, err := tmpIndexPath.Open() + if err != nil { + return &arduino.PermissionDeniedError{Message: tr("Error extracting %s", tmpIndexPath), Cause: err} + } + defer f.Close() + tmpArchivePath := tmp.Join("archive") + _ = tmpArchivePath.MkdirAll() + if err := extract.Bz2(context.Background(), f, tmpArchivePath.String(), nil); err != nil { + return &arduino.PermissionDeniedError{Message: tr("Error extracting %s", tmpIndexPath), Cause: err} + } + + // Look for index.json + tmpIndexPath = tmpArchivePath.Join(indexFileName) + if !tmpIndexPath.Exist() { + err := errors.New(tr("%s not found", indexFileName)) + return &arduino.FailedDownloadError{Message: tr("Invalid index archive"), Cause: err} + } + + // Look for signature + if t := tmpArchivePath.Join(signatureFileName); t.Exist() { + tmpSignaturePath = t + hasSignature = true + } + } else if strings.HasSuffix(indexFileName, ".gz") { indexFileName = strings.TrimSuffix(indexFileName, ".gz") // == package_index.json tmpUnzippedIndexPath := tmp.Join(indexFileName) if err := paths.GUnzip(tmpIndexPath, tmpUnzippedIndexPath); err != nil { @@ -67,7 +104,6 @@ func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadP } // Check the signature if needed - var signaturePath, tmpSignaturePath *paths.Path if res.SignatureURL != nil { // Compose signature URL signatureFileName := path.Base(res.SignatureURL.Path) @@ -79,6 +115,10 @@ func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadP return &arduino.FailedDownloadError{Message: tr("Error downloading index signature '%s'", res.SignatureURL), Cause: err} } + hasSignature = true + } + + if hasSignature { // Check signature... if valid, _, err := security.VerifyArduinoDetachedSignature(tmpIndexPath, tmpSignaturePath); err != nil { return &arduino.PermissionDeniedError{Message: tr("Error verifying signature"), Cause: err} @@ -109,12 +149,12 @@ func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadP if err := tmpIndexPath.CopyTo(indexPath); err != nil { return &arduino.PermissionDeniedError{Message: tr("Error saving downloaded index"), Cause: err} } - if res.SignatureURL != nil { + if hasSignature { if err := tmpSignaturePath.CopyTo(signaturePath); err != nil { return &arduino.PermissionDeniedError{Message: tr("Error saving downloaded index signature"), Cause: err} } } - oldIndex.Remove() - oldSignature.Remove() + _ = oldIndex.Remove() + _ = oldSignature.Remove() return nil } From bc0d42ab5202087580b8313b5e76382f39571ac6 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Tue, 17 May 2022 12:34:22 +0200 Subject: [PATCH 2/8] Make some configurations resilient to empty settings --- configuration/network.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/configuration/network.go b/configuration/network.go index 17149391fc2..04d6bb98985 100644 --- a/configuration/network.go +++ b/configuration/network.go @@ -26,7 +26,10 @@ import ( // UserAgent returns the user agent (mainly used by HTTP clients) func UserAgent(settings *viper.Viper) string { - subComponent := settings.GetString("network.user_agent_ext") + subComponent := "" + if settings != nil { + subComponent = settings.GetString("network.user_agent_ext") + } if subComponent != "" { subComponent = " " + subComponent } @@ -41,7 +44,7 @@ func UserAgent(settings *viper.Viper) string { // NetworkProxy returns the proxy configuration (mainly used by HTTP clients) func NetworkProxy(settings *viper.Viper) (*url.URL, error) { - if !settings.IsSet("network.proxy") { + if settings == nil || !settings.IsSet("network.proxy") { return nil, nil } if proxyConfig := settings.GetString("network.proxy"); proxyConfig == "" { From b3ee5371542ff768a9025c1948ff8ab75e882665 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Tue, 17 May 2022 12:34:33 +0200 Subject: [PATCH 3/8] Added tests --- arduino/resources/resources_test.go | 38 ++++++++++++++++++ .../testdata/invalid/package_index.tar.bz2 | Bin 0 -> 40429 bytes .../testdata/valid/package_index.tar.bz2 | Bin 0 -> 40421 bytes 3 files changed, 38 insertions(+) create mode 100644 arduino/resources/testdata/invalid/package_index.tar.bz2 create mode 100644 arduino/resources/testdata/valid/package_index.tar.bz2 diff --git a/arduino/resources/resources_test.go b/arduino/resources/resources_test.go index efc6061ef57..b4af710d610 100644 --- a/arduino/resources/resources_test.go +++ b/arduino/resources/resources_test.go @@ -18,6 +18,9 @@ package resources import ( "crypto" "encoding/hex" + "net" + "net/http" + "net/url" "testing" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" @@ -110,3 +113,38 @@ func TestDownloadAndChecksums(t *testing.T) { _, err = r.TestLocalArchiveChecksum(tmp) require.Error(t, err) } + +func TestIndexDownloadAndSignatureWithinArchive(t *testing.T) { + // Spawn test webserver + mux := http.NewServeMux() + fs := http.FileServer(http.Dir("testdata")) + mux.Handle("/", fs) + server := &http.Server{Handler: mux} + ln, err := net.Listen("tcp", "127.0.0.1:") + require.NoError(t, err) + defer ln.Close() + go server.Serve(ln) + + validIdxURL, err := url.Parse("http://" + ln.Addr().String() + "/valid/package_index.tar.bz2") + require.NoError(t, err) + idxResource := &IndexResource{URL: validIdxURL} + destDir, err := paths.MkTempDir("", "") + require.NoError(t, err) + defer destDir.RemoveAll() + err = idxResource.Download(destDir, func(curr *rpc.DownloadProgress) {}) + require.NoError(t, err) + require.True(t, destDir.Join("package_index.json").Exist()) + require.True(t, destDir.Join("package_index.json.sig").Exist()) + + invalidIdxURL, err := url.Parse("http://" + ln.Addr().String() + "/invalid/package_index.tar.bz2") + require.NoError(t, err) + invIdxResource := &IndexResource{URL: invalidIdxURL} + invDestDir, err := paths.MkTempDir("", "") + require.NoError(t, err) + defer invDestDir.RemoveAll() + err = invIdxResource.Download(invDestDir, func(curr *rpc.DownloadProgress) {}) + require.Error(t, err) + require.Contains(t, err.Error(), "invalid signature") + require.False(t, invDestDir.Join("package_index.json").Exist()) + require.False(t, invDestDir.Join("package_index.json.sig").Exist()) +} diff --git a/arduino/resources/testdata/invalid/package_index.tar.bz2 b/arduino/resources/testdata/invalid/package_index.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..f46043268e5e91482ca66cbbff9c2d7531c308d5 GIT binary patch literal 40429 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

Nduhj=!t?_Dx}UiaJQdl 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 literal 0 HcmV?d00001 From a2f73e1f38465046c6e655cdcc1cd7ddbdcab50d Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Tue, 17 May 2022 12:38:12 +0200 Subject: [PATCH 4/8] fix comment --- arduino/resources/index.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arduino/resources/index.go b/arduino/resources/index.go index a176f501543..39f597837ac 100644 --- a/arduino/resources/index.go +++ b/arduino/resources/index.go @@ -68,7 +68,7 @@ func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadP signatureFileName := indexFileName + ".sig" signaturePath = destDir.Join(signatureFileName) - // .tar.gz may contain both index and signature + // .tar archive may contain both index and signature // Extract archive in a tmp/archive subdirectory f, err := tmpIndexPath.Open() From f57e747c3071df191649abfb484b61def412502b Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Wed, 18 May 2022 16:53:48 +0200 Subject: [PATCH 5/8] Apply suggestions from code review Co-authored-by: Umberto Baldi <34278123+umbynos@users.noreply.github.com> --- arduino/resources/index.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/arduino/resources/index.go b/arduino/resources/index.go index 39f597837ac..3d15252c7ed 100644 --- a/arduino/resources/index.go +++ b/arduino/resources/index.go @@ -17,7 +17,6 @@ package resources import ( "context" - "errors" "net/url" "path" "strings" @@ -28,6 +27,7 @@ import ( rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/codeclysm/extract/v3" + "github.com/sirupsen/logrus" "go.bug.st/downloader/v2" ) @@ -68,12 +68,12 @@ func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadP signatureFileName := indexFileName + ".sig" signaturePath = destDir.Join(signatureFileName) - // .tar archive may contain both index and signature + // .tar.bz2 archive may contain both index and signature // Extract archive in a tmp/archive subdirectory f, err := tmpIndexPath.Open() if err != nil { - return &arduino.PermissionDeniedError{Message: tr("Error extracting %s", tmpIndexPath), Cause: err} + return &arduino.PermissionDeniedError{Message: tr("Error opening %s", tmpIndexPath), Cause: err} } defer f.Close() tmpArchivePath := tmp.Join("archive") @@ -85,14 +85,15 @@ func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadP // Look for index.json tmpIndexPath = tmpArchivePath.Join(indexFileName) if !tmpIndexPath.Exist() { - err := errors.New(tr("%s not found", indexFileName)) - return &arduino.FailedDownloadError{Message: tr("Invalid index archive"), Cause: err} + return &arduino.NotFoundError{Message: tr("Invalid archive: file %{1}s not found in archive %{2}s", indexFileName, tmpArchivePath.Base())} } // Look for signature if t := tmpArchivePath.Join(signatureFileName); t.Exist() { tmpSignaturePath = t hasSignature = true + } else { + logrus.Infof("No signature %s found in package index archive %s", signatureFileName, tmpArchivePath.Base()) } } else if strings.HasSuffix(indexFileName, ".gz") { indexFileName = strings.TrimSuffix(indexFileName, ".gz") // == package_index.json From 17322bb763540e6e7796545dcf74f3f34122dd38 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Fri, 20 May 2022 00:39:05 +0200 Subject: [PATCH 6/8] Allow .tar.bz2 package index URL --- arduino/cores/packagemanager/package_manager.go | 6 +++++- cli/globals/globals.go | 2 +- commands/instances.go | 2 +- test/test_board.py | 2 +- test/test_core.py | 2 +- test/test_update.py | 6 ++---- 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/arduino/cores/packagemanager/package_manager.go b/arduino/cores/packagemanager/package_manager.go index 98e5a3e6415..960cea53827 100644 --- a/arduino/cores/packagemanager/package_manager.go +++ b/arduino/cores/packagemanager/package_manager.go @@ -237,7 +237,11 @@ func (pm *PackageManager) ResolveFQBN(fqbn *cores.FQBN) ( // LoadPackageIndex loads a package index by looking up the local cached file from the specified URL func (pm *PackageManager) LoadPackageIndex(URL *url.URL) error { - indexPath := pm.IndexDir.Join(path.Base(URL.Path)) + indexFileName := path.Base(URL.Path) + if strings.HasSuffix(indexFileName, ".tar.bz2") { + indexFileName = strings.TrimSuffix(indexFileName, ".tar.bz2") + ".json" + } + indexPath := pm.IndexDir.Join(indexFileName) index, err := packageindex.LoadIndex(indexPath) if err != nil { return fmt.Errorf(tr("loading json index file %[1]s: %[2]s"), indexPath, err) diff --git a/cli/globals/globals.go b/cli/globals/globals.go index 8a73ba08745..d0369683059 100644 --- a/cli/globals/globals.go +++ b/cli/globals/globals.go @@ -26,5 +26,5 @@ var ( // VersionInfo contains all info injected during build VersionInfo = version.NewInfo(filepath.Base(os.Args[0])) // DefaultIndexURL is the default index url - DefaultIndexURL = "https://downloads.arduino.cc/packages/package_index.json" + DefaultIndexURL = "https://downloads.arduino.cc/packages/package_index.tar.bz2" ) diff --git a/commands/instances.go b/commands/instances.go index 2ecf8827915..9364d019bf5 100644 --- a/commands/instances.go +++ b/commands/instances.go @@ -434,7 +434,7 @@ func UpdateIndex(ctx context.Context, req *rpc.UpdateIndexRequest, downloadCB rp indexResource := resources.IndexResource{ URL: URL, } - if strings.HasSuffix(URL.Host, "arduino.cc") { + if strings.HasSuffix(URL.Host, "arduino.cc") && strings.HasSuffix(URL.Path, ".json") { indexResource.SignatureURL, _ = url.Parse(u) // should not fail because we already parsed it indexResource.SignatureURL.Path += ".sig" } diff --git a/test/test_board.py b/test/test_board.py index 3af37c3aa8a..d696101b594 100644 --- a/test/test_board.py +++ b/test/test_board.py @@ -30,7 +30,7 @@ "official": true, "package": { "maintainer": "Arduino", - "url": "https://downloads.arduino.cc/packages/package_index.json", + "url": "https://downloads.arduino.cc/packages/package_index.tar.bz2", "website_url": "http://www.arduino.cc/", "email": "packages@arduino.cc", "name": "arduino", diff --git a/test/test_core.py b/test/test_core.py index 0f32ad74f69..920032f24f8 100644 --- a/test/test_core.py +++ b/test/test_core.py @@ -201,7 +201,7 @@ def test_core_install_without_updateindex(run_command): # Download samd core pinned to 1.8.6 result = run_command(["core", "install", "arduino:samd@1.8.6"]) assert result.ok - assert "Downloading index: package_index.json downloaded" in result.stdout + assert "Downloading index: package_index.tar.bz2 downloaded" in result.stdout @pytest.mark.skipif( diff --git a/test/test_update.py b/test/test_update.py index c5e747375b2..442a4f8bf0f 100644 --- a/test/test_update.py +++ b/test/test_update.py @@ -21,8 +21,7 @@ def test_update(run_command): assert res.ok lines = [l.strip() for l in res.stdout.splitlines()] - assert "Downloading index: package_index.json downloaded" in lines - assert "Downloading index signature: package_index.json.sig downloaded" in lines + assert "Downloading index: package_index.tar.bz2 downloaded" in lines assert "Downloading index: library_index.json.gz downloaded" in lines assert "Downloading index signature: library_index.json.sig downloaded" in lines @@ -45,8 +44,7 @@ def test_update_showing_outdated(run_command): assert result.ok lines = [l.strip() for l in result.stdout.splitlines()] - assert "Downloading index: package_index.json downloaded" in lines - assert "Downloading index signature: package_index.json.sig downloaded" in lines + assert "Downloading index: package_index.tar.bz2 downloaded" in lines assert "Downloading index: library_index.json.gz downloaded" in lines assert "Downloading index signature: library_index.json.sig downloaded" in lines assert lines[-5].startswith("Arduino AVR Boards") From de2ae4615231a08998b109898ef52ce8799ee650 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Fri, 20 May 2022 16:56:09 +0200 Subject: [PATCH 7/8] Fix errors in timeout checks --- cli/core/search.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cli/core/search.go b/cli/core/search.go index 69881d6cdb6..6942f7d52a0 100644 --- a/cli/core/search.go +++ b/cli/core/search.go @@ -134,10 +134,9 @@ func indexesNeedUpdating(duration string) bool { now := time.Now() modTimeThreshold, err := time.ParseDuration(duration) - // Not the most elegant way of handling this error - // but it does its job if err != nil { - modTimeThreshold, _ = time.ParseDuration("24h") + feedback.Error(tr("Invalid timeout: %s", err)) + os.Exit(errorcodes.ErrBadArgument) } urls := []string{globals.DefaultIndexURL} From 7d14f3c025efc870e2ac0a6be5a85a9c85cc2457 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Fri, 20 May 2022 17:00:38 +0200 Subject: [PATCH 8/8] Fixed check for stale package_index.json files --- cli/core/search.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/cli/core/search.go b/cli/core/search.go index 6942f7d52a0..afaf32f4409 100644 --- a/cli/core/search.go +++ b/cli/core/search.go @@ -152,7 +152,18 @@ func indexesNeedUpdating(duration string) bool { continue } - coreIndexPath := indexpath.Join(path.Base(URL.Path)) + // should handle: + // - package_index.json + // - package_index.json.sig + // - package_index.json.gz + // - package_index.tar.bz2 + indexFileName := path.Base(URL.Path) + indexFileName = strings.TrimSuffix(indexFileName, ".tar.bz2") + indexFileName = strings.TrimSuffix(indexFileName, ".gz") + indexFileName = strings.TrimSuffix(indexFileName, ".sig") + indexFileName = strings.TrimSuffix(indexFileName, ".json") + // and obtain package_index.json as result + coreIndexPath := indexpath.Join(indexFileName + ".json") if coreIndexPath.NotExist() { return true }