@Override
public Path mkdir(final Path folder, final String region, final TransferStatus status) throws BackgroundException {
final String directoryId = random.random();
final Path encrypt = vault.encrypt(session, folder, directoryId, false);
final Path directoryMetadataFile = vault.encrypt(session, folder, true);
if(log.isDebugEnabled()) {
log.debug(String.format("Write metadata %s for folder %s", directoryMetadataFile, folder));
}
new ContentWriter(session).write(directoryMetadataFile, directoryId.getBytes(Charset.forName("UTF-8")));
final Path intermediate = encrypt.getParent();
if(!session._getFeature(Find.class).find(intermediate)) {
session._getFeature(Directory.class).mkdir(intermediate, region, new TransferStatus());
}
final Cryptor cryptor = vault.getCryptor();
final FileHeader header = cryptor.fileHeaderCryptor().create();
status.setHeader(cryptor.fileHeaderCryptor().encryptHeader(header));
status.setNonces(new RandomNonceGenerator());
final Path target = proxy.mkdir(encrypt, region, status);
target.attributes().setDirectoryId(directoryId);
target.attributes().setDecrypted(encrypt.attributes().getDecrypted());
final Path decrypt = vault.decrypt(session, vault.encrypt(session, target, true));
decrypt.attributes().setVersionId(target.attributes().getVersionId());
return decrypt;
}