Skip to content

Commit fa77c15

Browse files
author
Mattia Bertorello
committed
Not delete the file if the signature fail
1 parent 183e1c9 commit fa77c15

File tree

4 files changed

+31
-33
lines changed

4 files changed

+31
-33
lines changed

arduino-core/src/cc/arduino/contributions/DownloadableContributionsDownloader.java

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@
4141
import java.io.File;
4242
import java.net.URL;
4343
import java.nio.file.*;
44-
import java.util.List;
45-
import java.util.stream.Collectors;
44+
import java.util.Collection;
4645

4746
import static processing.app.I18n.format;
4847
import static processing.app.I18n.tr;
@@ -145,15 +144,13 @@ public void download(URL url, File tmpFile, Progress progress, String statusText
145144
}
146145
}
147146

148-
public void downloadIndexAndSignature(MultiStepProgress progress, List<String> downloadedFilesAccumulator, String packageIndexUrlString, ProgressListener progressListener, SignatureVerifier signatureVerifier) throws Exception {
147+
public void downloadIndexAndSignature(MultiStepProgress progress, URL packageIndexUrl, ProgressListener progressListener, SignatureVerifier signatureVerifier) throws Exception {
149148

150149
// Extract the file name from the url
151-
URL packageIndexUrl = new URL(packageIndexUrlString);
152150
String[] urlPathParts = packageIndexUrl.getFile().split("/");
153151
File packageIndex = BaseNoGui.indexer.getIndexFile(urlPathParts[urlPathParts.length - 1]);
154152

155153
final String statusText = tr("Downloading platforms index...");
156-
downloadedFilesAccumulator.add(packageIndex.getName());
157154

158155
// Create temp files
159156
File packageIndexTemp = File.createTempFile(packageIndexUrl.getPath(), ".tmp");
@@ -164,18 +161,15 @@ public void downloadIndexAndSignature(MultiStepProgress progress, List<String> d
164161
if (verifyDomain(packageIndexUrl)) {
165162
URL signatureUrl = new URL(packageIndexUrl.toString() + ".sig");
166163

167-
if (checkSignature(progress, downloadedFilesAccumulator, signatureUrl, progressListener, signatureVerifier, statusText, packageIndexTemp)) {
164+
if (checkSignature(progress, signatureUrl, progressListener, signatureVerifier, statusText, packageIndexTemp)) {
168165
Files.move(packageIndexTemp.toPath(), packageIndex.toPath(), StandardCopyOption.REPLACE_EXISTING);
169-
} else {
170-
downloadedFilesAccumulator.remove(packageIndex.getName());
171166
}
172167
} else {
173168
// Move the package index to the destination when the signature is not necessary
174169
Files.move(packageIndexTemp.toPath(), packageIndex.toPath(), StandardCopyOption.REPLACE_EXISTING);
175-
log.info("The domain is not selected to verify the signature. packageIndex: {}", packageIndexUrl);
170+
log.info("The domain is not selected to verify the signature. will be copied into this path {}, packageIndex url: {}", packageIndex, packageIndexUrl);
176171
}
177172
} catch (Exception e) {
178-
downloadedFilesAccumulator.remove(packageIndex.getName());
179173
throw e;
180174
} finally {
181175
// Delete useless temp file
@@ -184,12 +178,8 @@ public void downloadIndexAndSignature(MultiStepProgress progress, List<String> d
184178
}
185179

186180
public boolean verifyDomain(URL url) {
187-
final List<String> domain = PreferencesData.
188-
getCollection("http.signature_verify_domains")
189-
.stream()
190-
// Remove empty strings from the collection
191-
.filter((v) -> !v.trim().isEmpty())
192-
.collect(Collectors.toList());
181+
final Collection<String> domain = PreferencesData.
182+
getCollection("http.signature_verify_domains");
193183
if (domain.size() == 0) {
194184
// Default domain
195185
domain.add("downloads.arduino.cc");
@@ -202,7 +192,7 @@ public boolean verifyDomain(URL url) {
202192
}
203193
}
204194

205-
public boolean checkSignature(MultiStepProgress progress, List<String> downloadedFilesAccumulator, URL signatureUrl, ProgressListener progressListener, SignatureVerifier signatureVerifier, String statusText, File fileToVerify) throws Exception {
195+
public boolean checkSignature(MultiStepProgress progress, URL signatureUrl, ProgressListener progressListener, SignatureVerifier signatureVerifier, String statusText, File fileToVerify) throws Exception {
206196

207197
File packageIndexSignatureTemp = File.createTempFile(signatureUrl.getPath(), ".tmp");
208198
// Signature file name
@@ -219,7 +209,6 @@ public boolean checkSignature(MultiStepProgress progress, List<String> downloade
219209
log.info("Signature verified. url={}, signature url={}, file to verify={}, signature file={}", signatureUrl, signatureUrl, fileToVerify, packageIndexSignatureTemp);
220210
// Move if the signature is ok
221211
Files.move(packageIndexSignatureTemp.toPath(), packageIndexSignature.toPath(), StandardCopyOption.REPLACE_EXISTING);
222-
downloadedFilesAccumulator.add(packageIndexSignature.getName());
223212
} else {
224213
log.error("{} file signature verification failed. File ignored.", signatureUrl);
225214
System.err.println(format(tr("{0} file signature verification failed. File ignored."), signatureUrl.toString()));

arduino-core/src/cc/arduino/contributions/libraries/LibraryInstaller.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,6 @@ public LibraryInstaller(Platform platform, GPGDetachedSignatureVerifier signatur
6868
public synchronized void updateIndex(ProgressListener progressListener) throws Exception {
6969
final MultiStepProgress progress = new MultiStepProgress(3);
7070

71-
List<String> downloadedFilesAccumulator = new LinkedList<>();
72-
7371
DownloadableContributionsDownloader downloader = new DownloadableContributionsDownloader(BaseNoGui.librariesIndexer.getStagingFolder());
7472
// Step 1: Download index
7573
File outputFile = BaseNoGui.librariesIndexer.getIndexFile();
@@ -88,7 +86,7 @@ public synchronized void updateIndex(ProgressListener progressListener) throws E
8886

8987
URL signatureUrl = new URL(libraryURL.toString() + ".sig");
9088
if (downloader.verifyDomain(signatureUrl)) {
91-
if (downloader.checkSignature(progress, downloadedFilesAccumulator, signatureUrl, progressListener, signatureVerifier, statusText, libraryIndexTemp)) {
89+
if (downloader.checkSignature(progress, signatureUrl, progressListener, signatureVerifier, statusText, libraryIndexTemp)) {
9290
// Replace old index with the updated one
9391
if (libraryIndexTemp.length() > 0) {
9492
Files.move(libraryIndexTemp.toPath(), outputFile.toPath(), StandardCopyOption.REPLACE_EXISTING);

arduino-core/src/cc/arduino/contributions/packages/ContributionInstaller.java

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import java.io.ByteArrayOutputStream;
5454
import java.io.File;
5555
import java.io.IOException;
56+
import java.net.URL;
5657
import java.nio.file.Files;
5758
import java.nio.file.Path;
5859
import java.nio.file.Paths;
@@ -282,30 +283,34 @@ public synchronized List<String> remove(ContributedPlatform contributedPlatform)
282283
return errors;
283284
}
284285

285-
public synchronized List<String> updateIndex(ProgressListener progressListener) throws Exception {
286+
public synchronized List<String> updateIndex(ProgressListener progressListener) {
286287
MultiStepProgress progress = new MultiStepProgress(1);
287288

288-
List<String> downloadedPackageIndexFilesAccumulator = new LinkedList<>();
289289
final DownloadableContributionsDownloader downloader = new DownloadableContributionsDownloader(BaseNoGui.indexer.getStagingFolder());
290-
downloader.downloadIndexAndSignature(progress, downloadedPackageIndexFilesAccumulator, Constants.PACKAGE_INDEX_URL, progressListener, signatureVerifier);
291290

292-
Set<String> packageIndexURLs = new HashSet<>();
293-
String additionalURLs = PreferencesData.get(Constants.PREF_BOARDS_MANAGER_ADDITIONAL_URLS, "");
294-
if (!"".equals(additionalURLs)) {
295-
packageIndexURLs.addAll(Arrays.asList(additionalURLs.split(",")));
296-
}
291+
final Set<String> packageIndexURLs = new HashSet<>(
292+
PreferencesData.getCollection(Constants.PREF_BOARDS_MANAGER_ADDITIONAL_URLS)
293+
);
294+
packageIndexURLs.add(Constants.PACKAGE_INDEX_URL);
295+
List<String> downloadedPackageIndexFilesAccumulator = new LinkedList<>();
297296

298-
for (String packageIndexURL : packageIndexURLs) {
297+
for (String packageIndexURLString : packageIndexURLs) {
299298
try {
300-
downloader.downloadIndexAndSignature(progress, downloadedPackageIndexFilesAccumulator, packageIndexURL, progressListener, signatureVerifier);
299+
// Extract the file name from the URL
300+
final URL packageIndexURL = new URL(packageIndexURLString);
301+
String[] urlPathParts = packageIndexURL.getPath().split("/");
302+
downloadedPackageIndexFilesAccumulator.add(BaseNoGui.indexer.getIndexFile(urlPathParts[urlPathParts.length - 1]).getName());
303+
304+
log.info("Start download and signature check of={}", packageIndexURLs);
305+
downloader.downloadIndexAndSignature(progress, packageIndexURL, progressListener, signatureVerifier);
301306
} catch (Exception e) {
302307
log.error(e.getMessage(), e);
303308
System.err.println(e.getMessage());
304309
}
305310
}
306311

307312
progress.stepDone();
308-
313+
log.info("Downloaded package index URL={}", packageIndexURLs);
309314
return downloadedPackageIndexFilesAccumulator;
310315
}
311316

@@ -315,8 +320,11 @@ public synchronized void deleteUnknownFiles(List<String> downloadedPackageIndexF
315320
if (additionalPackageIndexFiles == null) {
316321
return;
317322
}
323+
log.info("Check unknown files. Additional package index folder files={}, Additional package index url downloaded={}", downloadedPackageIndexFiles, additionalPackageIndexFiles);
324+
318325
for (File additionalPackageIndexFile : additionalPackageIndexFiles) {
319326
if (!downloadedPackageIndexFiles.contains(additionalPackageIndexFile.getName())) {
327+
log.info("Delete this unknown file={} because not included in this list={}", additionalPackageIndexFile, additionalPackageIndexFiles);
320328
Files.delete(additionalPackageIndexFile.toPath());
321329
}
322330
}

arduino-core/src/processing/app/PreferencesData.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,10 @@ static public Font getFont(String attr) {
265265
}
266266

267267
public static Collection<String> getCollection(String key) {
268-
return Arrays.asList(get(key, "").split(","));
268+
return Arrays.stream(get(key, "").split(","))
269+
// Remove empty strings from the collection
270+
.filter((v) -> !v.trim().isEmpty())
271+
.collect(Collectors.toList());
269272
}
270273

271274
public static void setCollection(String key, Collection<String> values) {

0 commit comments

Comments
 (0)