Decrypt import only if password is given

This commit is contained in:
René Pfeuffer
2021-02-25 16:26:49 +01:00
parent 1ffeeb035d
commit ff4d9224f9
3 changed files with 24 additions and 4 deletions

View File

@@ -328,7 +328,9 @@ public class RepositoryImportResource {
Map<String, List<InputPart>> formParts = input.getFormDataMap();
InputStream inputStream = extractInputStream(formParts);
RepositoryImportFromFileDto repositoryDto = extractRepositoryDto(formParts);
inputStream = decryptInputStream(inputStream, repositoryDto.getPassword());
if (!Strings.isNullOrEmpty(repositoryDto.getPassword())) {
inputStream = decryptInputStream(inputStream, repositoryDto.getPassword());
}
Type t = type(manager, type);
checkSupport(t, Command.UNBUNDLE);

View File

@@ -24,6 +24,7 @@
package sonia.scm.importexport;
import com.google.common.base.Strings;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
@@ -68,7 +69,7 @@ public class FullScmRepositoryImporter {
if (inputStream.available() > 0) {
try (
BufferedInputStream bif = new BufferedInputStream(inputStream);
InputStream cif = repositoryImportExportEncryption.decrypt(bif, password);
InputStream cif = decryptIfPasswordSet(bif, password);
GzipCompressorInputStream gcis = new GzipCompressorInputStream(cif);
TarArchiveInputStream tais = createTarInputStream(gcis)
) {
@@ -89,6 +90,14 @@ public class FullScmRepositoryImporter {
}
}
private InputStream decryptIfPasswordSet(InputStream potentiallyEncryptedStream, String password) throws IOException {
if (Strings.isNullOrEmpty(password)) {
return potentiallyEncryptedStream;
} else {
return repositoryImportExportEncryption.decrypt(potentiallyEncryptedStream, password);
}
}
private Repository run(Repository repository, TarArchiveInputStream tais) throws IOException {
ImportState state = new ImportState(repositoryManager.create(repository));
try {