Skip to content

Commit bea26e8

Browse files
committed
Correctly process push messages with identity key conflicts.
1 parent a85dbce commit bea26e8

1 file changed

Lines changed: 29 additions & 5 deletions

File tree

src/org/thoughtcrime/securesms/ReceiveKeyActivity.java

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
import org.thoughtcrime.securesms.database.DatabaseFactory;
3838
import org.thoughtcrime.securesms.database.EncryptingSmsDatabase;
3939
import org.thoughtcrime.securesms.database.IdentityDatabase;
40+
import org.thoughtcrime.securesms.database.PushDatabase;
41+
import org.thoughtcrime.securesms.jobs.PushDecryptJob;
4042
import org.thoughtcrime.securesms.jobs.SmsDecryptJob;
4143
import org.thoughtcrime.securesms.recipients.Recipient;
4244
import org.thoughtcrime.securesms.sms.IncomingIdentityUpdateMessage;
@@ -54,6 +56,7 @@
5456
import org.whispersystems.libaxolotl.protocol.PreKeyWhisperMessage;
5557
import org.whispersystems.libaxolotl.state.IdentityKeyStore;
5658
import org.whispersystems.libaxolotl.util.guava.Optional;
59+
import org.whispersystems.textsecure.api.messages.TextSecureEnvelope;
5760
import org.whispersystems.textsecure.api.messages.TextSecureGroup;
5861

5962
import java.io.IOException;
@@ -211,18 +214,39 @@ protected void onPreExecute() {
211214

212215
@Override
213216
protected Void doInBackground(Void... params) {
214-
IdentityDatabase identityDatabase = DatabaseFactory.getIdentityDatabase(ReceiveKeyActivity.this);
215-
EncryptingSmsDatabase smsDatabase = DatabaseFactory.getEncryptingSmsDatabase(ReceiveKeyActivity.this);
216217
Context context = ReceiveKeyActivity.this;
218+
IdentityDatabase identityDatabase = DatabaseFactory.getIdentityDatabase(context);
219+
EncryptingSmsDatabase smsDatabase = DatabaseFactory.getEncryptingSmsDatabase(context);
220+
PushDatabase pushDatabase = DatabaseFactory.getPushDatabase(context);
217221

218222
identityDatabase.saveIdentity(masterSecret, recipient.getRecipientId(), identityKey);
219223

220224
if (message.isIdentityUpdate()) {
221225
smsDatabase.markAsProcessedKeyExchange(messageId);
222226
} else {
223-
ApplicationContext.getInstance(context)
224-
.getJobManager()
225-
.add(new SmsDecryptJob(context, messageId));
227+
if (getIntent().getBooleanExtra("is_push", false)) {
228+
try {
229+
byte[] body = Base64.decode(message.getMessageBody());
230+
TextSecureEnvelope envelope = new TextSecureEnvelope(3, message.getSender(),
231+
message.getSenderDeviceId(), "",
232+
message.getSentTimestampMillis(),
233+
body);
234+
235+
long pushId = pushDatabase.insert(envelope);
236+
237+
ApplicationContext.getInstance(context)
238+
.getJobManager()
239+
.add(new PushDecryptJob(context, pushId));
240+
241+
smsDatabase.deleteMessage(messageId);
242+
} catch (IOException e) {
243+
throw new AssertionError(e);
244+
}
245+
} else {
246+
ApplicationContext.getInstance(context)
247+
.getJobManager()
248+
.add(new SmsDecryptJob(context, messageId));
249+
}
226250
}
227251

228252
return null;

0 commit comments

Comments
 (0)