From 707802c45929f47ae1480eaa1296acd2d5ac01bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= Date: Thu, 6 Jan 2022 11:04:18 +0100 Subject: [PATCH] Add feature flags for private groups, forums and blogs --- .../bramble/api/FeatureFlags.java | 6 ++++ .../bramble/test/TestFeatureFlagModule.java | 15 ++++++++++ .../briarproject/briar/android/AppModule.java | 15 ++++++++++ .../briarproject/briar/blog/BlogModule.java | 14 ++++++--- .../briarproject/briar/feed/FeedModule.java | 6 +++- .../briarproject/briar/forum/ForumModule.java | 16 +++++++--- .../privategroup/PrivateGroupModule.java | 15 +++++++--- .../invitation/GroupInvitationModule.java | 15 +++++++--- .../briar/sharing/SharingModule.java | 30 +++++++++++++------ .../briar/headless/HeadlessModule.kt | 3 ++ 10 files changed, 109 insertions(+), 26 deletions(-) diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/FeatureFlags.java b/bramble-api/src/main/java/org/briarproject/bramble/api/FeatureFlags.java index f0acbd8e1..df093059d 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/FeatureFlags.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/FeatureFlags.java @@ -10,4 +10,10 @@ public interface FeatureFlags { boolean shouldEnableProfilePictures(); boolean shouldEnableDisappearingMessages(); + + boolean shouldEnablePrivateGroupsInCore(); + + boolean shouldEnableForumsInCore(); + + boolean shouldEnableBlogsInCore(); } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/test/TestFeatureFlagModule.java b/bramble-core/src/test/java/org/briarproject/bramble/test/TestFeatureFlagModule.java index 77f485e9b..6e867ffbe 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/test/TestFeatureFlagModule.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/test/TestFeatureFlagModule.java @@ -24,6 +24,21 @@ public class TestFeatureFlagModule { public boolean shouldEnableDisappearingMessages() { return true; } + + @Override + public boolean shouldEnablePrivateGroupsInCore() { + return true; + } + + @Override + public boolean shouldEnableForumsInCore() { + return true; + } + + @Override + public boolean shouldEnableBlogsInCore() { + return true; + } }; } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java index d4167576d..9e570d13a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java @@ -339,6 +339,21 @@ public class AppModule { public boolean shouldEnableDisappearingMessages() { return true; } + + @Override + public boolean shouldEnablePrivateGroupsInCore() { + return true; + } + + @Override + public boolean shouldEnableForumsInCore() { + return true; + } + + @Override + public boolean shouldEnableBlogsInCore() { + return true; + } }; } } diff --git a/briar-core/src/main/java/org/briarproject/briar/blog/BlogModule.java b/briar-core/src/main/java/org/briarproject/briar/blog/BlogModule.java index 081df929d..ca7e48167 100644 --- a/briar-core/src/main/java/org/briarproject/briar/blog/BlogModule.java +++ b/briar-core/src/main/java/org/briarproject/briar/blog/BlogModule.java @@ -1,5 +1,6 @@ package org.briarproject.briar.blog; +import org.briarproject.bramble.api.FeatureFlags; import org.briarproject.bramble.api.client.ClientHelper; import org.briarproject.bramble.api.contact.ContactManager; import org.briarproject.bramble.api.data.MetadataEncoder; @@ -35,7 +36,10 @@ public class BlogModule { @Singleton BlogManager provideBlogManager(BlogManagerImpl blogManager, LifecycleManager lifecycleManager, ContactManager contactManager, - ValidationManager validationManager) { + ValidationManager validationManager, FeatureFlags featureFlags) { + if (!featureFlags.shouldEnableBlogsInCore()) { + return blogManager; + } lifecycleManager.registerOpenDatabaseHook(blogManager); contactManager.registerContactHook(blogManager); validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION, @@ -60,12 +64,14 @@ public class BlogModule { ValidationManager validationManager, GroupFactory groupFactory, MessageFactory messageFactory, BlogFactory blogFactory, ClientHelper clientHelper, MetadataEncoder metadataEncoder, - Clock clock) { + Clock clock, FeatureFlags featureFlags) { BlogPostValidator validator = new BlogPostValidator(groupFactory, messageFactory, blogFactory, clientHelper, metadataEncoder, clock); - validationManager.registerMessageValidator(CLIENT_ID, MAJOR_VERSION, - validator); + if (featureFlags.shouldEnableBlogsInCore()) { + validationManager.registerMessageValidator(CLIENT_ID, MAJOR_VERSION, + validator); + } return validator; } diff --git a/briar-core/src/main/java/org/briarproject/briar/feed/FeedModule.java b/briar-core/src/main/java/org/briarproject/briar/feed/FeedModule.java index 683015199..cbb47e474 100644 --- a/briar-core/src/main/java/org/briarproject/briar/feed/FeedModule.java +++ b/briar-core/src/main/java/org/briarproject/briar/feed/FeedModule.java @@ -1,5 +1,6 @@ package org.briarproject.briar.feed; +import org.briarproject.bramble.api.FeatureFlags; import org.briarproject.bramble.api.event.EventBus; import org.briarproject.bramble.api.lifecycle.LifecycleManager; import org.briarproject.briar.api.blog.BlogManager; @@ -23,7 +24,10 @@ public class FeedModule { @Singleton FeedManager provideFeedManager(FeedManagerImpl feedManager, LifecycleManager lifecycleManager, EventBus eventBus, - BlogManager blogManager) { + BlogManager blogManager, FeatureFlags featureFlags) { + if (!featureFlags.shouldEnableBlogsInCore()) { + return feedManager; + } lifecycleManager.registerOpenDatabaseHook(feedManager); eventBus.addListener(feedManager); blogManager.registerRemoveBlogHook(feedManager); diff --git a/briar-core/src/main/java/org/briarproject/briar/forum/ForumModule.java b/briar-core/src/main/java/org/briarproject/briar/forum/ForumModule.java index ca24f9d33..b9c8f3f9a 100644 --- a/briar-core/src/main/java/org/briarproject/briar/forum/ForumModule.java +++ b/briar-core/src/main/java/org/briarproject/briar/forum/ForumModule.java @@ -1,5 +1,6 @@ package org.briarproject.briar.forum; +import org.briarproject.bramble.api.FeatureFlags; import org.briarproject.bramble.api.client.ClientHelper; import org.briarproject.bramble.api.data.MetadataEncoder; import org.briarproject.bramble.api.sync.validation.ValidationManager; @@ -30,7 +31,11 @@ public class ForumModule { @Provides @Singleton ForumManager provideForumManager(ForumManagerImpl forumManager, - ValidationManager validationManager) { + ValidationManager validationManager, + FeatureFlags featureFlags) { + if (!featureFlags.shouldEnableForumsInCore()) { + return forumManager; + } validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION, forumManager); return forumManager; @@ -51,11 +56,14 @@ public class ForumModule { @Singleton ForumPostValidator provideForumPostValidator( ValidationManager validationManager, ClientHelper clientHelper, - MetadataEncoder metadataEncoder, Clock clock) { + MetadataEncoder metadataEncoder, Clock clock, + FeatureFlags featureFlags) { ForumPostValidator validator = new ForumPostValidator(clientHelper, metadataEncoder, clock); - validationManager.registerMessageValidator(CLIENT_ID, MAJOR_VERSION, - validator); + if (featureFlags.shouldEnableForumsInCore()) { + validationManager.registerMessageValidator(CLIENT_ID, MAJOR_VERSION, + validator); + } return validator; } diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/PrivateGroupModule.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/PrivateGroupModule.java index 3b03376c6..50f49e2d3 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/PrivateGroupModule.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/PrivateGroupModule.java @@ -1,5 +1,6 @@ package org.briarproject.briar.privategroup; +import org.briarproject.bramble.api.FeatureFlags; import org.briarproject.bramble.api.client.ClientHelper; import org.briarproject.bramble.api.data.MetadataEncoder; import org.briarproject.bramble.api.sync.validation.ValidationManager; @@ -32,7 +33,11 @@ public class PrivateGroupModule { @Singleton PrivateGroupManager provideGroupManager( PrivateGroupManagerImpl groupManager, - ValidationManager validationManager) { + ValidationManager validationManager, + FeatureFlags featureFlags) { + if (!featureFlags.shouldEnablePrivateGroupsInCore()) { + return groupManager; + } validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION, groupManager); return groupManager; @@ -56,12 +61,14 @@ public class PrivateGroupModule { PrivateGroupFactory privateGroupFactory, ClientHelper clientHelper, MetadataEncoder metadataEncoder, Clock clock, GroupInvitationFactory groupInvitationFactory, - ValidationManager validationManager) { + ValidationManager validationManager, FeatureFlags featureFlags) { GroupMessageValidator validator = new GroupMessageValidator( privateGroupFactory, clientHelper, metadataEncoder, clock, groupInvitationFactory); - validationManager.registerMessageValidator(CLIENT_ID, MAJOR_VERSION, - validator); + if (featureFlags.shouldEnablePrivateGroupsInCore()) { + validationManager.registerMessageValidator(CLIENT_ID, MAJOR_VERSION, + validator); + } return validator; } diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationModule.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationModule.java index fa0b09019..bc8ae66ef 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationModule.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationModule.java @@ -1,5 +1,6 @@ package org.briarproject.briar.privategroup.invitation; +import org.briarproject.bramble.api.FeatureFlags; import org.briarproject.bramble.api.cleanup.CleanupManager; import org.briarproject.bramble.api.client.ClientHelper; import org.briarproject.bramble.api.contact.ContactManager; @@ -43,7 +44,10 @@ public class GroupInvitationModule { PrivateGroupManager privateGroupManager, ConversationManager conversationManager, ClientVersioningManager clientVersioningManager, - CleanupManager cleanupManager) { + CleanupManager cleanupManager, FeatureFlags featureFlags) { + if (!featureFlags.shouldEnablePrivateGroupsInCore()) { + return groupInvitationManager; + } lifecycleManager.registerOpenDatabaseHook(groupInvitationManager); validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION, groupInvitationManager); @@ -69,12 +73,15 @@ public class GroupInvitationModule { ClientHelper clientHelper, MetadataEncoder metadataEncoder, Clock clock, PrivateGroupFactory privateGroupFactory, MessageEncoder messageEncoder, - ValidationManager validationManager) { + ValidationManager validationManager, + FeatureFlags featureFlags) { GroupInvitationValidator validator = new GroupInvitationValidator( clientHelper, metadataEncoder, clock, privateGroupFactory, messageEncoder); - validationManager.registerMessageValidator(CLIENT_ID, MAJOR_VERSION, - validator); + if (featureFlags.shouldEnablePrivateGroupsInCore()) { + validationManager.registerMessageValidator(CLIENT_ID, MAJOR_VERSION, + validator); + } return validator; } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingModule.java b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingModule.java index 96f6faed1..e38c5047c 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingModule.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingModule.java @@ -1,5 +1,6 @@ package org.briarproject.briar.sharing; +import org.briarproject.bramble.api.FeatureFlags; import org.briarproject.bramble.api.cleanup.CleanupManager; import org.briarproject.bramble.api.client.ClientHelper; import org.briarproject.bramble.api.contact.ContactManager; @@ -60,12 +61,15 @@ public class SharingModule { BlogSharingValidator provideBlogSharingValidator( ValidationManager validationManager, MessageEncoder messageEncoder, ClientHelper clientHelper, MetadataEncoder metadataEncoder, - Clock clock, BlogFactory blogFactory) { + Clock clock, BlogFactory blogFactory, FeatureFlags featureFlags) { BlogSharingValidator validator = new BlogSharingValidator( messageEncoder, clientHelper, metadataEncoder, clock, blogFactory); - validationManager.registerMessageValidator(BlogSharingManager.CLIENT_ID, - BlogSharingManager.MAJOR_VERSION, validator); + if (featureFlags.shouldEnableBlogsInCore()) { + validationManager.registerMessageValidator( + BlogSharingManager.CLIENT_ID, + BlogSharingManager.MAJOR_VERSION, validator); + } return validator; } @@ -77,7 +81,10 @@ public class SharingModule { ConversationManager conversationManager, BlogManager blogManager, ClientVersioningManager clientVersioningManager, BlogSharingManagerImpl blogSharingManager, - CleanupManager cleanupManager) { + CleanupManager cleanupManager, FeatureFlags featureFlags) { + if (!featureFlags.shouldEnableBlogsInCore()) { + return blogSharingManager; + } lifecycleManager.registerOpenDatabaseHook(blogSharingManager); contactManager.registerContactHook(blogSharingManager); validationManager.registerIncomingMessageHook( @@ -122,13 +129,15 @@ public class SharingModule { ForumSharingValidator provideForumSharingValidator( ValidationManager validationManager, MessageEncoder messageEncoder, ClientHelper clientHelper, MetadataEncoder metadataEncoder, - Clock clock, ForumFactory forumFactory) { + Clock clock, ForumFactory forumFactory, FeatureFlags featureFlags) { ForumSharingValidator validator = new ForumSharingValidator( messageEncoder, clientHelper, metadataEncoder, clock, forumFactory); - validationManager.registerMessageValidator( - ForumSharingManager.CLIENT_ID, - ForumSharingManager.MAJOR_VERSION, validator); + if (featureFlags.shouldEnableForumsInCore()) { + validationManager.registerMessageValidator( + ForumSharingManager.CLIENT_ID, + ForumSharingManager.MAJOR_VERSION, validator); + } return validator; } @@ -140,7 +149,10 @@ public class SharingModule { ConversationManager conversationManager, ForumManager forumManager, ClientVersioningManager clientVersioningManager, ForumSharingManagerImpl forumSharingManager, - CleanupManager cleanupManager) { + CleanupManager cleanupManager, FeatureFlags featureFlags) { + if (!featureFlags.shouldEnableForumsInCore()) { + return forumSharingManager; + } lifecycleManager.registerOpenDatabaseHook(forumSharingManager); contactManager.registerContactHook(forumSharingManager); validationManager.registerIncomingMessageHook( diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/HeadlessModule.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/HeadlessModule.kt index ac7879906..bc08ed798 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/HeadlessModule.kt +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/HeadlessModule.kt @@ -107,5 +107,8 @@ internal class HeadlessModule(private val appDir: File) { override fun shouldEnableImageAttachments() = false override fun shouldEnableProfilePictures() = false override fun shouldEnableDisappearingMessages() = false + override fun shouldEnablePrivateGroupsInCore() = false + override fun shouldEnableForumsInCore() = true + override fun shouldEnableBlogsInCore() = true } }