Filter message deletes by device

// FREEBIE
This commit is contained in:
Moxie Marlinspike 2015-12-21 12:35:45 -08:00
parent 0be34b1135
commit 7b48f10cc9
4 changed files with 14 additions and 8 deletions

View File

@ -144,7 +144,9 @@ public class MessageController {
throws IOException throws IOException
{ {
try { try {
Optional<OutgoingMessageEntity> message = messagesManager.delete(account.getNumber(), source, timestamp); Optional<OutgoingMessageEntity> message = messagesManager.delete(account.getNumber(),
account.getAuthenticatedDevice().get().getId(),
source, timestamp);
if (message.isPresent() && message.get().getType() != Envelope.Type.RECEIPT_VALUE) { if (message.isPresent() && message.get().getType() != Envelope.Type.RECEIPT_VALUE) {
receiptSender.sendReceipt(account, receiptSender.sendReceipt(account,

View File

@ -50,8 +50,11 @@ public abstract class Messages {
@Bind("destination_device") long destinationDevice); @Bind("destination_device") long destinationDevice);
@Mapper(MessageMapper.class) @Mapper(MessageMapper.class)
@SqlQuery("DELETE FROM messages WHERE " + ID + " IN (SELECT " + ID + " FROM messages WHERE " + DESTINATION + " = :destination AND " + SOURCE + " = :source AND " + TIMESTAMP + " = :timestamp ORDER BY " + ID + " LIMIT 1) RETURNING *") @SqlQuery("DELETE FROM messages WHERE " + ID + " IN (SELECT " + ID + " FROM messages WHERE " + DESTINATION + " = :destination AND " + DESTINATION_DEVICE + " = :destination_device AND " + SOURCE + " = :source AND " + TIMESTAMP + " = :timestamp ORDER BY " + ID + " LIMIT 1) RETURNING *")
abstract OutgoingMessageEntity remove(@Bind("destination") String destination, @Bind("source") String source, @Bind("timestamp") long timestamp); abstract OutgoingMessageEntity remove(@Bind("destination") String destination,
@Bind("destination_device") long destinationDevice,
@Bind("source") String source,
@Bind("timestamp") long timestamp);
@Mapper(MessageMapper.class) @Mapper(MessageMapper.class)
@SqlUpdate("DELETE FROM messages WHERE " + ID + " = :id AND " + DESTINATION + " = :destination") @SqlUpdate("DELETE FROM messages WHERE " + ID + " = :id AND " + DESTINATION + " = :destination")

View File

@ -33,8 +33,9 @@ public class MessagesManager {
this.messages.clear(destination, deviceId); this.messages.clear(destination, deviceId);
} }
public Optional<OutgoingMessageEntity> delete(String destination, String source, long timestamp) { public Optional<OutgoingMessageEntity> delete(String destination, long destinationDevice, String source, long timestamp)
return Optional.fromNullable(this.messages.remove(destination, source, timestamp)); {
return Optional.fromNullable(this.messages.remove(destination, destinationDevice, source, timestamp));
} }
public void delete(String destination, long id) { public void delete(String destination, long id) {

View File

@ -214,20 +214,20 @@ public class MessageControllerTest {
@Test @Test
public synchronized void testDeleteMessages() throws Exception { public synchronized void testDeleteMessages() throws Exception {
long timestamp = System.currentTimeMillis(); long timestamp = System.currentTimeMillis();
when(messagesManager.delete(AuthHelper.VALID_NUMBER, "+14152222222", 31337)) when(messagesManager.delete(AuthHelper.VALID_NUMBER, 1, "+14152222222", 31337))
.thenReturn(Optional.of(new OutgoingMessageEntity(31337L, .thenReturn(Optional.of(new OutgoingMessageEntity(31337L,
Envelope.Type.CIPHERTEXT_VALUE, Envelope.Type.CIPHERTEXT_VALUE,
null, timestamp, null, timestamp,
"+14152222222", 1, "hi".getBytes(), null))); "+14152222222", 1, "hi".getBytes(), null)));
when(messagesManager.delete(AuthHelper.VALID_NUMBER, "+14152222222", 31338)) when(messagesManager.delete(AuthHelper.VALID_NUMBER, 1, "+14152222222", 31338))
.thenReturn(Optional.of(new OutgoingMessageEntity(31337L, .thenReturn(Optional.of(new OutgoingMessageEntity(31337L,
Envelope.Type.RECEIPT_VALUE, Envelope.Type.RECEIPT_VALUE,
null, System.currentTimeMillis(), null, System.currentTimeMillis(),
"+14152222222", 1, null, null))); "+14152222222", 1, null, null)));
when(messagesManager.delete(AuthHelper.VALID_NUMBER, "+14152222222", 31339)) when(messagesManager.delete(AuthHelper.VALID_NUMBER, 1, "+14152222222", 31339))
.thenReturn(Optional.<OutgoingMessageEntity>absent()); .thenReturn(Optional.<OutgoingMessageEntity>absent());
Response response = resources.getJerseyTest() Response response = resources.getJerseyTest()