From af8b48b3400b5eac6ddb22b1efde19b10dac3183 Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Tue, 30 Jan 2018 20:15:01 +0100 Subject: discover file extension in original filename from pgp --- .../messenger/crypto/PgpDecryptionService.java | 24 +++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src/main/java/de/pixart/messenger/crypto') diff --git a/src/main/java/de/pixart/messenger/crypto/PgpDecryptionService.java b/src/main/java/de/pixart/messenger/crypto/PgpDecryptionService.java index f96e45082..f1c3e277c 100644 --- a/src/main/java/de/pixart/messenger/crypto/PgpDecryptionService.java +++ b/src/main/java/de/pixart/messenger/crypto/PgpDecryptionService.java @@ -2,7 +2,9 @@ package de.pixart.messenger.crypto; import android.app.PendingIntent; import android.content.Intent; +import android.util.Log; +import org.openintents.openpgp.OpenPgpMetadata; import org.openintents.openpgp.util.OpenPgpApi; import java.io.ByteArrayInputStream; @@ -17,11 +19,13 @@ import java.util.ArrayDeque; import java.util.HashSet; import java.util.List; +import de.pixart.messenger.Config; import de.pixart.messenger.entities.Conversation; import de.pixart.messenger.entities.DownloadableFile; import de.pixart.messenger.entities.Message; import de.pixart.messenger.http.HttpConnectionManager; import de.pixart.messenger.services.XmppConnectionService; +import de.pixart.messenger.utils.MimeUtils; public class PgpDecryptionService { @@ -176,13 +180,31 @@ public class PgpDecryptionService { try { final DownloadableFile inputFile = mXmppConnectionService.getFileBackend().getFile(message, false); final DownloadableFile outputFile = mXmppConnectionService.getFileBackend().getFile(message, true); - outputFile.getParentFile().mkdirs(); + if (outputFile.getParentFile().mkdirs()) { + Log.d(Config.LOGTAG, "created parent directories for " + outputFile.getAbsolutePath()); + } outputFile.createNewFile(); InputStream is = new FileInputStream(inputFile); OutputStream os = new FileOutputStream(outputFile); Intent result = getOpenPgpApi().executeApi(params, is, os); switch (result.getIntExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR)) { case OpenPgpApi.RESULT_CODE_SUCCESS: + OpenPgpMetadata openPgpMetadata = result.getParcelableExtra(OpenPgpApi.RESULT_METADATA); + String originalFilename = openPgpMetadata.getFilename(); + String originalExtension = originalFilename == null ? null : MimeUtils.extractRelevantExtension(originalFilename); + if (originalExtension != null && MimeUtils.extractRelevantExtension(outputFile.getName()) == null) { + Log.d(Config.LOGTAG, "detected original filename during pgp decryption"); + String mime = MimeUtils.guessMimeTypeFromExtension(originalExtension); + String path = outputFile.getName() + "." + originalExtension; + DownloadableFile fixedFile = mXmppConnectionService.getFileBackend().getFileForPath(path, mime); + if (fixedFile.getParentFile().mkdirs()) { + Log.d(Config.LOGTAG, "created parent directories for " + fixedFile.getAbsolutePath()); + } + if (outputFile.renameTo(fixedFile)) { + Log.d(Config.LOGTAG, "renamed " + outputFile.getAbsolutePath() + " to " + fixedFile.getAbsolutePath()); + message.setRelativeFilePath(path); + } + } URL url = message.getFileParams().url; mXmppConnectionService.getFileBackend().updateFileParams(message, url); message.setEncryption(Message.ENCRYPTION_DECRYPTED); -- cgit v1.2.3