Always pass plain text folder name as argument.

This commit is contained in:
David Kocher
2026-02-23 16:19:46 +01:00
parent 91eba903a4
commit 796d72cffe
4 changed files with 8 additions and 18 deletions
@@ -406,6 +406,10 @@ public class CryptoVault implements Vault {
}
public Path encrypt(final Session<?> session, final Path file, final String directoryId, boolean metadata) throws BackgroundException {
if(file.getType().contains(Path.Type.encrypted)) {
log.warn("Skip file {} because it is already marked as an encrypted path", file);
return file;
}
final Path encrypted;
if(file.isFile() || metadata) {
if(file.getType().contains(Path.Type.vault)) {
@@ -416,17 +420,8 @@ public class CryptoVault implements Vault {
log.warn("Skip vault home {} because the root has no metadata file", file);
return file;
}
final Path parent;
final String filename;
if(file.getType().contains(Path.Type.encrypted)) {
final Path decrypted = file.attributes().getDecrypted();
parent = directoryProvider.toEncrypted(session, decrypted.getParent().attributes().getDirectoryId(), decrypted.getParent());
filename = directoryProvider.toEncrypted(session, parent.attributes().getDirectoryId(), decrypted.getName(), decrypted.getType());
}
else {
parent = directoryProvider.toEncrypted(session, file.getParent().attributes().getDirectoryId(), file.getParent());
filename = directoryProvider.toEncrypted(session, parent.attributes().getDirectoryId(), file.getName(), file.getType());
}
final Path parent = directoryProvider.toEncrypted(session, file.getParent().attributes().getDirectoryId(), file.getParent());
final String filename = directoryProvider.toEncrypted(session, parent.attributes().getDirectoryId(), file.getName(), file.getType());
final PathAttributes attributes = new DefaultPathAttributes(file.attributes());
attributes.setDirectoryId(null);
if(!file.isFile() && !metadata) {
@@ -446,10 +441,6 @@ public class CryptoVault implements Vault {
encrypted = new Path(parent, filename, type, attributes);
}
else {
if(file.getType().contains(Path.Type.encrypted)) {
log.warn("Skip file {} because it is already marked as an encrypted path", file);
return file;
}
if(file.getType().contains(Path.Type.vault)) {
return directoryProvider.toEncrypted(session, home.attributes().getDirectoryId(), home);
}
@@ -69,7 +69,7 @@ public class CryptoDirectoryV6Feature<Reply> implements Directory<Reply> {
target.attributes().setDirectoryId(directoryId);
target.attributes().setDecrypted(folder);
// Make reference of encrypted path in attributes of decrypted file point to metadata file
final Path decrypt = vault.decrypt(session, vault.encrypt(session, target, true));
final Path decrypt = vault.decrypt(session, vault.encrypt(session, folder, true));
decrypt.attributes().setFileId(directoryMetadataFile.attributes().getFileId());
decrypt.attributes().setVersionId(directoryMetadataFile.attributes().getVersionId());
return decrypt;
@@ -76,7 +76,7 @@ public class CryptoDirectoryV7Feature<Reply> implements Directory<Reply> {
target.attributes().setDirectoryId(directoryId);
target.attributes().setDecrypted(folder);
// Make reference of encrypted path in attributes of decrypted file point to metadata file
final Path decrypt = vault.decrypt(session, vault.encrypt(session, target, true));
final Path decrypt = vault.decrypt(session, vault.encrypt(session, folder, true));
decrypt.attributes().setFileId(directoryMetadataFolder.attributes().getFileId());
decrypt.attributes().setVersionId(directoryMetadataFolder.attributes().getVersionId());
return decrypt;
@@ -137,7 +137,6 @@ public class CryptoVaultTest {
vault.encrypt(session, vault.encrypt(session, new Path(home, "dir", EnumSet.of(Path.Type.directory)))).attributes().getDirectoryId()
);
assertNull(vault.encrypt(session, new Path(home, "dir", EnumSet.of(Path.Type.directory)), true).attributes().getDirectoryId());
assertNull(vault.encrypt(session, vault.encrypt(session, new Path(home, "dir", EnumSet.of(Path.Type.directory))), true).attributes().getDirectoryId());
assertNotEquals(
vault.encrypt(session, new Path(home, "dir", EnumSet.of(Path.Type.directory))).attributes().getDirectoryId(),
vault.encrypt(session, new Path(home, "dir", EnumSet.of(Path.Type.directory)), true).attributes().getDirectoryId()