From 55f24f5d3d93a0b72c65b4550a8794a5f74a2da5 Mon Sep 17 00:00:00 2001 From: David Kocher Date: Thu, 5 Oct 2023 11:47:48 +0200 Subject: [PATCH 001/230] Fix #15174. --- box/src/main/java/ch/cyberduck/core/box/BoxProtocol.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/box/src/main/java/ch/cyberduck/core/box/BoxProtocol.java b/box/src/main/java/ch/cyberduck/core/box/BoxProtocol.java index 21243e8fbf9..3434bd8c55c 100644 --- a/box/src/main/java/ch/cyberduck/core/box/BoxProtocol.java +++ b/box/src/main/java/ch/cyberduck/core/box/BoxProtocol.java @@ -63,6 +63,11 @@ public DirectoryTimestamp getDirectoryTimestamp() { return DirectoryTimestamp.explicit; } + @Override + public Case getCaseSensitivity() { + return Case.insensitive; + } + @Override public VersioningMode getVersioningMode() { return VersioningMode.storage; From ea8f74055ba03959a1a94ada9f1a5a74eb469b1e Mon Sep 17 00:00:00 2001 From: David Kocher Date: Thu, 5 Oct 2023 17:46:28 +0200 Subject: [PATCH 002/230] Fix implementation to work with bucket name in hostname. --- .../main/java/ch/cyberduck/core/s3/S3VersioningFeature.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/s3/src/main/java/ch/cyberduck/core/s3/S3VersioningFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3VersioningFeature.java index e5fc35e95d1..ea99e11f075 100644 --- a/s3/src/main/java/ch/cyberduck/core/s3/S3VersioningFeature.java +++ b/s3/src/main/java/ch/cyberduck/core/s3/S3VersioningFeature.java @@ -182,13 +182,15 @@ public void revert(final Path file) throws BackgroundException { catch(AccessDeniedException | InteroperabilityException e) { log.warn(String.format("Ignore failure %s", e)); } + final Path bucket = containerService.getContainer(file); + final String bucketname = bucket.isRoot() ? RequestEntityRestStorageService.findBucketInHostname(session.getHost()) : bucket.getName(); session.getClient().copyVersionedObject(file.attributes().getVersionId(), - containerService.getContainer(file).getName(), containerService.getKey(file), containerService.getContainer(file).getName(), destination, false); + bucketname, containerService.getKey(file), bucketname, destination, false); if(file.getParent().attributes().getCustom().containsKey(S3VersionedObjectListService.KEY_DELETE_MARKER)) { // revert placeholder session.getClient().deleteVersionedObject( file.getParent().attributes().getVersionId(), - containerService.getContainer(file).getName(), containerService.getKey(file.getParent())); + bucketname, containerService.getKey(file.getParent())); } } catch(ServiceException e) { From 9ac9187122a6285bc76f5dd1e898b98e8f07c2ec Mon Sep 17 00:00:00 2001 From: David Kocher Date: Thu, 5 Oct 2023 17:53:43 +0200 Subject: [PATCH 003/230] Fix implementation to work with bucket name in hostname as in 7600ac32. --- .../core/s3/S3MultipartCopyFeature.java | 2 +- .../core/s3/S3MultipartCopyFeatureTest.java | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/s3/src/main/java/ch/cyberduck/core/s3/S3MultipartCopyFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3MultipartCopyFeature.java index 574f820f892..aaf0658b0cf 100644 --- a/s3/src/main/java/ch/cyberduck/core/s3/S3MultipartCopyFeature.java +++ b/s3/src/main/java/ch/cyberduck/core/s3/S3MultipartCopyFeature.java @@ -124,7 +124,7 @@ public MultipartPart call() throws BackgroundException { final HttpRange range = HttpRange.byLength(offset, length); final Path bucket = containerService.getContainer(source); final MultipartPart part = session.getClient().multipartUploadPartCopy(multipart, partNumber, - bucket.isRoot() ? StringUtils.EMPTY : bucket.getName(), containerService.getKey(source), + bucket.isRoot() ? RequestEntityRestStorageService.findBucketInHostname(session.getHost()) : bucket.getName(), containerService.getKey(source), null, null, null, null, range.getStart(), range.getEnd(), source.attributes().getVersionId()); if(log.isInfoEnabled()) { log.info(String.format("Received response %s for part number %d", part, partNumber)); diff --git a/s3/src/test/java/ch/cyberduck/core/s3/S3MultipartCopyFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3MultipartCopyFeatureTest.java index 70db9217fe1..0cbf8a9be9a 100644 --- a/s3/src/test/java/ch/cyberduck/core/s3/S3MultipartCopyFeatureTest.java +++ b/s3/src/test/java/ch/cyberduck/core/s3/S3MultipartCopyFeatureTest.java @@ -17,6 +17,7 @@ * Bug fixes, suggestions and comments should be sent to feedback@cyberduck.ch */ +import ch.cyberduck.core.AlphanumericRandomStringService; import ch.cyberduck.core.DisabledConnectionCallback; import ch.cyberduck.core.DisabledLoginCallback; import ch.cyberduck.core.Path; @@ -66,6 +67,28 @@ public void testCopy() throws Exception { new S3DefaultDeleteFeature(session).delete(Collections.singletonList(copy), new DisabledLoginCallback(), new Delete.DisabledCallback()); } + @Test + public void testCopyBucketNameInHostname() throws Exception { + final Path test = new Path(new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)); + final byte[] content = RandomUtils.nextBytes(1023); + final TransferStatus status = new TransferStatus().withLength(content.length); + status.setChecksum(new SHA256ChecksumCompute().compute(new ByteArrayInputStream(content), status)); + final OutputStream out = new S3WriteFeature(virtualhost, new S3AccessControlListFeature(virtualhost)).write(test, status, new DisabledConnectionCallback()); + assertNotNull(out); + new StreamCopier(new TransferStatus(), new TransferStatus()).transfer(new ByteArrayInputStream(content), out); + out.close(); + test.attributes().setSize(content.length); + final Path copy = new Path(new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)); + final S3MultipartCopyFeature feature = new S3MultipartCopyFeature(virtualhost, new S3AccessControlListFeature(virtualhost)); + feature.copy(test, copy, status, new DisabledConnectionCallback(), new DisabledStreamListener()); + assertTrue(new S3FindFeature(virtualhost, new S3AccessControlListFeature(virtualhost)).find(test)); + assertEquals(content.length, new S3AttributesFinderFeature(virtualhost, new S3AccessControlListFeature(virtualhost)).find(test).getSize()); + new S3DefaultDeleteFeature(virtualhost).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback()); + assertTrue(new S3FindFeature(virtualhost, new S3AccessControlListFeature(virtualhost)).find(copy)); + assertEquals(content.length, new S3AttributesFinderFeature(virtualhost, new S3AccessControlListFeature(virtualhost)).find(copy).getSize()); + new S3DefaultDeleteFeature(virtualhost).delete(Collections.singletonList(copy), new DisabledLoginCallback(), new Delete.DisabledCallback()); + } + @Test public void testCopyAWS4Signature() throws Exception { final Path container = new Path("test-eu-central-1-cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume)); From 12c1862341cad2107b410fdb4fc205224f13317a Mon Sep 17 00:00:00 2001 From: David Kocher Date: Thu, 5 Oct 2023 17:53:47 +0200 Subject: [PATCH 004/230] Fix test. --- s3/src/test/java/ch/cyberduck/core/s3/S3ListServiceTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/s3/src/test/java/ch/cyberduck/core/s3/S3ListServiceTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3ListServiceTest.java index 20ccddc6a8d..cfd169799eb 100644 --- a/s3/src/test/java/ch/cyberduck/core/s3/S3ListServiceTest.java +++ b/s3/src/test/java/ch/cyberduck/core/s3/S3ListServiceTest.java @@ -37,7 +37,7 @@ public class S3ListServiceTest extends AbstractS3Test { @Test public void testListBucketNameInHostname() throws Exception { - new S3ListService(virtualhost, new S3AccessControlListFeature(session)).list( + new S3ListService(virtualhost, new S3AccessControlListFeature(virtualhost)).list( new Path("/", EnumSet.of(Path.Type.directory, Path.Type.volume)), new DisabledListProgressListener()); } From d89f2217b6f0749362d04cd83c5ff6a433004eec Mon Sep 17 00:00:00 2001 From: David Kocher Date: Thu, 5 Oct 2023 18:10:22 +0200 Subject: [PATCH 005/230] Handle special case to determine logging target with bucket name in hostname. --- .../cyberduck/core/s3/S3LoggingFeature.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/s3/src/main/java/ch/cyberduck/core/s3/S3LoggingFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3LoggingFeature.java index 8bebe9563b9..b5f3018b49f 100644 --- a/s3/src/main/java/ch/cyberduck/core/s3/S3LoggingFeature.java +++ b/s3/src/main/java/ch/cyberduck/core/s3/S3LoggingFeature.java @@ -23,6 +23,7 @@ import ch.cyberduck.core.exception.AccessDeniedException; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.exception.InteroperabilityException; +import ch.cyberduck.core.features.Home; import ch.cyberduck.core.features.Logging; import ch.cyberduck.core.logging.LoggingConfiguration; import ch.cyberduck.core.preferences.HostPreferences; @@ -63,14 +64,19 @@ public LoggingConfiguration getConfiguration(final Path file) throws BackgroundE } final LoggingConfiguration configuration = new LoggingConfiguration(status.isLoggingEnabled(), status.getTargetBucketName()); - try { - configuration.setContainers(new S3BucketListService(session).list( - new Path(String.valueOf(Path.DELIMITER), EnumSet.of(Path.Type.volume, Path.Type.directory)), - new DisabledListProgressListener()).toList()); + if(bucket.isRoot()) { + configuration.setContainers(Collections.singletonList( + new Path(RequestEntityRestStorageService.findBucketInHostname(session.getHost()), EnumSet.of(Path.Type.volume, Path.Type.directory))) + ); } - catch(AccessDeniedException | InteroperabilityException e) { - log.warn(String.format("Failure listing buckets. %s", e.getMessage())); - configuration.setContainers(Collections.singletonList(bucket)); + else { + try { + configuration.setContainers(new S3BucketListService(session).list(Home.ROOT, new DisabledListProgressListener()).toList()); + } + catch(AccessDeniedException | InteroperabilityException e) { + log.warn(String.format("Failure listing buckets. %s", e.getMessage())); + configuration.setContainers(Collections.singletonList(bucket)); + } } return configuration; } From 6f9299197ee566f321db747f7356fda02a30917f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 16:14:26 +0000 Subject: [PATCH 006/230] Bump commons-net:commons-net from 3.9.0 to 3.10.0 Bumps commons-net:commons-net from 3.9.0 to 3.10.0. --- updated-dependencies: - dependency-name: commons-net:commons-net dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3757e5986c7..8978d8a46ed 100644 --- a/pom.xml +++ b/pom.xml @@ -174,7 +174,7 @@ commons-net commons-net - 3.9.0 + 3.10.0 org.apache.commons From 5d11f4cb177418fd82392938d6b93aea09919730 Mon Sep 17 00:00:00 2001 From: David Kocher Date: Thu, 5 Oct 2023 18:19:24 +0200 Subject: [PATCH 007/230] Fix implementation to work with bucket name in hostname. --- s3/src/main/java/ch/cyberduck/core/s3/S3LoggingFeature.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/s3/src/main/java/ch/cyberduck/core/s3/S3LoggingFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3LoggingFeature.java index b5f3018b49f..f7d8160989b 100644 --- a/s3/src/main/java/ch/cyberduck/core/s3/S3LoggingFeature.java +++ b/s3/src/main/java/ch/cyberduck/core/s3/S3LoggingFeature.java @@ -99,11 +99,11 @@ public void setConfiguration(final Path file, final LoggingConfiguration configu try { final S3BucketLoggingStatus status = new S3BucketLoggingStatus( StringUtils.isNotBlank(configuration.getLoggingTarget()) ? configuration.getLoggingTarget() : - bucket.isRoot() ? StringUtils.EMPTY : bucket.getName(), null); + bucket.isRoot() ? RequestEntityRestStorageService.findBucketInHostname(session.getHost()) : bucket.getName(), null); if(configuration.isEnabled()) { status.setLogfilePrefix(new HostPreferences(session.getHost()).getProperty("s3.logging.prefix")); } - session.getClient().setBucketLoggingStatus(bucket.getName(), status, true); + session.getClient().setBucketLoggingStatus(bucket.isRoot() ? StringUtils.EMPTY : bucket.getName(), status, true); } catch(ServiceException e) { throw new S3ExceptionMappingService().map("Failure to write attributes of {0}", e, file); From f2802af6a8bb3dc1842682b39f648f5ed2d3ae14 Mon Sep 17 00:00:00 2001 From: Jenkins CI Date: Tue, 10 Oct 2023 12:49:01 +0200 Subject: [PATCH 008/230] Pull localization changes from Transifex --- i18n/src/main/resources/ar.lproj/Browser.xib | 2 +- .../src/main/resources/sv.lproj/Error.strings | Bin 4174 -> 4172 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/i18n/src/main/resources/ar.lproj/Browser.xib b/i18n/src/main/resources/ar.lproj/Browser.xib index 27a21bed607..50c3feaadc7 100644 --- a/i18n/src/main/resources/ar.lproj/Browser.xib +++ b/i18n/src/main/resources/ar.lproj/Browser.xib @@ -256,7 +256,7 @@ - + diff --git a/i18n/src/main/resources/sv.lproj/Error.strings b/i18n/src/main/resources/sv.lproj/Error.strings index a71f5b363cada579f78c11779e27aec3b950d1a7..57e659c6566bc585d6277ec34eb20263dcb20547 100644 GIT binary patch delta 32 mcmX@7a7JN+iGV~fLkYt-h7^Wk1_g#phCCoIl|hNYngIZtAP1-b delta 14 VcmX@3a86-^iNItL0SP8+1^_0z1KR)q From d823292c4f13b2972875cdb37f86b2b1fbf5a4fb Mon Sep 17 00:00:00 2001 From: David Kocher Date: Tue, 10 Oct 2023 14:55:00 +0200 Subject: [PATCH 009/230] Fix #15183. --- .../cyberduck/core/sftp/auth/SFTPPublicKeyAuthentication.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ssh/src/main/java/ch/cyberduck/core/sftp/auth/SFTPPublicKeyAuthentication.java b/ssh/src/main/java/ch/cyberduck/core/sftp/auth/SFTPPublicKeyAuthentication.java index e8307a75f7f..5eb45d8a745 100644 --- a/ssh/src/main/java/ch/cyberduck/core/sftp/auth/SFTPPublicKeyAuthentication.java +++ b/ssh/src/main/java/ch/cyberduck/core/sftp/auth/SFTPPublicKeyAuthentication.java @@ -32,6 +32,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; @@ -90,7 +91,7 @@ public Boolean authenticate(final Host bookmark, final LoginCallback prompt, fin default: throw new InteroperabilityException(String.format("Unknown key format for file %s", identity.getName())); } - provider.init(new InputStreamReader(identity.getInputStream(), StandardCharsets.UTF_8), new PasswordFinder() { + provider.init(new File(identity.getAbsolute()), new PasswordFinder() { @Override public char[] reqPassword(Resource resource) { if(StringUtils.isEmpty(credentials.getIdentityPassphrase())) { From 44405325cf7e824b360719b098f754d674306de0 Mon Sep 17 00:00:00 2001 From: David Kocher Date: Tue, 10 Oct 2023 15:30:04 +0200 Subject: [PATCH 010/230] Make verdict part of hash code. --- core/src/main/java/ch/cyberduck/core/PathAttributes.java | 5 +++++ core/src/test/java/ch/cyberduck/core/PathAttributesTest.java | 3 +++ 2 files changed, 8 insertions(+) diff --git a/core/src/main/java/ch/cyberduck/core/PathAttributes.java b/core/src/main/java/ch/cyberduck/core/PathAttributes.java index eaede24331f..b95da23b494 100644 --- a/core/src/main/java/ch/cyberduck/core/PathAttributes.java +++ b/core/src/main/java/ch/cyberduck/core/PathAttributes.java @@ -674,6 +674,9 @@ public boolean equals(final Object o) { if(!Objects.equals(revision, that.revision)) { return false; } + if(!Objects.equals(verdict, that.verdict)) { + return false; + } return true; } @@ -687,6 +690,7 @@ public int hashCode() { result = 31 * result + (versionId != null ? versionId.hashCode() : 0); result = 31 * result + (fileId != null ? fileId.hashCode() : 0); result = 31 * result + (revision != null ? revision.hashCode() : 0); + result = 31 * result + (verdict != null ? verdict.hashCode() : 0); return result; } @@ -714,6 +718,7 @@ public String toString() { sb.append(", region='").append(region).append('\''); sb.append(", metadata=").append(metadata).append('\''); sb.append(", custom=").append(custom).append('\''); + sb.append(", verdict=").append(verdict).append('\''); sb.append('}'); return sb.toString(); } diff --git a/core/src/test/java/ch/cyberduck/core/PathAttributesTest.java b/core/src/test/java/ch/cyberduck/core/PathAttributesTest.java index 8177275ff89..77513a7b72b 100644 --- a/core/src/test/java/ch/cyberduck/core/PathAttributesTest.java +++ b/core/src/test/java/ch/cyberduck/core/PathAttributesTest.java @@ -28,6 +28,7 @@ public void testCopy() { attributes.setDuplicate(true); attributes.setLockId(new AlphanumericRandomStringService().random()); attributes.setPermission(new Permission(644)); + attributes.setVerdict(PathAttributes.Verdict.pending); final PathAttributes clone = new PathAttributes(attributes); assertEquals(clone.getPermission(), attributes.getPermission()); assertEquals(clone.getModificationDate(), attributes.getModificationDate()); @@ -79,6 +80,7 @@ public void testSerialize() { attributes.setDuplicate(true); attributes.setRegion("region"); attributes.setStorageClass("storageClass"); + attributes.setVerdict(PathAttributes.Verdict.pending); final Map custom = new HashMap<>(attributes.getCustom()); custom.put("key", "value"); attributes.setCustom(custom); @@ -93,6 +95,7 @@ public void testSerialize() { assertEquals(attributes.isDuplicate(), deserialized.isDuplicate()); assertEquals(attributes.getRegion(), deserialized.getRegion()); assertEquals(attributes.getStorageClass(), deserialized.getStorageClass()); + assertEquals(attributes.getVerdict(), deserialized.getVerdict()); assertEquals(attributes.getCustom(), deserialized.getCustom()); assertEquals(attributes, deserialized); } From 64c062bda4c270c2bde3bb1ebe58d99ca939cd53 Mon Sep 17 00:00:00 2001 From: David Kocher Date: Wed, 11 Oct 2023 10:10:24 +0200 Subject: [PATCH 011/230] Add test. --- .../core/worker/B2SingleTransferWorkerTest.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/backblaze/src/test/java/ch/cyberduck/core/worker/B2SingleTransferWorkerTest.java b/backblaze/src/test/java/ch/cyberduck/core/worker/B2SingleTransferWorkerTest.java index 0129d970728..3a3ade717b8 100644 --- a/backblaze/src/test/java/ch/cyberduck/core/worker/B2SingleTransferWorkerTest.java +++ b/backblaze/src/test/java/ch/cyberduck/core/worker/B2SingleTransferWorkerTest.java @@ -26,6 +26,7 @@ import ch.cyberduck.core.Local; import ch.cyberduck.core.LoginConnectionService; import ch.cyberduck.core.Path; +import ch.cyberduck.core.PathAttributes; import ch.cyberduck.core.b2.B2AttributesFinderFeature; import ch.cyberduck.core.b2.B2DeleteFeature; import ch.cyberduck.core.b2.B2LargeUploadService; @@ -35,6 +36,7 @@ import ch.cyberduck.core.b2.B2WriteFeature; import ch.cyberduck.core.features.Delete; import ch.cyberduck.core.features.Upload; +import ch.cyberduck.core.io.Checksum; import ch.cyberduck.core.notification.DisabledNotificationService; import ch.cyberduck.core.ssl.DefaultX509KeyManager; import ch.cyberduck.core.ssl.DefaultX509TrustManager; @@ -65,8 +67,7 @@ import java.util.UUID; import java.util.concurrent.atomic.AtomicBoolean; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; @Category(IntegrationTest.class) public class B2SingleTransferWorkerTest extends VaultTest { @@ -95,6 +96,9 @@ public String getProperty(final String key) { if("b2.upload.largeobject.concurrency".equals(key)) { return String.valueOf(5); } + if("queue.upload.checksum.calculate".equals(key)) { + return String.valueOf(true); + } return super.getProperty(key); } }; @@ -151,7 +155,9 @@ public TransferAction prompt(final TransferItem file) { local.delete(); assertTrue(t.isComplete()); final B2VersionIdProvider fileid = new B2VersionIdProvider(session); - assertEquals(content.length, new B2AttributesFinderFeature(session, fileid).find(test).getSize()); + final PathAttributes attr = new B2AttributesFinderFeature(session, fileid).find(test); + assertNotEquals(Checksum.NONE, attr.getChecksum()); + assertEquals(content.length, attr.getSize()); assertEquals(content.length, counter.getRecv(), 0L); assertEquals(content.length, counter.getSent(), 0L); assertTrue(failed.get()); From d841a9b9369168b3b458a035e6801bbbb5383e5e Mon Sep 17 00:00:00 2001 From: David Kocher Date: Wed, 11 Oct 2023 10:23:53 +0200 Subject: [PATCH 012/230] Add test. --- .../java/ch/cyberduck/core/b2/B2LargeUploadServiceTest.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/backblaze/src/test/java/ch/cyberduck/core/b2/B2LargeUploadServiceTest.java b/backblaze/src/test/java/ch/cyberduck/core/b2/B2LargeUploadServiceTest.java index 3f859f79ef6..d4e97dfbf17 100644 --- a/backblaze/src/test/java/ch/cyberduck/core/b2/B2LargeUploadServiceTest.java +++ b/backblaze/src/test/java/ch/cyberduck/core/b2/B2LargeUploadServiceTest.java @@ -21,6 +21,7 @@ import ch.cyberduck.core.DisabledLoginCallback; import ch.cyberduck.core.Local; import ch.cyberduck.core.Path; +import ch.cyberduck.core.PathAttributes; import ch.cyberduck.core.exception.AccessDeniedException; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.features.Delete; @@ -79,7 +80,9 @@ public void testUpload() throws Exception { upload.upload(test, local, new BandwidthThrottle(BandwidthThrottle.UNLIMITED), new DisabledStreamListener(), status, new DisabledConnectionCallback()); - assertEquals(checksum, new B2AttributesFinderFeature(session, fileid).find(test).getChecksum()); + final PathAttributes attr = new B2AttributesFinderFeature(session, fileid).find(test); + assertNotEquals(Checksum.NONE, attr.getChecksum()); + assertEquals(checksum, attr.getChecksum()); status.validate(); assertTrue(status.isComplete()); assertEquals(content.length, status.getResponse().getSize()); From c7aab0406d861caf1a4da1bea53e71e7c1955e49 Mon Sep 17 00:00:00 2001 From: David Kocher Date: Wed, 11 Oct 2023 10:23:23 +0200 Subject: [PATCH 013/230] Use file id for comparison because checksum may not be present for large file uploads. --- backblaze/src/main/java/ch/cyberduck/core/b2/B2Protocol.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backblaze/src/main/java/ch/cyberduck/core/b2/B2Protocol.java b/backblaze/src/main/java/ch/cyberduck/core/b2/B2Protocol.java index 127511ec36c..53047c46bcf 100644 --- a/backblaze/src/main/java/ch/cyberduck/core/b2/B2Protocol.java +++ b/backblaze/src/main/java/ch/cyberduck/core/b2/B2Protocol.java @@ -18,9 +18,9 @@ import ch.cyberduck.core.AbstractProtocol; import ch.cyberduck.core.PathContainerService; import ch.cyberduck.core.Scheme; -import ch.cyberduck.core.synchronization.ChecksumComparisonService; import ch.cyberduck.core.synchronization.ComparisonService; import ch.cyberduck.core.synchronization.DefaultComparisonService; +import ch.cyberduck.core.synchronization.VersionIdComparisonService; import ch.cyberduck.core.text.DefaultLexicographicOrderComparator; import java.util.Comparator; @@ -94,7 +94,7 @@ public T getFeature(final Class type) { return (T) new B2PathContainerService(); } if(type == ComparisonService.class) { - return (T) new DefaultComparisonService(new ChecksumComparisonService(), ComparisonService.disabled); + return (T) new DefaultComparisonService(new VersionIdComparisonService(), ComparisonService.disabled); } return super.getFeature(type); } From 02d2749083807f9703a9cd3cd583a00add87ecb3 Mon Sep 17 00:00:00 2001 From: Yves Langisch Date: Wed, 11 Oct 2023 12:46:03 +0200 Subject: [PATCH 014/230] Typo. --- Changelog.txt | 2 +- www/update/changelog.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 5c3f39cdcd9..82c5f88dd93 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -2,7 +2,7 @@ Cyberduck https://cyberduck.io/ 8.7.0 -- [Feature] Suport to login using temporary credentials from Security Token Service (STS API) using OpenID Connect (OIDC) web identity (S3) (#13804) +- [Feature] Support to login using temporary credentials from Security Token Service (STS API) using OpenID Connect (OIDC) web identity (S3) (#13804) - [Feature] Login using connection profile for AWS S3/STS + Google (OIDC) (S3) - [Feature] Login using connection profile for AWS S3/STS + Azure AD (OIDC) (S3) - [Feature] Support login using OAuth 2.0 in (ownCloud) (#14876) diff --git a/www/update/changelog.html b/www/update/changelog.html index 1eda224ffbd..5902c2dd733 100755 --- a/www/update/changelog.html +++ b/www/update/changelog.html @@ -81,7 +81,7 @@ Version 8.7.0

    -
  • Feature Suport to login using temporary credentials from Security Token +
  • Feature Support to login using temporary credentials from Security Token Service (STS API) using OpenID Connect (OIDC) web identity (S3) (#13804)
  • From 6e740c25966d158e0bafe693c74495f19f2fabe9 Mon Sep 17 00:00:00 2001 From: David Kocher Date: Wed, 11 Oct 2023 12:55:38 +0200 Subject: [PATCH 015/230] Fix tests. --- .../DefaultTemporaryFileServiceTest.java | 20 +++++++++---------- .../local/FlatTemporaryFileServiceTest.java | 10 +++++----- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/core/src/test/java/ch/cyberduck/core/local/DefaultTemporaryFileServiceTest.java b/core/src/test/java/ch/cyberduck/core/local/DefaultTemporaryFileServiceTest.java index 5e96a1ed62f..46d4a38b900 100755 --- a/core/src/test/java/ch/cyberduck/core/local/DefaultTemporaryFileServiceTest.java +++ b/core/src/test/java/ch/cyberduck/core/local/DefaultTemporaryFileServiceTest.java @@ -37,11 +37,11 @@ public void testExists() { public void testCreateFile() { final String temp = StringUtils.removeEnd(System.getProperty("java.io.tmpdir"), File.separator); final String s = System.getProperty("file.separator"); - assertEquals(String.format("%s%su%sp%s887503681%sf", temp, s, s, s, s), + assertEquals(String.format("%s%su%sp%s1742810335%sf", temp, s, s, s, s), new DefaultTemporaryFileService().create("u", new Path("/p/f", EnumSet.of(Path.Type.file))).getAbsolute()); final Path file = new Path("/p/f", EnumSet.of(Path.Type.file)); file.attributes().setRegion("region"); - assertEquals(String.format("%s%su%sp%s887503681%sf", temp, s, s, s, s), + assertEquals(String.format("%s%su%sp%s1742810335%sf", temp, s, s, s, s), new DefaultTemporaryFileService().create("u", file).getAbsolute()); } @@ -53,14 +53,14 @@ public void testVersion() { final Path file = new Path("/p/f", EnumSet.of(Path.Type.file)); file.attributes().setRegion("region"); file.attributes().setVersionId("2"); - assertEquals(String.format("%s%su%sp%s887551731%sf", temp, s, s, s, s), + assertEquals(String.format("%s%su%sp%s1744299885%sf", temp, s, s, s, s), new DefaultTemporaryFileService().create("u", file).getAbsolute()); } { final Path file = new Path("/p", EnumSet.of(Path.Type.directory)); file.attributes().setRegion("region"); file.attributes().setVersionId("2"); - assertEquals(String.format("%s%su%s887551731%sp", temp, s, s, s), + assertEquals(String.format("%s%su%s1744299885%sp", temp, s, s, s), new DefaultTemporaryFileService().create("u", file).getAbsolute()); } } @@ -71,7 +71,7 @@ public void testCreateContainer() { final String s = System.getProperty("file.separator"); final Path file = new Path("/container", EnumSet.of(Path.Type.directory)); file.attributes().setRegion("region"); - assertEquals(String.format("%s%su%s887503681%scontainer", temp, s, s, s), + assertEquals(String.format("%s%su%s1742810335%scontainer", temp, s, s, s), new DefaultTemporaryFileService().create("u", file).getAbsolute()); } @@ -87,8 +87,8 @@ public void testPathTooLong() { file.attributes().setVersionId("2"); final Local local = new DefaultTemporaryFileService().create("UID", file); final String localFile = local.getAbsolute(); - assertNotEquals(String.format("%s/%s%s/887551731/%s", temp, "UID", testPathDirectory, testPathFile).replace('/', File.separatorChar), localFile); - assertEquals(String.format("%s/%s/%s/887551731/%s", temp, "UID", testPathMD5, testPathFile).replace('/', File.separatorChar), localFile); + assertNotEquals(String.format("%s/%s%s/1744299885/%s", temp, "UID", testPathDirectory, testPathFile).replace('/', File.separatorChar), localFile); + assertEquals(String.format("%s/%s/%s/1744299885/%s", temp, "UID", testPathMD5, testPathFile).replace('/', File.separatorChar), localFile); } @Test @@ -103,8 +103,8 @@ public void testPathNotTooLong() { file.attributes().setVersionId("2"); final Local local = new DefaultTemporaryFileService().create("UID", file); final String localFile = local.getAbsolute(); - assertEquals(String.format("%s/%s%s/887551731/%s", temp, "UID", testPathDirectory, testPathFile).replace('/', File.separatorChar), localFile); - assertNotEquals(String.format("%s/%s%s/887551731/%s", temp, "UID", testPathMD5, testPathFile).replace('/', File.separatorChar), localFile); + assertEquals(String.format("%s/%s%s/1744299885/%s", temp, "UID", testPathDirectory, testPathFile).replace('/', File.separatorChar), localFile); + assertNotEquals(String.format("%s/%s%s/1744299885/%s", temp, "UID", testPathMD5, testPathFile).replace('/', File.separatorChar), localFile); } @Test @@ -115,7 +115,7 @@ public void testTemporaryPath() { final Local local = new DefaultTemporaryFileService().create(file); assertEquals("t.txt", file.getName()); assertEquals("t.txt", local.getName()); - assertEquals("887550770", local.getParent().getName()); + assertEquals("1744270094", local.getParent().getName()); assertEquals("f2", local.getParent().getParent().getName()); assertEquals("f1", local.getParent().getParent().getParent().getName()); } diff --git a/core/src/test/java/ch/cyberduck/core/local/FlatTemporaryFileServiceTest.java b/core/src/test/java/ch/cyberduck/core/local/FlatTemporaryFileServiceTest.java index 1425d834e96..c8634e15e4d 100644 --- a/core/src/test/java/ch/cyberduck/core/local/FlatTemporaryFileServiceTest.java +++ b/core/src/test/java/ch/cyberduck/core/local/FlatTemporaryFileServiceTest.java @@ -53,11 +53,11 @@ public void testExists() { public void testCreateFile() { final String temp = StringUtils.removeEnd(System.getProperty("java.io.tmpdir"), File.separator); final String s = System.getProperty("file.separator"); - assertEquals(String.format("%s%su%s887503681-f", temp, s, s), + assertEquals(String.format("%s%su%s1742810335-f", temp, s, s), new FlatTemporaryFileService().create("u", new Path("/p/f", EnumSet.of(Path.Type.file))).getAbsolute()); final Path file = new Path("/p/f", EnumSet.of(Path.Type.file)); file.attributes().setRegion("region"); - assertEquals(String.format("%s%su%s887503681-f", temp, s, s), + assertEquals(String.format("%s%su%s1742810335-f", temp, s, s), new FlatTemporaryFileService().create("u", file).getAbsolute()); } @@ -67,7 +67,7 @@ public void testCreateContainer() { final String s = System.getProperty("file.separator"); final Path file = new Path("/container", EnumSet.of(Path.Type.directory)); file.attributes().setRegion("region"); - assertEquals(String.format("%s%su%s887503681-container", temp, s, s), + assertEquals(String.format("%s%su%s1742810335-container", temp, s, s), new FlatTemporaryFileService().create("u", file).getAbsolute()); } @@ -99,8 +99,8 @@ public void testPathNotTooLong() { final Local local = new FlatTemporaryFileService().create("UID", file); assertTrue(local.getParent().exists()); final String localFile = local.getAbsolute(); - assertEquals(String.format("%s/%s/887551731-%s", temp, "UID", testPathFile).replace('/', File.separatorChar), localFile); - assertNotEquals(String.format("%s/%s%s/2/887551731-%s", temp, "UID", testPathMD5, testPathFile).replace('/', File.separatorChar), localFile); + assertEquals(String.format("%s/%s/1744299885-%s", temp, "UID", testPathFile).replace('/', File.separatorChar), localFile); + assertNotEquals(String.format("%s/%s%s/2/1744299885-%s", temp, "UID", testPathMD5, testPathFile).replace('/', File.separatorChar), localFile); } @Test From 763e8613559c85efbe533e5e1108a5ba4b4fa97a Mon Sep 17 00:00:00 2001 From: David Kocher Date: Wed, 11 Oct 2023 12:05:07 +0200 Subject: [PATCH 016/230] Update dependency. --- osx/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osx/pom.xml b/osx/pom.xml index 1226f79e7a1..2cbcdbf8e1d 100644 --- a/osx/pom.xml +++ b/osx/pom.xml @@ -115,7 +115,7 @@ org.sparkle-project sparkle zip - 2.4.1 + 2.5.0 ${project.build.directory} From 79314904d1126df93468aa4be5f1a3e7bb5b5eaf Mon Sep 17 00:00:00 2001 From: David Kocher Date: Wed, 11 Oct 2023 12:05:31 +0200 Subject: [PATCH 017/230] Adapting release notes based on currently installed version. --- www/update/changelog.html | 76 +++++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 35 deletions(-) diff --git a/www/update/changelog.html b/www/update/changelog.html index 5902c2dd733..b86b2d7dcd0 100755 --- a/www/update/changelog.html +++ b/www/update/changelog.html @@ -55,13 +55,19 @@ vertical-align: baseline; border-radius: .25em; } + ul li { list-style-type: none; line-height: 1.5em; } + ul li ul li { list-style-type: disc; } + + ul.sparkle-installed-version { + opacity: 0.5; + } @@ -80,7 +86,7 @@

    Version 8.7.0

    -
      +
      • Feature Support to login using temporary credentials from Security Token Service (STS API) using OpenID Connect (OIDC) web identity (S3) (#13804) @@ -114,7 +120,7 @@

        Version 8.6.3

        -
          +
          • Bugfix Failure configuring credentials from AWS CLI setup (S3) (#14970)
          • @@ -126,7 +132,7 @@

            Version 8.6.2

            -
              +
              • Feature Allow to open connections without copying authentication code after login (Microsoft OneDrive, Sharepoint)
              • @@ -168,14 +174,14 @@

                Version 8.6.1

                -
                  +
                  • Bugfix Parse seconds or milliseconds from Mtime in metadata (S3)

                  Version 8.6.0

                  -
                    +
                    • Feature Add preference "Use Keychain" when unlocking vaults (Cryptomator) (#14662)
                    • @@ -223,7 +229,7 @@

                      Version 8.5.9

                      -
                        +
                        • Bugfix Requires force quit after opening file multiple times in external editor (macOS) (#14412) @@ -233,7 +239,7 @@

                          Version 8.5.8

                          -
                            +
                            • Bugfix Presigned URL does not consider the server port number (S3) (#13981)
                            • @@ -257,7 +263,7 @@

                              Version 8.5.7

                              -
                                +
                                • Bugfix Cannot create or duplicate files with any suffix (#14263)
                                • @@ -303,7 +309,7 @@

                                  Version 8.5.6

                                  -
                                    +
                                    • Bugfix Support for vaults using GCM encryption (Cryptomator) (#14207)
                                    • @@ -322,7 +328,7 @@

                                      Version 8.5.5

                                      -
                                        +
                                        • Bugfix Save OAuth tokens with username to allow connecting to different accounts (Google Drive, Google Storage, OneDrive, Dropbox, Box) @@ -332,7 +338,7 @@

                                          Version 8.5.4

                                          -
                                            +
                                            • Bugfix Failure authorizing using OAuth with no desktop browser installed (Linux) (#14028) @@ -350,7 +356,7 @@

                                              Version 8.5.3

                                              -
                                                +
                                                • Bugfix Failure uploading file with diacritic in filename (Windows) (#13723)
                                                • @@ -372,7 +378,7 @@

                                                  Version 8.5.2

                                                  -
                                                    +
                                                    • Bugfix Invalid syntax in Open in Terminal command (SFTP, macOS)
                                                    • Bugfix Passwords for ProxyJump hosts in .ssh/config are not saved (SFTP) ( Version 8.5.1

                                                      -
                                                        +
                                                        • Feature Skip button to allow creating share with no passphrase (Dropbox, Box, ownCloud, Nextcloud) (#13846) @@ -408,7 +414,7 @@

                                                          Version 8.5.0

                                                          -
                                                            +
                                                            • Feature Allow to view and revert previous versions of files (ownCloud, Nextcloud) (#10560) @@ -429,7 +435,7 @@

                                                              Version 8.4.5

                                                              -
                                                                +
                                                                • Bugfix Failure enabling connection profile from Preferences (#13739)
                                                                • @@ -445,7 +451,7 @@

                                                                  Version 8.4.4

                                                                  -
                                                                    +
                                                                    • Bugfix Prioritise password authentication if password is available (SFTP) (#13442) @@ -466,7 +472,7 @@

                                                                      Version 8.4.3

                                                                      -
                                                                        +
                                                                        • Bugfix Repeated prompt to verify server fingerprint (SFTP, Windows) (#13638)
                                                                        • @@ -485,7 +491,7 @@

                                                                          Version 8.4.2

                                                                          -
                                                                            +
                                                                            • Bugfix Setting to always open default editor application set in Preferences (Windows) (#13546) @@ -498,7 +504,7 @@

                                                                              Version 8.4.1

                                                                              -
                                                                                +
                                                                                • Bugfix Crash running on versions prior macOS 11 (#13521)
                                                                                • @@ -507,7 +513,7 @@

                                                                                  Version 8.4.0

                                                                                  -
                                                                                    +
                                                                                    • Feature Revert previous file versions in Info panel (S3, Backblaze B2, Dropbox, Google Storage, OneDrive, Microsoft Sharepoint)
                                                                                    • @@ -581,7 +587,7 @@

                                                                                      Version 8.3.3

                                                                                      -
                                                                                        +
                                                                                        • Bugfix Failing transfers with multipe files (FTP) (#13322)
                                                                                        • @@ -590,7 +596,7 @@

                                                                                          Version 8.3.2

                                                                                          -
                                                                                            +
                                                                                            • Bugfix Connection not released causing freeze in browser or transfer (FTP) (#13273) @@ -600,7 +606,7 @@

                                                                                              Version 8.3.1

                                                                                              -
                                                                                                +
                                                                                                • Bugfix Failure reconnecting when control connection is closed on server (FTP) (#13037) @@ -616,7 +622,7 @@

                                                                                                  Version 8.3.0

                                                                                                  -
                                                                                                    +
                                                                                                    • Feature Enable authentication using OpenSSH agent on Windows (SFTP, Windows) (#12880) @@ -660,7 +666,7 @@

                                                                                                      Version 8.2.3

                                                                                                      -
                                                                                                        +
                                                                                                        • Bugfix When creating new vault save vault.cryptomator to make vaults readable by Cryptomator apps (Cryptomator)
                                                                                                        • @@ -675,7 +681,7 @@

                                                                                                          Version 8.2.2

                                                                                                          -
                                                                                                            +
                                                                                                            • Bugfix Add support reading IdentityAgent from OpenSSH configuration (SFTP)
                                                                                                            • @@ -685,7 +691,7 @@

                                                                                                              Version 8.2.1

                                                                                                              -
                                                                                                                +
                                                                                                                • Bugfix Try all public key algorithms available for a specific key type (SFTP) (#12733) @@ -705,7 +711,7 @@

                                                                                                                  Version 8.2.0

                                                                                                                  -
                                                                                                                    +
                                                                                                                    • Feature Support for Box API (Box) (#10235)
                                                                                                                    • @@ -724,7 +730,7 @@

                                                                                                                      Version 8.1.2

                                                                                                                      -
                                                                                                                        +
                                                                                                                        • Bugfix Crash with unsatisifed link error using random functions (Windows) (#12628) @@ -734,7 +740,7 @@

                                                                                                                          Version 8.1.1

                                                                                                                          -
                                                                                                                            +
                                                                                                                            • Feature Interoperability with vault format 8 (Cryptomator) (#11888)
                                                                                                                            • @@ -752,7 +758,7 @@

                                                                                                                              Version 8.1.0

                                                                                                                              -
                                                                                                                                +
                                                                                                                                • Feature Native support for Apple silicon (#11101)
                                                                                                                                • @@ -761,7 +767,7 @@

                                                                                                                                  Version 8.0.2

                                                                                                                                  -
                                                                                                                                    +
                                                                                                                                    • Bugfix Replacing file may cause empty permission set in ACL (S3)
                                                                                                                                    • Bugfix Failure authentication with PuTTY private key (SFTP) (#11887) @@ -779,7 +785,7 @@

                                                                                                                                      Version 8.0.1

                                                                                                                                      -
                                                                                                                                        +
                                                                                                                                        • Bugfix Interoperability with servers not supporting Range header in requests (WebDAV)
                                                                                                                                        • @@ -788,7 +794,7 @@

                                                                                                                                          Version 8.0.0

                                                                                                                                          -
                                                                                                                                            +
                                                                                                                                            • Feature Allow to manage additional connection profiles in Preferences (#10823) From 4573c581db854fe6e874544a380f0a6af03d5040 Mon Sep 17 00:00:00 2001 From: David Kocher Date: Wed, 11 Oct 2023 12:32:54 +0200 Subject: [PATCH 018/230] Disable autofill for password field. --- Cyberduck.xcodeproj/project.pbxproj | 8 ++++++++ .../objc/AutofillDisabledSecureTextField.h | 17 ++++++++++++++++ .../objc/AutofillDisabledSecureTextField.m | 20 +++++++++++++++++++ i18n/src/main/resources/ar.lproj/Bookmark.xib | 10 +++++----- .../main/resources/ar.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/bg.lproj/Bookmark.xib | 10 +++++----- .../main/resources/bg.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/ca.lproj/Bookmark.xib | 10 +++++----- .../main/resources/ca.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/cs.lproj/Bookmark.xib | 10 +++++----- .../main/resources/cs.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/cy.lproj/Bookmark.xib | 10 +++++----- .../main/resources/cy.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/da.lproj/Bookmark.xib | 10 +++++----- .../main/resources/da.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/de.lproj/Bookmark.xib | 10 +++++----- .../main/resources/de.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/el.lproj/Bookmark.xib | 10 +++++----- .../main/resources/el.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/en.lproj/Bookmark.xib | 2 +- .../main/resources/en.lproj/Connection.xib | 2 +- i18n/src/main/resources/es.lproj/Bookmark.xib | 10 +++++----- .../main/resources/es.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/et.lproj/Bookmark.xib | 10 +++++----- .../main/resources/et.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/fi.lproj/Bookmark.xib | 10 +++++----- .../main/resources/fi.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/fr.lproj/Bookmark.xib | 10 +++++----- .../main/resources/fr.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/he.lproj/Bookmark.xib | 10 +++++----- .../main/resources/he.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/hr.lproj/Bookmark.xib | 10 +++++----- .../main/resources/hr.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/hu.lproj/Bookmark.xib | 10 +++++----- .../main/resources/hu.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/it.lproj/Bookmark.xib | 10 +++++----- .../main/resources/it.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/ja.lproj/Bookmark.xib | 10 +++++----- .../main/resources/ja.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/ka.lproj/Bookmark.xib | 10 +++++----- .../main/resources/ka.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/ko.lproj/Bookmark.xib | 10 +++++----- .../main/resources/ko.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/lv.lproj/Bookmark.xib | 10 +++++----- .../main/resources/lv.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/nl.lproj/Bookmark.xib | 10 +++++----- .../main/resources/nl.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/no.lproj/Bookmark.xib | 10 +++++----- .../main/resources/no.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/pl.lproj/Bookmark.xib | 10 +++++----- .../main/resources/pl.lproj/Connection.xib | 8 ++++---- .../main/resources/pt_BR.lproj/Bookmark.xib | 10 +++++----- .../main/resources/pt_BR.lproj/Connection.xib | 8 ++++---- .../main/resources/pt_PT.lproj/Bookmark.xib | 10 +++++----- .../main/resources/pt_PT.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/ro.lproj/Bookmark.xib | 10 +++++----- .../main/resources/ro.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/ru.lproj/Bookmark.xib | 10 +++++----- .../main/resources/ru.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/sk.lproj/Bookmark.xib | 10 +++++----- .../main/resources/sk.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/sl.lproj/Bookmark.xib | 10 +++++----- .../main/resources/sl.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/sr.lproj/Bookmark.xib | 10 +++++----- .../main/resources/sr.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/sv.lproj/Bookmark.xib | 10 +++++----- .../main/resources/sv.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/th.lproj/Bookmark.xib | 10 +++++----- .../main/resources/th.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/tr.lproj/Bookmark.xib | 10 +++++----- .../main/resources/tr.lproj/Connection.xib | 8 ++++---- i18n/src/main/resources/uk.lproj/Bookmark.xib | 10 +++++----- .../main/resources/uk.lproj/Connection.xib | 8 ++++---- .../main/resources/zh_CN.lproj/Bookmark.xib | 10 +++++----- .../main/resources/zh_CN.lproj/Connection.xib | 8 ++++---- .../main/resources/zh_TW.lproj/Bookmark.xib | 10 +++++----- .../main/resources/zh_TW.lproj/Connection.xib | 8 ++++---- 77 files changed, 371 insertions(+), 326 deletions(-) create mode 100644 core/src/main/objc/AutofillDisabledSecureTextField.h create mode 100644 core/src/main/objc/AutofillDisabledSecureTextField.m diff --git a/Cyberduck.xcodeproj/project.pbxproj b/Cyberduck.xcodeproj/project.pbxproj index 4f8fefc569f..cd7948b5a4a 100644 --- a/Cyberduck.xcodeproj/project.pbxproj +++ b/Cyberduck.xcodeproj/project.pbxproj @@ -166,6 +166,8 @@ 47827C9724BFA67C006942C3 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47C9427C2175D451008871C8 /* AppKit.framework */; }; 47827C9924BFA800006942C3 /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47827C9824BFA800006942C3 /* Quartz.framework */; }; 478426F40F9F75900068BA2E /* License.strings in Resources */ = {isa = PBXBuildFile; fileRef = 478426F20F9F75900068BA2E /* License.strings */; }; + 4785285E2AD6B10A0008184B /* AutofillDisabledSecureTextField.h in Headers */ = {isa = PBXBuildFile; fileRef = 4785285C2AD6B10A0008184B /* AutofillDisabledSecureTextField.h */; }; + 4785285F2AD6B10A0008184B /* AutofillDisabledSecureTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 4785285D2AD6B10A0008184B /* AutofillDisabledSecureTextField.m */; }; 478DB2681DF3418D00BEAA45 /* unlockedbadge.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 478DB2671DF3418D00BEAA45 /* unlockedbadge.tiff */; }; 478F0DF412FB03DC000FE33C /* update.pem in Resources */ = {isa = PBXBuildFile; fileRef = 478F0DF312FB03DC000FE33C /* update.pem */; }; 47911A180B84C4E8001A29AE /* Acknowledgments.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 47911A170B84C4E8001A29AE /* Acknowledgments.rtf */; }; @@ -1134,6 +1136,8 @@ 4784271F0F9F76230068BA2E /* sk */ = {isa = PBXFileReference; fileEncoding = 2483028224; lastKnownFileType = text.plist.strings; lineEnding = 0; name = sk; path = i18n/src/main/resources/sk.lproj/License.strings; sourceTree = ""; }; 478427210F9F76280068BA2E /* tr */ = {isa = PBXFileReference; fileEncoding = 2483028224; lastKnownFileType = text.plist.strings; lineEnding = 0; name = tr; path = i18n/src/main/resources/tr.lproj/License.strings; sourceTree = ""; }; 478427220F9F762A0068BA2E /* de */ = {isa = PBXFileReference; fileEncoding = 2483028224; lastKnownFileType = text.plist.strings; lineEnding = 0; name = de; path = i18n/src/main/resources/de.lproj/License.strings; sourceTree = ""; }; + 4785285C2AD6B10A0008184B /* AutofillDisabledSecureTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AutofillDisabledSecureTextField.h; path = core/src/main/objc/AutofillDisabledSecureTextField.h; sourceTree = SOURCE_ROOT; }; + 4785285D2AD6B10A0008184B /* AutofillDisabledSecureTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AutofillDisabledSecureTextField.m; path = core/src/main/objc/AutofillDisabledSecureTextField.m; sourceTree = SOURCE_ROOT; }; 478DB2671DF3418D00BEAA45 /* unlockedbadge.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = unlockedbadge.tiff; sourceTree = ""; }; 478F0DF312FB03DC000FE33C /* update.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = update.pem; path = www/update/update.pem; sourceTree = ""; }; 4790762A0764903900676C18 /* cs */ = {isa = PBXFileReference; fileEncoding = 2483028224; lastKnownFileType = text.plist.strings; lineEnding = 0; name = cs; path = i18n/src/main/resources/cs.lproj/Localizable.strings; sourceTree = ""; }; @@ -1873,6 +1877,8 @@ 474152D706C4F08A00AC0BD2 /* Core */ = { isa = PBXGroup; children = ( + 4785285C2AD6B10A0008184B /* AutofillDisabledSecureTextField.h */, + 4785285D2AD6B10A0008184B /* AutofillDisabledSecureTextField.m */, 47EEFDC52386ECD100A3CAB0 /* UnifiedSystemLogAppender.h */, 47EEFDC62386ECD100A3CAB0 /* UnifiedSystemLogAppender.m */, 474B843F1C15DB51004D562C /* Sandbox.h */, @@ -2150,6 +2156,7 @@ 4705E00D1C037AB5002466FA /* SystemConfigurationProxy.h in Headers */, 474B84411C15DB51004D562C /* Sandbox.h in Headers */, 47F85C191C0F101F00FDA856 /* UKCrashReporter.h in Headers */, + 4785285E2AD6B10A0008184B /* AutofillDisabledSecureTextField.h in Headers */, 47F85C1B1C0F101F00FDA856 /* UKSystemInfo.h in Headers */, 4705E0091C037AB5002466FA /* LaunchServicesQuarantineService.h in Headers */, 47820E3A20B58426006D0501 /* SystemConfigurationReachability.h in Headers */, @@ -2579,6 +2586,7 @@ 4705DFF91C037AB5002466FA /* LaunchServicesApplicationFinder.m in Sources */, 4705E00E1C037AB5002466FA /* SystemConfigurationProxy.m in Sources */, 47820E3920B58426006D0501 /* SystemConfigurationReachability.m in Sources */, + 4785285F2AD6B10A0008184B /* AutofillDisabledSecureTextField.m in Sources */, 4705DFFF1C037AB5002466FA /* FinderLocal.m in Sources */, 4705E0031C037AB5002466FA /* IOKitSleepPreventer.m in Sources */, 473A8DD7287424CA00CD2E12 /* WorkspaceSchemeHandlerProxy.m in Sources */, diff --git a/core/src/main/objc/AutofillDisabledSecureTextField.h b/core/src/main/objc/AutofillDisabledSecureTextField.h new file mode 100644 index 00000000000..71538951f6c --- /dev/null +++ b/core/src/main/objc/AutofillDisabledSecureTextField.h @@ -0,0 +1,17 @@ +// Copyright (c) 2002-2023 iterate GmbH. All rights reserved. +// https://cyberduck.io +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +#import + +@interface AutofillDisabledSecureTextField : NSSecureTextField +@end diff --git a/core/src/main/objc/AutofillDisabledSecureTextField.m b/core/src/main/objc/AutofillDisabledSecureTextField.m new file mode 100644 index 00000000000..fbae4c2f9cd --- /dev/null +++ b/core/src/main/objc/AutofillDisabledSecureTextField.m @@ -0,0 +1,20 @@ +// Copyright (c) 2002-2023 iterate GmbH. All rights reserved. +// https://cyberduck.io +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +#import "AutofillDisabledSecureTextField.h" + +@implementation AutofillDisabledSecureTextField +- (BOOL)_isPasswordAutofillEnabled { + return NO; +} +@end \ No newline at end of file diff --git a/i18n/src/main/resources/ar.lproj/Bookmark.xib b/i18n/src/main/resources/ar.lproj/Bookmark.xib index 7550075e835..60aec33536f 100644 --- a/i18n/src/main/resources/ar.lproj/Bookmark.xib +++ b/i18n/src/main/resources/ar.lproj/Bookmark.xib @@ -1,7 +1,7 @@ - + - + @@ -137,7 +137,7 @@ - + @@ -389,11 +389,11 @@ - - + @@ -204,7 +204,7 @@ Gw - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -