Turn AttachmentReader into a proper class

and inject it where needed
This commit is contained in:
Torsten Grote
2020-11-26 11:20:05 -03:00
parent 5aa041f9e1
commit fe7121b4ec
31 changed files with 166 additions and 135 deletions

View File

@@ -8,6 +8,7 @@ import org.briarproject.briar.feed.FeedModule;
import org.briarproject.briar.forum.ForumModule;
import org.briarproject.briar.identity.IdentityModule;
import org.briarproject.briar.introduction.IntroductionModule;
import org.briarproject.briar.media.MediaModule;
import org.briarproject.briar.messaging.MessagingModule;
import org.briarproject.briar.privategroup.PrivateGroupModule;
import org.briarproject.briar.privategroup.invitation.GroupInvitationModule;
@@ -26,6 +27,7 @@ import dagger.Module;
GroupInvitationModule.class,
IdentityModule.class,
IntroductionModule.class,
MediaModule.class,
MessagingModule.class,
PrivateGroupModule.class,
SharingModule.class,

View File

@@ -30,10 +30,8 @@ import org.briarproject.bramble.api.versioning.ClientVersioningManager;
import org.briarproject.bramble.api.versioning.ClientVersioningManager.ClientVersioningHook;
import org.briarproject.briar.api.avatar.AvatarManager;
import org.briarproject.briar.api.avatar.event.AvatarUpdatedEvent;
import org.briarproject.briar.api.media.Attachment;
import org.briarproject.briar.api.media.AttachmentHeader;
import org.briarproject.briar.api.media.FileTooBigException;
import org.briarproject.briar.media.AttachmentReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -49,8 +47,8 @@ import static org.briarproject.bramble.util.IoUtils.copyAndClose;
import static org.briarproject.briar.avatar.AvatarConstants.GROUP_KEY_CONTACT_ID;
import static org.briarproject.briar.avatar.AvatarConstants.MSG_KEY_VERSION;
import static org.briarproject.briar.avatar.AvatarConstants.MSG_TYPE_UPDATE;
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
@Immutable
@NotNullByDefault
@@ -249,11 +247,6 @@ class AvatarManagerImpl implements AvatarManager, OpenDatabaseHook, ContactHook,
return new AttachmentHeader(latest.messageId, latest.contentType);
}
@Override
public Attachment getAvatar(AttachmentHeader h) throws DbException {
return AttachmentReader.getAttachment(clientHelper, h);
}
@Nullable
private LatestUpdate findLatest(Transaction txn, GroupId g)
throws DbException, FormatException {

View File

@@ -26,11 +26,11 @@ import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_BODY_L
import static org.briarproject.bramble.api.transport.TransportConstants.MAX_CLOCK_DIFFERENCE;
import static org.briarproject.bramble.util.ValidationUtils.checkLength;
import static org.briarproject.bramble.util.ValidationUtils.checkSize;
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_CONTENT_TYPE_BYTES;
import static org.briarproject.briar.api.media.MediaConstants.MAX_CONTENT_TYPE_BYTES;
import static org.briarproject.briar.avatar.AvatarConstants.MSG_KEY_VERSION;
import static org.briarproject.briar.avatar.AvatarConstants.MSG_TYPE_UPDATE;
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
@Immutable
@NotNullByDefault

View File

@@ -7,18 +7,28 @@ import org.briarproject.bramble.api.db.DbException;
import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.briar.api.media.Attachment;
import org.briarproject.briar.api.media.AttachmentHeader;
import org.briarproject.briar.api.media.AttachmentReader;
import org.briarproject.briar.api.media.InvalidAttachmentException;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
import javax.inject.Inject;
public class AttachmentReader {
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
public static Attachment getAttachment(ClientHelper clientHelper,
AttachmentHeader h) throws DbException {
public class AttachmentReaderImpl implements AttachmentReader {
private final ClientHelper clientHelper;
@Inject
public AttachmentReaderImpl(ClientHelper clientHelper) {
this.clientHelper = clientHelper;
}
@Override
public Attachment getAttachment(AttachmentHeader h) throws DbException {
// TODO: Support large messages
MessageId m = h.getMessageId();
byte[] body = clientHelper.getMessage(m).getBody();
@@ -27,17 +37,12 @@ public class AttachmentReader {
String contentType = meta.getString(MSG_KEY_CONTENT_TYPE);
if (!contentType.equals(h.getContentType()))
throw new InvalidAttachmentException();
int offset;
try {
offset = meta.getLong(MSG_KEY_DESCRIPTOR_LENGTH).intValue();
} catch (FormatException e) {
throw new InvalidAttachmentException();
}
int offset = meta.getLong(MSG_KEY_DESCRIPTOR_LENGTH).intValue();
InputStream stream = new ByteArrayInputStream(body, offset,
body.length - offset);
return new Attachment(h, stream);
} catch (FormatException e) {
throw new DbException(e);
throw new InvalidAttachmentException(e);
}
}

View File

@@ -1,8 +0,0 @@
package org.briarproject.briar.media;
public interface MediaConstants {
// Metadata keys for messages
String MSG_KEY_CONTENT_TYPE = "contentType";
String MSG_KEY_DESCRIPTOR_LENGTH = "descriptorLength";
}

View File

@@ -0,0 +1,20 @@
package org.briarproject.briar.media;
import org.briarproject.briar.api.media.AttachmentReader;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
@Module
public class MediaModule {
@Provides
@Singleton
AttachmentReader provideAttachmentReader(
AttachmentReaderImpl attachmentReader) {
return attachmentReader;
}
}

View File

@@ -32,7 +32,6 @@ import org.briarproject.briar.api.client.MessageTracker.GroupCount;
import org.briarproject.briar.api.conversation.ConversationManager.ConversationClient;
import org.briarproject.briar.api.conversation.ConversationMessageHeader;
import org.briarproject.briar.api.conversation.DeletionResult;
import org.briarproject.briar.api.media.Attachment;
import org.briarproject.briar.api.media.AttachmentHeader;
import org.briarproject.briar.api.media.FileTooBigException;
import org.briarproject.briar.api.messaging.MessagingManager;
@@ -40,7 +39,6 @@ import org.briarproject.briar.api.messaging.PrivateMessage;
import org.briarproject.briar.api.messaging.PrivateMessageHeader;
import org.briarproject.briar.api.messaging.event.AttachmentReceivedEvent;
import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent;
import org.briarproject.briar.media.AttachmentReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -60,8 +58,8 @@ import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_BODY_L
import static org.briarproject.bramble.api.sync.validation.MessageState.DELIVERED;
import static org.briarproject.bramble.util.IoUtils.copyAndClose;
import static org.briarproject.briar.client.MessageTrackerConstants.MSG_KEY_READ;
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
import static org.briarproject.briar.messaging.MessageTypes.ATTACHMENT;
import static org.briarproject.briar.messaging.MessageTypes.PRIVATE_MESSAGE;
import static org.briarproject.briar.messaging.MessagingConstants.GROUP_KEY_CONTACT_ID;
@@ -399,11 +397,6 @@ class MessagingManagerImpl implements MessagingManager, IncomingMessageHook,
}
}
@Override
public Attachment getAttachment(AttachmentHeader h) throws DbException {
return AttachmentReader.getAttachment(clientHelper, h);
}
@Override
public boolean contactSupportsImages(Transaction txn, ContactId c)
throws DbException {

View File

@@ -29,11 +29,11 @@ import static org.briarproject.bramble.api.transport.TransportConstants.MAX_CLOC
import static org.briarproject.bramble.util.ValidationUtils.checkLength;
import static org.briarproject.bramble.util.ValidationUtils.checkSize;
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_ATTACHMENTS_PER_MESSAGE;
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_CONTENT_TYPE_BYTES;
import static org.briarproject.briar.api.media.MediaConstants.MAX_CONTENT_TYPE_BYTES;
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_TEXT_LENGTH;
import static org.briarproject.briar.client.MessageTrackerConstants.MSG_KEY_READ;
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
import static org.briarproject.briar.messaging.MessageTypes.ATTACHMENT;
import static org.briarproject.briar.messaging.MessageTypes.PRIVATE_MESSAGE;
import static org.briarproject.briar.messaging.MessagingConstants.MSG_KEY_ATTACHMENT_HEADERS;

View File

@@ -53,12 +53,12 @@ import static org.briarproject.bramble.test.TestUtils.getRandomId;
import static org.briarproject.bramble.util.StringUtils.getRandomString;
import static org.briarproject.briar.api.avatar.AvatarManager.CLIENT_ID;
import static org.briarproject.briar.api.avatar.AvatarManager.MAJOR_VERSION;
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_CONTENT_TYPE_BYTES;
import static org.briarproject.briar.api.media.MediaConstants.MAX_CONTENT_TYPE_BYTES;
import static org.briarproject.briar.avatar.AvatarConstants.GROUP_KEY_CONTACT_ID;
import static org.briarproject.briar.avatar.AvatarConstants.MSG_KEY_VERSION;
import static org.briarproject.briar.avatar.AvatarConstants.MSG_TYPE_UPDATE;
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;

View File

@@ -4,6 +4,7 @@ import org.briarproject.bramble.test.TestDatabaseConfigModule;
import org.briarproject.briar.api.avatar.AvatarManager;
import org.briarproject.briar.api.media.Attachment;
import org.briarproject.briar.api.media.AttachmentHeader;
import org.briarproject.briar.api.media.AttachmentReader;
import org.briarproject.briar.test.BriarIntegrationTest;
import org.briarproject.briar.test.BriarIntegrationTestComponent;
import org.briarproject.briar.test.DaggerBriarIntegrationTestComponent;
@@ -17,7 +18,7 @@ import java.io.InputStream;
import static org.briarproject.bramble.test.TestUtils.getRandomBytes;
import static org.briarproject.bramble.util.IoUtils.copyAndClose;
import static org.briarproject.bramble.util.StringUtils.getRandomString;
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_CONTENT_TYPE_BYTES;
import static org.briarproject.briar.api.media.MediaConstants.MAX_CONTENT_TYPE_BYTES;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@@ -27,6 +28,7 @@ public class AvatarManagerIntegrationTest
extends BriarIntegrationTest<BriarIntegrationTestComponent> {
private AvatarManager avatarManager0, avatarManager1;
private AttachmentReader attachmentReader0, attachmentReader1;
private final String contentType = getRandomString(MAX_CONTENT_TYPE_BYTES);
@@ -36,6 +38,8 @@ public class AvatarManagerIntegrationTest
super.setUp();
avatarManager0 = c0.getAvatarManager();
avatarManager1 = c1.getAvatarManager();
attachmentReader0 = c0.getAttachmentReader();
attachmentReader1 = c1.getAttachmentReader();
}
@Override
@@ -90,7 +94,7 @@ public class AvatarManagerIntegrationTest
assertNotNull(header0.getMessageId());
// 0 can retrieve their own avatar
Attachment attachment0 = avatarManager0.getAvatar(header0);
Attachment attachment0 = attachmentReader0.getAttachment(header0);
assertEquals(contentType, attachment0.getHeader().getContentType());
assertStreamMatches(avatar0bytes, attachment0.getStream());
@@ -105,7 +109,8 @@ public class AvatarManagerIntegrationTest
assertNotNull(header0From1.getMessageId());
// 1 can retrieve 0's avatar
Attachment attachment0From1 = avatarManager1.getAvatar(header0From1);
Attachment attachment0From1 =
attachmentReader1.getAttachment(header0From1);
assertEquals(contentType,
attachment0From1.getHeader().getContentType());
assertStreamMatches(avatar0bytes, attachment0From1.getStream());
@@ -127,7 +132,8 @@ public class AvatarManagerIntegrationTest
assertNotNull(header1From0.getMessageId());
// 0 can retrieve 1's avatar
Attachment attachment1From0 = avatarManager0.getAvatar(header1From0);
Attachment attachment1From0 =
attachmentReader0.getAttachment(header1From0);
assertEquals(contentType1,
attachment1From0.getHeader().getContentType());
assertStreamMatches(avatar1bytes, attachment1From0.getStream());
@@ -144,7 +150,7 @@ public class AvatarManagerIntegrationTest
AttachmentHeader header0 = db0.transactionWithResult(true,
txn -> avatarManager0.getMyAvatarHeader(txn));
assertNotNull(header0);
Attachment attachment0 = avatarManager0.getAvatar(header0);
Attachment attachment0 = attachmentReader0.getAttachment(header0);
assertStreamMatches(avatar0bytes, attachment0.getStream());
// send the avatar from 0 to 1
@@ -154,7 +160,8 @@ public class AvatarManagerIntegrationTest
AttachmentHeader header0From1 = db1.transactionWithNullableResult(true,
txn -> avatarManager1.getAvatarHeader(txn, contact0From1));
assertNotNull(header0From1);
Attachment attachment0From1 = avatarManager1.getAvatar(header0From1);
Attachment attachment0From1 =
attachmentReader1.getAttachment(header0From1);
assertStreamMatches(avatar0bytes, attachment0From1.getStream());
// 0 adds a new avatar
@@ -167,7 +174,7 @@ public class AvatarManagerIntegrationTest
header0 = db0.transactionWithResult(true,
txn -> avatarManager0.getMyAvatarHeader(txn));
assertNotNull(header0);
attachment0 = avatarManager0.getAvatar(header0);
attachment0 = attachmentReader0.getAttachment(header0);
assertStreamMatches(avatar0bytes2, attachment0.getStream());
// send the new avatar from 0 to 1
@@ -177,7 +184,7 @@ public class AvatarManagerIntegrationTest
header0From1 = db1.transactionWithNullableResult(true,
txn -> avatarManager1.getAvatarHeader(txn, contact0From1));
assertNotNull(header0From1);
attachment0From1 = avatarManager1.getAvatar(header0From1);
attachment0From1 = attachmentReader1.getAttachment(header0From1);
assertStreamMatches(avatar0bytes2, attachment0From1.getStream());
}

View File

@@ -23,11 +23,11 @@ import static org.briarproject.bramble.test.TestUtils.getClientId;
import static org.briarproject.bramble.test.TestUtils.getGroup;
import static org.briarproject.bramble.test.TestUtils.getMessage;
import static org.briarproject.bramble.util.StringUtils.getRandomString;
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_CONTENT_TYPE_BYTES;
import static org.briarproject.briar.api.media.MediaConstants.MAX_CONTENT_TYPE_BYTES;
import static org.briarproject.briar.avatar.AvatarConstants.MSG_KEY_VERSION;
import static org.briarproject.briar.avatar.AvatarConstants.MSG_TYPE_UPDATE;
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
import static org.junit.Assert.assertEquals;
public class AvatarValidatorTest extends BrambleMockTestCase {

View File

@@ -30,7 +30,7 @@ import static org.briarproject.briar.api.identity.AuthorInfo.Status.OURSELVES;
import static org.briarproject.briar.api.identity.AuthorInfo.Status.UNKNOWN;
import static org.briarproject.briar.api.identity.AuthorInfo.Status.UNVERIFIED;
import static org.briarproject.briar.api.identity.AuthorInfo.Status.VERIFIED;
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_CONTENT_TYPE_BYTES;
import static org.briarproject.briar.api.media.MediaConstants.MAX_CONTENT_TYPE_BYTES;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;

View File

@@ -7,6 +7,7 @@ import org.briarproject.briar.blog.BlogModule;
import org.briarproject.briar.client.BriarClientModule;
import org.briarproject.briar.forum.ForumModule;
import org.briarproject.briar.identity.IdentityModule;
import org.briarproject.briar.media.MediaModule;
import org.briarproject.briar.messaging.MessagingModule;
import org.briarproject.briar.privategroup.PrivateGroupModule;
import org.briarproject.briar.privategroup.invitation.GroupInvitationModule;
@@ -28,6 +29,7 @@ import dagger.Component;
GroupInvitationModule.class,
IdentityModule.class,
IntroductionModule.class,
MediaModule.class,
MessagingModule.class,
PrivateGroupModule.class,
SharingModule.class

View File

@@ -26,7 +26,7 @@ import static org.briarproject.bramble.test.TestUtils.getRandomId;
import static org.briarproject.bramble.util.StringUtils.getRandomString;
import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_POST_TEXT_LENGTH;
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_ATTACHMENTS_PER_MESSAGE;
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_CONTENT_TYPE_BYTES;
import static org.briarproject.briar.api.media.MediaConstants.MAX_CONTENT_TYPE_BYTES;
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_TEXT_LENGTH;
import static org.junit.Assert.assertTrue;

View File

@@ -28,11 +28,11 @@ import static org.briarproject.bramble.test.TestUtils.getRandomBytes;
import static org.briarproject.bramble.test.TestUtils.getRandomId;
import static org.briarproject.bramble.util.StringUtils.getRandomString;
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_ATTACHMENTS_PER_MESSAGE;
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_CONTENT_TYPE_BYTES;
import static org.briarproject.briar.api.media.MediaConstants.MAX_CONTENT_TYPE_BYTES;
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_TEXT_LENGTH;
import static org.briarproject.briar.client.MessageTrackerConstants.MSG_KEY_READ;
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
import static org.briarproject.briar.messaging.MessageTypes.ATTACHMENT;
import static org.briarproject.briar.messaging.MessageTypes.PRIVATE_MESSAGE;
import static org.briarproject.briar.messaging.MessagingConstants.MSG_KEY_ATTACHMENT_HEADERS;

View File

@@ -21,6 +21,7 @@ import org.briarproject.briar.api.conversation.ConversationManager;
import org.briarproject.briar.api.forum.ForumManager;
import org.briarproject.briar.api.forum.ForumSharingManager;
import org.briarproject.briar.api.introduction.IntroductionManager;
import org.briarproject.briar.api.media.AttachmentReader;
import org.briarproject.briar.api.messaging.MessagingManager;
import org.briarproject.briar.api.messaging.PrivateMessageFactory;
import org.briarproject.briar.api.privategroup.PrivateGroupManager;
@@ -31,6 +32,7 @@ import org.briarproject.briar.client.BriarClientModule;
import org.briarproject.briar.forum.ForumModule;
import org.briarproject.briar.identity.IdentityModule;
import org.briarproject.briar.introduction.IntroductionModule;
import org.briarproject.briar.media.MediaModule;
import org.briarproject.briar.messaging.MessagingModule;
import org.briarproject.briar.privategroup.PrivateGroupModule;
import org.briarproject.briar.privategroup.invitation.GroupInvitationModule;
@@ -51,6 +53,7 @@ import dagger.Component;
GroupInvitationModule.class,
IdentityModule.class,
IntroductionModule.class,
MediaModule.class,
MessagingModule.class,
PrivateGroupModule.class,
SharingModule.class
@@ -84,6 +87,8 @@ public interface BriarIntegrationTestComponent
IdentityManager getIdentityManager();
AttachmentReader getAttachmentReader();
AvatarManager getAvatarManager();
ClientHelper getClientHelper();