aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/crypto/PgpDecryptionService.java
diff options
context:
space:
mode:
authorChristian Schneppe <christian@pix-art.de>2018-01-30 20:15:01 +0100
committerChristian Schneppe <christian@pix-art.de>2018-01-30 20:15:01 +0100
commitaf8b48b3400b5eac6ddb22b1efde19b10dac3183 (patch)
tree785d9d36740829f63a3bb6518556de4a95e2f3e9 /src/main/java/de/pixart/messenger/crypto/PgpDecryptionService.java
parent7a67de94628dfe12b8790c333e5c5c19e647caab (diff)
discover file extension in original filename from pgp
Diffstat (limited to 'src/main/java/de/pixart/messenger/crypto/PgpDecryptionService.java')
-rw-r--r--src/main/java/de/pixart/messenger/crypto/PgpDecryptionService.java24
1 files changed, 23 insertions, 1 deletions
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);