Skip to content

Commit

Permalink
#79 Add encryption and compression settings for all entries
Browse files Browse the repository at this point in the history
  • Loading branch information
oleg-cherednik committed Oct 20, 2024
1 parent 41922e6 commit 0a5ff63
Show file tree
Hide file tree
Showing 22 changed files with 235 additions and 175 deletions.
6 changes: 4 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,9 @@ dependencies {
testImplementation 'net.sf.sevenzipjbinding:sevenzipjbinding-all-platforms:16.02-2.01'
testImplementation 'net.lingala.zip4j:zip4j:2.11.5'
//noinspection VulnerableLibrariesLocal
testImplementation 'de.idyl:winzipaes:1.0.1'
testImplementation('de.idyl:winzipaes:1.0.1') {
exclude group: 'org.bouncycastle', module: 'bcprov-jdk16'
}
testImplementation 'org.tukaani:xz:1.10'
}

Expand All @@ -81,7 +83,7 @@ javadoc {
options.addBooleanOption('Xdoclint:-missing', true)
}

check.finalizedBy(checkLicense)
//check.finalizedBy(checkLicense)
check.finalizedBy(generateLicenseReport)
check.finalizedBy(jacocoTestReport)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

import ru.olegcherednik.zip4jvm.model.ZipModel;
import ru.olegcherednik.zip4jvm.model.ZipSymlink;
import ru.olegcherednik.zip4jvm.utils.ValidationUtils;

import lombok.AccessLevel;
import lombok.Getter;
Expand Down Expand Up @@ -59,8 +60,11 @@ private ZipSettings(Builder builder) {
}

public Builder toBuilder() {
return builder().splitSize(splitSize).comment(comment).zip64(zip64)
.entrySettingsProvider(entrySettingsProvider);
return builder()
.splitSize(splitSize)
.comment(comment)
.zip64(zip64)
.entrySettingsProvider(entrySettingsProvider);
}

@NoArgsConstructor(access = AccessLevel.PRIVATE)
Expand Down Expand Up @@ -101,9 +105,21 @@ public Builder zip64(boolean zip64) {
return this;
}

/**
* Apply given {@code zipEntrySettings} to all entries.
*
* @param zipEntrySettings not {@literal null} zip entry settings
* @return this builder
*/
public Builder entrySettings(ZipEntrySettings zipEntrySettings) {
ValidationUtils.requireNotNull(zipEntrySettings, "ZipSettings.entrySettings");
entrySettingsProvider = entryName -> zipEntrySettings;
return this;
}

public Builder entrySettingsProvider(Function<String, ZipEntrySettings> entrySettingsProvider) {
this.entrySettingsProvider = Optional.ofNullable(entrySettingsProvider)
.orElse(ZipEntrySettings.DEFAULT_PROVIDER);
ValidationUtils.requireNotNull(entrySettingsProvider, "ZipSettings.entrySettingsProvider");
this.entrySettingsProvider = entrySettingsProvider;
return this;
}

Expand Down
15 changes: 7 additions & 8 deletions src/test/java/ru/olegcherednik/zip4jvm/ModifyCommentTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,14 +60,13 @@ public static void removeDir() throws IOException {
}

public void shouldCreateNewZipWithComment() throws IOException {
ZipSettings settings = ZipSettings
.builder()
.entrySettingsProvider(fileName ->
ZipEntrySettings.builder()
.compression(Compression.DEFLATE,
CompressionLevel.NORMAL)
.build())
.comment("Oleg Cherednik - Олег Чередник").build();
ZipEntrySettings entrySettings = ZipEntrySettings.builder()
.compression(Compression.DEFLATE, CompressionLevel.NORMAL)
.build();

ZipSettings settings = ZipSettings.builder()
.entrySettings(entrySettings)
.comment("Oleg Cherednik - Олег Чередник").build();
ZipIt.zip(zip).settings(settings).add(fileOlegCherednik);
assertThatZipFile(zip).exists().hasComment("Oleg Cherednik - Олег Чередник");
}
Expand Down
7 changes: 4 additions & 3 deletions src/test/java/ru/olegcherednik/zip4jvm/UnzipItSplitTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,11 @@ public void shouldUnzipRequiredFilesWhenSplit() throws IOException {
}

public void shouldThrowFileNotFoundExceptionAndNotExtractPartialFilesWhenZipPartMissing() throws IOException {
ZipEntrySettings entrySettings = ZipEntrySettings.builder().compression(Compression.STORE,
CompressionLevel.NORMAL).build();
ZipEntrySettings entrySettings = ZipEntrySettings.builder()
.compression(Compression.STORE, CompressionLevel.NORMAL)
.build();
ZipSettings settings = ZipSettings.builder()
.entrySettingsProvider(fileName -> entrySettings)
.entrySettings(entrySettings)
.splitSize(SIZE_1MB)
.build();

Expand Down
2 changes: 1 addition & 1 deletion src/test/java/ru/olegcherednik/zip4jvm/ZipFileTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ public void shouldCreateZipFileWithContentWhenUseZipFile() throws IOException {

public void shouldCreateZipFileWithEmptyDirectoryWhenAddEmptyDirectory() throws IOException {
ZipSettings settings = ZipSettings.builder()
.entrySettingsProvider(fileName -> ZipEntrySettings.builder().build())
.entrySettings(ZipEntrySettings.builder().build())
.build();

Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve(fileNameZipSrc);
Expand Down
12 changes: 4 additions & 8 deletions src/test/java/ru/olegcherednik/zip4jvm/ZipFilesNoSplitTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,14 +60,10 @@ public static void removeDir() throws IOException {
}

public void shouldCreateNewZipWithFiles() throws IOException {
ZipSettings settings = ZipSettings
.builder()
.entrySettingsProvider(fileName ->
ZipEntrySettings.builder()
.compression(Compression.DEFLATE,
CompressionLevel.NORMAL)
.build())
.build();
ZipEntrySettings entrySettings = ZipEntrySettings.builder()
.compression(Compression.DEFLATE, CompressionLevel.NORMAL)
.build();
ZipSettings settings = ZipSettings.builder().entrySettings(entrySettings).build();

List<Path> files = Arrays.asList(fileBentley, fileFerrari, fileWiesmann);
ZipIt.zip(zip).settings(settings).add(files);
Expand Down
43 changes: 19 additions & 24 deletions src/test/java/ru/olegcherednik/zip4jvm/ZipFilesSplitTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,12 @@ public static void removeDir() throws IOException {

public void shouldCreateNewSplitZipWithFiles() throws IOException {
Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve("src.zip");
ZipSettings settings = ZipSettings
.builder()
.entrySettingsProvider(fileName ->
ZipEntrySettings.builder()
.compression(Compression.DEFLATE,
CompressionLevel.NORMAL).build())
.splitSize(SIZE_1MB).build();
ZipEntrySettings entrySettings = ZipEntrySettings.builder()
.compression(Compression.DEFLATE, CompressionLevel.NORMAL)
.build();
ZipSettings settings = ZipSettings.builder()
.entrySettings(entrySettings)
.splitSize(SIZE_1MB).build();
List<Path> files = Arrays.asList(fileBentley, fileFerrari, fileWiesmann);
ZipIt.zip(zip).settings(settings).add(files);
// TODO commented tests
Expand All @@ -84,15 +83,13 @@ public void shouldCreateNewSplitZipWithFiles() throws IOException {
@SuppressWarnings("LocalVariableNamingConvention")
public void shouldSetTotalDiskWhenSplitZip64() throws IOException {
Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve("src.zip");
ZipSettings settings = ZipSettings
.builder()
.zip64(true)
.entrySettingsProvider(fileName ->
ZipEntrySettings.builder()
.compression(Compression.DEFLATE,
CompressionLevel.NORMAL)
.build())
.splitSize(SIZE_1MB).build();
ZipEntrySettings entrySettings = ZipEntrySettings.builder()
.compression(Compression.DEFLATE, CompressionLevel.NORMAL)
.build();
ZipSettings settings = ZipSettings.builder()
.zip64(true)
.entrySettings(entrySettings)
.splitSize(SIZE_1MB).build();
List<Path> files = Arrays.asList(fileBentley, fileFerrari, fileWiesmann);
ZipIt.zip(zip).settings(settings).add(files);

Expand All @@ -114,14 +111,12 @@ public void shouldSetTotalDiskWhenSplitZip64() throws IOException {

public void shouldSetTotalDiskWhenSplit() throws IOException {
Path zip = Zip4jvmSuite.subDirNameAsMethodName(rootDir).resolve("src.zip");
ZipSettings settings = ZipSettings
.builder()
.entrySettingsProvider(fileName ->
ZipEntrySettings.builder()
.compression(Compression.DEFLATE,
CompressionLevel.NORMAL)
.build())
.splitSize(SIZE_1MB).build();
ZipEntrySettings entrySettings = ZipEntrySettings.builder()
.compression(Compression.DEFLATE, CompressionLevel.NORMAL)
.build();
ZipSettings settings = ZipSettings.builder()
.entrySettings(entrySettings)
.splitSize(SIZE_1MB).build();
List<Path> files = Arrays.asList(fileBentley, fileFerrari, fileWiesmann);
ZipIt.zip(zip).settings(settings).add(files);

Expand Down
26 changes: 11 additions & 15 deletions src/test/java/ru/olegcherednik/zip4jvm/ZipFolderNoSplitTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,10 @@ public static void removeDir() throws IOException {

@Test
public void shouldCreateNewZipWithFolder() throws IOException {
ZipSettings settings = ZipSettings
.builder().entrySettingsProvider(fileName ->
ZipEntrySettings.builder()
.compression(Compression.DEFLATE,
CompressionLevel.NORMAL)
.build())
.build();
ZipEntrySettings entrySettings = ZipEntrySettings.builder()
.compression(Compression.DEFLATE, CompressionLevel.NORMAL)
.build();
ZipSettings settings = ZipSettings.builder().entrySettings(entrySettings).build();
ZipIt.zip(zip).settings(settings).add(dirCars);

Zip4jvmAssertions.assertThatDirectory(zip.getParent()).exists().hasOnlyRegularFiles(1);
Expand Down Expand Up @@ -105,14 +102,13 @@ public void shouldAddEmptyDirectoryToExistedZip() throws IOException {
Assertions.assertThat(Files.exists(zip)).isTrue();
Assertions.assertThat(Files.isRegularFile(zip)).isTrue();

ZipSettings settings = ZipSettings
.builder()
.entrySettingsProvider(fileName ->
ZipEntrySettings.builder()
.compression(Compression.DEFLATE,
CompressionLevel.NORMAL)
.build())
.build();
ZipEntrySettings entrySettings = ZipEntrySettings.builder()
.compression(Compression.DEFLATE, CompressionLevel.NORMAL)
.build();

ZipSettings settings = ZipSettings.builder()
.entrySettings(entrySettings)
.build();
ZipIt.zip(zip).settings(settings).add(dirEmpty);

Zip4jvmAssertions.assertThatDirectory(zip.getParent()).exists().hasOnlyRegularFiles(1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public void shouldCreateNewZipWithFolder() throws IOException {
.compression(Compression.DEFLATE, CompressionLevel.NORMAL)
.build();
ZipSettings settings = ZipSettings.builder()
.entrySettingsProvider(fileName -> entrySettings)
.entrySettings(entrySettings)
.splitSize(SIZE_1MB)
.build();

Expand Down
2 changes: 1 addition & 1 deletion src/test/java/ru/olegcherednik/zip4jvm/ZipIt64Test.java
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ public void shouldUnzipWhenZip64() throws IOException {
public void shouldZipWhenZip64AndAesEncryption() throws IOException {
ZipEntrySettings entrySettings = ZipEntrySettings.builder().encryption(Encryption.AES_256, password).build();
ZipSettings settings = ZipSettings.builder()
.entrySettingsProvider(fileName -> entrySettings)
.entrySettings(entrySettings)
.comment("password: " + passwordStr)
.zip64(true).build();

Expand Down
Loading

0 comments on commit 0a5ff63

Please sign in to comment.