remove support for clearsigned messages in PgpMessageBuilder

This commit is contained in:
Vincent Breitmoser 2016-11-14 18:56:26 +01:00
parent 0378f1a812
commit ef3cda97e2
2 changed files with 10 additions and 27 deletions

View file

@ -39,8 +39,8 @@ import org.openintents.openpgp.util.OpenPgpApi.OpenPgpDataSource;
public class PgpMessageBuilder extends MessageBuilder {
private static final int REQUEST_USER_INTERACTION = 1;
public static final int REQUEST_USER_INTERACTION = 1;
private OpenPgpApi openPgpApi;
@ -115,12 +115,16 @@ public class PgpMessageBuilder extends MessageBuilder {
throw new MessagingException("Attachments are not supported in PGP/INLINE format!");
}
if (isPgpInlineMode && shouldSign && !shouldEncrypt) {
throw new UnsupportedOperationException("Clearsigning is not supported!");
}
if (pgpApiIntent == null) {
pgpApiIntent = buildOpenPgpApiIntent(shouldSign, shouldEncrypt, isPgpInlineMode);
}
PendingIntent returnedPendingIntent = launchOpenPgpApiIntent(
pgpApiIntent, shouldEncrypt || isPgpInlineMode, shouldEncrypt || !isPgpInlineMode, isPgpInlineMode);
pgpApiIntent, shouldEncrypt, isPgpInlineMode);
if (returnedPendingIntent != null) {
queueMessageBuildPendingIntent(returnedPendingIntent, REQUEST_USER_INTERACTION);
return;
@ -170,7 +174,7 @@ public class PgpMessageBuilder extends MessageBuilder {
}
private PendingIntent launchOpenPgpApiIntent(@NonNull Intent openPgpIntent,
boolean captureOutputPart, boolean capturedOutputPartIs7Bit, boolean writeBodyContentOnly) throws MessagingException {
boolean captureOutputPart, boolean writeBodyContentOnly) throws MessagingException {
final MimeBodyPart bodyPart = currentProcessedMimeMessage.toBodyPart();
String[] contentType = currentProcessedMimeMessage.getHeader(MimeHeader.HEADER_CONTENT_TYPE);
if (contentType.length > 0) {
@ -183,8 +187,7 @@ public class PgpMessageBuilder extends MessageBuilder {
OutputStream outputStream = null;
if (captureOutputPart) {
try {
pgpResultTempBody = new BinaryTempFileBody(
capturedOutputPartIs7Bit ? MimeUtil.ENC_7BIT : MimeUtil.ENC_8BIT);
pgpResultTempBody = new BinaryTempFileBody(MimeUtil.ENC_7BIT);
outputStream = pgpResultTempBody.getOutputStream();
// OpenKeychain/BouncyCastle at this point use the system newline for formatting, which is LF on android.
// we need this to be CRLF, so we convert the data after receiving.

View file

@ -343,8 +343,8 @@ public class PgpMessageBuilderTest {
Assert.assertEquals(MimeUtil.ENC_7BIT, ((BinaryTempFileBody) message.getBody()).getEncoding());
}
@Test
public void buildSign__withInlineEnabled__shouldSucceed() throws MessagingException {
@Test(expected = RuntimeException.class) // this is a wrapped UnsupportedOperationException from AsyncTask
public void buildSign__withInlineEnabled__shouldFail() throws MessagingException {
ComposeCryptoStatus cryptoStatus = cryptoStatusBuilder
.setCryptoMode(CryptoMode.SIGN_ONLY)
.setRecipients(Collections.singletonList(new Recipient("test", "test@example.org", "labru", -1, "key")))
@ -352,28 +352,8 @@ public class PgpMessageBuilderTest {
.build();
pgpMessageBuilder.setCryptoStatus(cryptoStatus);
ArgumentCaptor<Intent> capturedApiIntent = ArgumentCaptor.forClass(Intent.class);
Intent returnIntent = new Intent();
returnIntent.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_SUCCESS);
when(openPgpApi.executeApi(capturedApiIntent.capture(), any(OpenPgpDataSource.class), any(OutputStream.class)))
.thenReturn(returnIntent);
Callback mockCallback = mock(Callback.class);
pgpMessageBuilder.buildAsync(mockCallback);
Intent expectedApiIntent = new Intent(OpenPgpApi.ACTION_SIGN);
expectedApiIntent.putExtra(OpenPgpApi.EXTRA_SIGN_KEY_ID, TEST_SIGN_KEY_ID);
expectedApiIntent.putExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true);
assertIntentEqualsActionAndExtras(expectedApiIntent, capturedApiIntent.getValue());
ArgumentCaptor<MimeMessage> captor = ArgumentCaptor.forClass(MimeMessage.class);
verify(mockCallback).onMessageBuildSuccess(captor.capture(), eq(false));
verifyNoMoreInteractions(mockCallback);
MimeMessage message = captor.getValue();
Assert.assertEquals("message must be text/plain", "text/plain", message.getMimeType());
}
@Test