Skip to content

Commit bc3578d

Browse files
committed
Add writer as parameter to allow wrapping with encryption feature.
1 parent 9e1ca80 commit bc3578d

21 files changed

+94
-98
lines changed

openstack/src/main/java/ch/cyberduck/core/openstack/SwiftDirectoryFeature.java

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,24 +42,17 @@ public class SwiftDirectoryFeature implements Directory<StorageObject> {
4242
private final SwiftSession session;
4343
private final SwiftRegionService regionService;
4444

45-
private Write<StorageObject> writer;
46-
4745
public SwiftDirectoryFeature(final SwiftSession session) {
4846
this(session, new SwiftRegionService(session));
4947
}
5048

5149
public SwiftDirectoryFeature(final SwiftSession session, final SwiftRegionService regionService) {
52-
this(session, regionService, new SwiftWriteFeature(session, regionService));
53-
}
54-
55-
public SwiftDirectoryFeature(final SwiftSession session, final SwiftRegionService regionService, final Write<StorageObject> writer) {
5650
this.session = session;
5751
this.regionService = regionService;
58-
this.writer = writer;
5952
}
6053

6154
@Override
62-
public Path mkdir(final Path folder, final TransferStatus status) throws BackgroundException {
55+
public Path mkdir(final Write<StorageObject> writer, final Path folder, final TransferStatus status) throws BackgroundException {
6356
try {
6457
if(containerService.isContainer(folder)) {
6558
// Create container at top level
@@ -82,9 +75,4 @@ public Path mkdir(final Path folder, final TransferStatus status) throws Backgro
8275
}
8376
}
8477

85-
@Override
86-
public SwiftDirectoryFeature withWriter(final Write<StorageObject> writer) {
87-
this.writer = writer;
88-
return this;
89-
}
9078
}

openstack/src/main/java/ch/cyberduck/core/openstack/SwiftSession.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ public <T> T _getFeature(final Class<T> type) {
166166
return (T) new SwiftThresholdUploadService(this, regionService);
167167
}
168168
if(type == Directory.class) {
169-
return (T) new SwiftDirectoryFeature(this, regionService, new SwiftWriteFeature(this, regionService));
169+
return (T) new SwiftDirectoryFeature(this, regionService);
170170
}
171171
if(type == Delete.class) {
172172
return (T) new SwiftThresholdDeleteFeature(this, new SwiftSegmentService(this, regionService), regionService);

openstack/src/main/java/ch/cyberduck/core/openstack/SwiftTouchFeature.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
public class SwiftTouchFeature extends DefaultTouchFeature<StorageObject> {
3232

3333
public SwiftTouchFeature(final SwiftSession session, final SwiftRegionService regionService) {
34-
super(new SwiftWriteFeature(session, regionService));
34+
super(session);
3535
}
3636

3737
@Override

openstack/src/test/java/ch/cyberduck/core/cryptomator/CopyWorkerTest.java

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@
6262
import java.util.Collections;
6363
import java.util.EnumSet;
6464

65+
import ch.iterate.openstack.swift.model.StorageObject;
66+
6567
import static org.junit.Assert.*;
6668
import static org.junit.Assume.assumeTrue;
6769

@@ -105,10 +107,10 @@ public void testCopyToDifferentFolderCryptomator() throws Exception {
105107
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
106108
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
107109
session.withRegistry(registry);
108-
new CryptoTouchFeature<>(session, new DefaultTouchFeature<>(new SwiftWriteFeature(session, new SwiftRegionService(session))
109-
), new SwiftWriteFeature(session, new SwiftRegionService(session)), cryptomator).touch(source, new TransferStatus());
110+
new CryptoTouchFeature<>(session, new DefaultTouchFeature<StorageObject>(
111+
session), cryptomator).touch(new SwiftWriteFeature(session, new SwiftRegionService(session)), source, new TransferStatus());
110112
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(source));
111-
cryptomator.getFeature(session, Directory.class, new SwiftDirectoryFeature(session)).mkdir(targetFolder, new TransferStatus());
113+
cryptomator.getFeature(session, Directory.class, new SwiftDirectoryFeature(session)).mkdir(new SwiftWriteFeature(session, new SwiftRegionService(session)), targetFolder, new TransferStatus());
112114
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(targetFolder));
113115
final CopyWorker worker = new CopyWorker(Collections.singletonMap(source, target), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback());
114116
worker.run(session);
@@ -129,10 +131,10 @@ public void testCopyToDifferentFolderLongFilenameCryptomator() throws Exception
129131
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
130132
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
131133
session.withRegistry(registry);
132-
new CryptoTouchFeature<>(session, new DefaultTouchFeature<>(new SwiftWriteFeature(session, new SwiftRegionService(session))
133-
), new SwiftWriteFeature(session, new SwiftRegionService(session)), cryptomator).touch(source, new TransferStatus());
134+
new CryptoTouchFeature<>(session, new DefaultTouchFeature<StorageObject>(
135+
session), cryptomator).touch(new SwiftWriteFeature(session, new SwiftRegionService(session)), source, new TransferStatus());
134136
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(source));
135-
cryptomator.getFeature(session, Directory.class, new SwiftDirectoryFeature(session)).mkdir(targetFolder, new TransferStatus());
137+
cryptomator.getFeature(session, Directory.class, new SwiftDirectoryFeature(session)).mkdir(new SwiftWriteFeature(session, new SwiftRegionService(session)), targetFolder, new TransferStatus());
136138
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(targetFolder));
137139
final CopyWorker worker = new CopyWorker(Collections.singletonMap(source, target), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback());
138140
worker.run(session);
@@ -151,10 +153,10 @@ public void testCopyFolder() throws Exception {
151153
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
152154
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
153155
session.withRegistry(registry);
154-
cryptomator.getFeature(session, Directory.class, new SwiftDirectoryFeature(session)).mkdir(folder, new TransferStatus());
156+
cryptomator.getFeature(session, Directory.class, new SwiftDirectoryFeature(session)).mkdir(new SwiftWriteFeature(session, new SwiftRegionService(session)), folder, new TransferStatus());
155157
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(folder));
156-
new CryptoTouchFeature<>(session, new DefaultTouchFeature<>(new SwiftWriteFeature(session, new SwiftRegionService(session))
157-
), new SwiftWriteFeature(session, new SwiftRegionService(session)), cryptomator).touch(file, new TransferStatus());
158+
new CryptoTouchFeature<>(session, new DefaultTouchFeature<StorageObject>(
159+
session), cryptomator).touch(new SwiftWriteFeature(session, new SwiftRegionService(session)), file, new TransferStatus());
158160
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(file));
159161
// copy file
160162
final Path fileRenamed = new Path(folder, "f1", EnumSet.of(Path.Type.file));
@@ -187,7 +189,7 @@ public void testCopyFileIntoVault() throws Exception {
187189
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
188190
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
189191
session.withRegistry(registry);
190-
cryptomator.getFeature(session, Directory.class, new SwiftDirectoryFeature(session)).mkdir(encryptedFolder, new TransferStatus());
192+
cryptomator.getFeature(session, Directory.class, new SwiftDirectoryFeature(session)).mkdir(new SwiftWriteFeature(session, new SwiftRegionService(session)), encryptedFolder, new TransferStatus());
191193
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFolder));
192194
// copy file into vault
193195
final CopyWorker worker = new CopyWorker(Collections.singletonMap(cleartextFile, encryptedFile), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback());
@@ -207,8 +209,8 @@ public void testCopyDirectoryIntoVault() throws Exception {
207209
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
208210
final Path cleartextFolder = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
209211
final Path cleartextFile = new Path(cleartextFolder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
210-
new SwiftDirectoryFeature(session).mkdir(cleartextFolder, new TransferStatus());
211-
new SwiftTouchFeature(session, new SwiftRegionService(session)).touch(cleartextFile, new TransferStatus());
212+
new SwiftDirectoryFeature(session).mkdir(new SwiftWriteFeature(session, new SwiftRegionService(session)), cleartextFolder, new TransferStatus());
213+
new SwiftTouchFeature(session, new SwiftRegionService(session)).touch(new SwiftWriteFeature(session, new SwiftRegionService(session)), cleartextFile, new TransferStatus());
212214
assertTrue(new SwiftFindFeature(session).find(cleartextFolder));
213215
assertTrue(new SwiftFindFeature(session).find(cleartextFile));
214216
final CryptoVault cryptomator = new CryptoVault(vault);
@@ -233,17 +235,17 @@ public void testCopyFileOutsideVault() throws Exception {
233235
final Path home = new Path("test.cyberduck.ch", EnumSet.of(Path.Type.volume, Path.Type.directory));
234236
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
235237
final Path clearFolder = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
236-
new SwiftDirectoryFeature(session).mkdir(clearFolder, new TransferStatus());
238+
new SwiftDirectoryFeature(session).mkdir(new SwiftWriteFeature(session, new SwiftRegionService(session)), clearFolder, new TransferStatus());
237239
final Path encryptedFolder = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
238240
final Path encryptedFile = new Path(encryptedFolder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
239241
final CryptoVault cryptomator = new CryptoVault(vault);
240242
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
241243
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
242244
session.withRegistry(registry);
243-
cryptomator.getFeature(session, Directory.class, new SwiftDirectoryFeature(session)).mkdir(encryptedFolder, new TransferStatus());
245+
cryptomator.getFeature(session, Directory.class, new SwiftDirectoryFeature(session)).mkdir(new SwiftWriteFeature(session, new SwiftRegionService(session)), encryptedFolder, new TransferStatus());
244246
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFolder));
245-
new CryptoTouchFeature<>(session, new DefaultTouchFeature<>(new SwiftWriteFeature(session, new SwiftRegionService(session))
246-
), new SwiftWriteFeature(session, new SwiftRegionService(session)), cryptomator).touch(encryptedFile, new TransferStatus());
247+
new CryptoTouchFeature<>(session, new DefaultTouchFeature<StorageObject>(
248+
session), cryptomator).touch(new SwiftWriteFeature(session, new SwiftRegionService(session)), encryptedFile, new TransferStatus());
247249
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFile));
248250
// move file outside vault
249251
final Path cleartextFile = new Path(clearFolder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
@@ -265,10 +267,10 @@ public void testCopyDirectoryOutsideVault() throws Exception {
265267
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
266268
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
267269
session.withRegistry(registry);
268-
cryptomator.getFeature(session, Directory.class, new SwiftDirectoryFeature(session)).mkdir(encryptedFolder, new TransferStatus());
270+
cryptomator.getFeature(session, Directory.class, new SwiftDirectoryFeature(session)).mkdir(new SwiftWriteFeature(session, new SwiftRegionService(session)), encryptedFolder, new TransferStatus());
269271
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFolder));
270-
new CryptoTouchFeature<>(session, new DefaultTouchFeature<>(new SwiftWriteFeature(session, new SwiftRegionService(session))
271-
), new SwiftWriteFeature(session, new SwiftRegionService(session)), cryptomator).touch(encryptedFile, new TransferStatus());
272+
new CryptoTouchFeature<>(session, new DefaultTouchFeature<StorageObject>(
273+
session), cryptomator).touch(new SwiftWriteFeature(session, new SwiftRegionService(session)), encryptedFile, new TransferStatus());
272274
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFile));
273275
// copy directory outside vault
274276
final Path cleartextFolder = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));

openstack/src/test/java/ch/cyberduck/core/cryptomator/SwiftDirectoryFeatureTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import ch.cyberduck.core.openstack.AbstractSwiftTest;
2626
import ch.cyberduck.core.openstack.SwiftDeleteFeature;
2727
import ch.cyberduck.core.openstack.SwiftDirectoryFeature;
28+
import ch.cyberduck.core.openstack.SwiftRegionService;
29+
import ch.cyberduck.core.openstack.SwiftWriteFeature;
2830
import ch.cyberduck.core.shared.DefaultFindFeature;
2931
import ch.cyberduck.core.transfer.TransferStatus;
3032
import ch.cyberduck.core.vault.DefaultVaultRegistry;
@@ -54,7 +56,7 @@ public void testMakeDirectoryEncrypted() throws Exception {
5456
final CryptoVault cryptomator = new CryptoVault(vault);
5557
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
5658
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
57-
cryptomator.getFeature(session, Directory.class, new SwiftDirectoryFeature(session)).mkdir(test, new TransferStatus());
59+
cryptomator.getFeature(session, Directory.class, new SwiftDirectoryFeature(session)).mkdir(new SwiftWriteFeature(session, new SwiftRegionService(session)), test, new TransferStatus());
5860
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(test));
5961
cryptomator.getFeature(session, Delete.class, new SwiftDeleteFeature(session)).delete(Arrays.asList(test, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
6062
}
@@ -68,7 +70,7 @@ public void testMakeDirectoryLongFilenameEncrypted() throws Exception {
6870
final CryptoVault cryptomator = new CryptoVault(vault);
6971
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
7072
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
71-
cryptomator.getFeature(session, Directory.class, new SwiftDirectoryFeature(session)).mkdir(test, new TransferStatus());
73+
cryptomator.getFeature(session, Directory.class, new SwiftDirectoryFeature(session)).mkdir(new SwiftWriteFeature(session, new SwiftRegionService(session)), test, new TransferStatus());
7274
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(test));
7375
cryptomator.getFeature(session, Delete.class, new SwiftDeleteFeature(session)).delete(Arrays.asList(test, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
7476
}

openstack/src/test/java/ch/cyberduck/core/cryptomator/SwiftLargeObjectUploadFeatureTest.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import ch.cyberduck.core.cryptomator.features.CryptoListService;
2828
import ch.cyberduck.core.cryptomator.features.CryptoReadFeature;
2929
import ch.cyberduck.core.cryptomator.features.CryptoUploadFeature;
30+
import ch.cyberduck.core.cryptomator.features.CryptoWriteFeature;
3031
import ch.cyberduck.core.features.Delete;
3132
import ch.cyberduck.core.features.Find;
3233
import ch.cyberduck.core.io.BandwidthThrottle;
@@ -58,6 +59,8 @@
5859
import java.util.EnumSet;
5960
import java.util.UUID;
6061

62+
import ch.iterate.openstack.swift.model.StorageObject;
63+
6164
import static org.junit.Assert.*;
6265

6366
@Category(IntegrationTest.class)
@@ -75,7 +78,7 @@ public void testLargeObjectUpload() throws Exception {
7578
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
7679
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
7780
final SwiftRegionService regionService = new SwiftRegionService(session);
78-
final CryptoUploadFeature m = new CryptoUploadFeature<>(session,
81+
final CryptoUploadFeature<StorageObject> service = new CryptoUploadFeature<>(session,
7982
new SwiftLargeObjectUploadFeature(session, regionService, 5242880L, 5), cryptomator);
8083
final Local local = new Local(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString());
8184
final int length = 5242885;
@@ -86,7 +89,7 @@ public void testLargeObjectUpload() throws Exception {
8689
writeStatus.setHeader(cryptomator.getFileHeaderCryptor().encryptHeader(header));
8790
writeStatus.setLength(content.length);
8891
final BytecountStreamListener count = new BytecountStreamListener();
89-
m.upload(new SwiftWriteFeature(session, regionService), test, local, new BandwidthThrottle(BandwidthThrottle.UNLIMITED), new DisabledProgressListener(), count, writeStatus, null);
92+
service.upload(new CryptoWriteFeature<>(session, new SwiftWriteFeature(session, new SwiftRegionService(session)), cryptomator), test, local, new BandwidthThrottle(BandwidthThrottle.UNLIMITED), new DisabledProgressListener(), count, writeStatus, null);
9093
assertEquals(content.length, count.getSent());
9194
assertTrue(writeStatus.isComplete());
9295
assertEquals(content.length, writeStatus.getResponse().getSize());

openstack/src/test/java/ch/cyberduck/core/cryptomator/SwiftListServiceTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ public void testListCryptomator() throws Exception {
6262
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
6363
assertTrue(new CryptoListService(session, new SwiftObjectListService(session), cryptomator).list(vault, new DisabledListProgressListener()).isEmpty());
6464
final SwiftRegionService regionService = new SwiftRegionService(session);
65-
new CryptoTouchFeature<>(session, new DefaultTouchFeature<StorageObject>(new SwiftWriteFeature(session, regionService)
66-
), new SwiftWriteFeature(session, regionService), cryptomator).touch(test, new TransferStatus());
65+
new CryptoTouchFeature<>(session, new DefaultTouchFeature<StorageObject>(
66+
session), cryptomator).touch(new SwiftWriteFeature(session, regionService), test, new TransferStatus());
6767
assertEquals(test, new CryptoListService(session, new SwiftObjectListService(session), cryptomator).list(vault, new DisabledListProgressListener()).get(0));
6868
cryptomator.getFeature(session, Delete.class, new SwiftDeleteFeature(session)).delete(Arrays.asList(test, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
6969
}

0 commit comments

Comments
 (0)