mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-15 20:29:52 +01:00
Compare commits
22 Commits
alpha-1.4.
...
2248-featu
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e8e07414e7 | ||
|
|
707802c459 | ||
|
|
65be2d2b26 | ||
|
|
d2a39da3e0 | ||
|
|
d13e4c976e | ||
|
|
20b52804bf | ||
|
|
5b27eb354c | ||
|
|
c340071469 | ||
|
|
506e274dff | ||
|
|
423356fdda | ||
|
|
043a173828 | ||
|
|
f0501bbfab | ||
|
|
5cafde7b14 | ||
|
|
5117dbad7e | ||
|
|
3a22388495 | ||
|
|
1d4de46dfd | ||
|
|
d805069dfe | ||
|
|
74cb2a6ce5 | ||
|
|
2880a4adac | ||
|
|
7aa1073bf5 | ||
|
|
d3dbcfd62d | ||
|
|
c4c70f5ac2 |
@@ -22,6 +22,15 @@ our site.
|
|||||||
|
|
||||||
[Wiki](https://code.briarproject.org/briar/briar/-/wikis/home)
|
[Wiki](https://code.briarproject.org/briar/briar/-/wikis/home)
|
||||||
|
|
||||||
|
## Reproducible builds
|
||||||
|
|
||||||
|
We provide [docker images](https://code.briarproject.org/briar/briar-reproducer#briar-reproducer)
|
||||||
|
to ease the task of verifying that the published APK binaries
|
||||||
|
include nothing but our publicly available source code.
|
||||||
|
|
||||||
|
You can either use those images or use them as a blueprint to build your own environment
|
||||||
|
for reproduction.
|
||||||
|
|
||||||
## Donate
|
## Donate
|
||||||
|
|
||||||
[](https://liberapay.com/Briar/donate) [](https://flattr.com/t/592836/)
|
[](https://liberapay.com/Briar/donate) [](https://flattr.com/t/592836/)
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ dependencies {
|
|||||||
testImplementation "junit:junit:$junit_version"
|
testImplementation "junit:junit:$junit_version"
|
||||||
testImplementation "org.jmock:jmock:$jmock_version"
|
testImplementation "org.jmock:jmock:$jmock_version"
|
||||||
testImplementation "org.jmock:jmock-junit4:$jmock_version"
|
testImplementation "org.jmock:jmock-junit4:$jmock_version"
|
||||||
testImplementation "org.jmock:jmock-legacy:$jmock_version"
|
testImplementation "org.jmock:jmock-imposters:$jmock_version"
|
||||||
}
|
}
|
||||||
|
|
||||||
def torBinariesDir = 'src/main/res/raw'
|
def torBinariesDir = 'src/main/res/raw'
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import org.briarproject.bramble.api.db.DatabaseConfig;
|
|||||||
import org.briarproject.bramble.api.identity.IdentityManager;
|
import org.briarproject.bramble.api.identity.IdentityManager;
|
||||||
import org.briarproject.bramble.test.BrambleMockTestCase;
|
import org.briarproject.bramble.test.BrambleMockTestCase;
|
||||||
import org.jmock.Expectations;
|
import org.jmock.Expectations;
|
||||||
import org.jmock.lib.legacy.ClassImposteriser;
|
import org.jmock.imposters.ByteBuddyClassImposteriser;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -44,7 +44,7 @@ public class AndroidAccountManagerTest extends BrambleMockTestCase {
|
|||||||
private AndroidAccountManager accountManager;
|
private AndroidAccountManager accountManager;
|
||||||
|
|
||||||
public AndroidAccountManagerTest() {
|
public AndroidAccountManagerTest() {
|
||||||
context.setImposteriser(ClassImposteriser.INSTANCE);
|
context.setImposteriser(ByteBuddyClassImposteriser.INSTANCE);
|
||||||
app = context.mock(Application.class);
|
app = context.mock(Application.class);
|
||||||
applicationInfo = new ApplicationInfo();
|
applicationInfo = new ApplicationInfo();
|
||||||
applicationInfo.dataDir = testDir.getAbsolutePath();
|
applicationInfo.dataDir = testDir.getAbsolutePath();
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ dependencies {
|
|||||||
testImplementation "junit:junit:$junit_version"
|
testImplementation "junit:junit:$junit_version"
|
||||||
testImplementation "org.jmock:jmock:$jmock_version"
|
testImplementation "org.jmock:jmock:$jmock_version"
|
||||||
testImplementation "org.jmock:jmock-junit4:$jmock_version"
|
testImplementation "org.jmock:jmock-junit4:$jmock_version"
|
||||||
testImplementation "org.jmock:jmock-legacy:$jmock_version"
|
|
||||||
|
|
||||||
signature 'org.codehaus.mojo.signature:java16:1.1@signature'
|
signature 'org.codehaus.mojo.signature:java16:1.1@signature'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,4 +10,12 @@ public interface FeatureFlags {
|
|||||||
boolean shouldEnableProfilePictures();
|
boolean shouldEnableProfilePictures();
|
||||||
|
|
||||||
boolean shouldEnableDisappearingMessages();
|
boolean shouldEnableDisappearingMessages();
|
||||||
|
|
||||||
|
boolean shouldEnableIntroductionsInCore();
|
||||||
|
|
||||||
|
boolean shouldEnablePrivateGroupsInCore();
|
||||||
|
|
||||||
|
boolean shouldEnableForumsInCore();
|
||||||
|
|
||||||
|
boolean shouldEnableBlogsInCore();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package org.briarproject.briar.feed;
|
package org.briarproject.bramble.api;
|
||||||
|
|
||||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
|
|
||||||
@@ -13,7 +13,7 @@ import javax.inject.Provider;
|
|||||||
* collected.
|
* collected.
|
||||||
*/
|
*/
|
||||||
@NotNullByDefault
|
@NotNullByDefault
|
||||||
abstract class WeakSingletonProvider<T> implements Provider<T> {
|
public abstract class WeakSingletonProvider<T> implements Provider<T> {
|
||||||
|
|
||||||
private final Object lock = new Object();
|
private final Object lock = new Object();
|
||||||
@GuardedBy("lock")
|
@GuardedBy("lock")
|
||||||
@@ -31,5 +31,5 @@ abstract class WeakSingletonProvider<T> implements Provider<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract T createInstance();
|
public abstract T createInstance();
|
||||||
}
|
}
|
||||||
@@ -113,6 +113,26 @@ public interface ContactManager {
|
|||||||
*/
|
*/
|
||||||
String getHandshakeLink(Transaction txn) throws DbException;
|
String getHandshakeLink(Transaction txn) throws DbException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a {@link PendingContact} from the given handshake link and
|
||||||
|
* alias, adds it to the database and returns it.
|
||||||
|
*
|
||||||
|
* @param link The handshake link received from the pending contact
|
||||||
|
* @param alias The alias the user has given this pending contact
|
||||||
|
* @throws UnsupportedVersionException If the link uses a format version
|
||||||
|
* that is not supported
|
||||||
|
* @throws FormatException If the link is invalid
|
||||||
|
* @throws GeneralSecurityException If the pending contact's handshake
|
||||||
|
* public key is invalid
|
||||||
|
* @throws ContactExistsException If a contact with the same handshake
|
||||||
|
* public key already exists
|
||||||
|
* @throws PendingContactExistsException If a pending contact with the same
|
||||||
|
* handshake public key already exists
|
||||||
|
*/
|
||||||
|
PendingContact addPendingContact(Transaction txn, String link, String alias)
|
||||||
|
throws DbException, FormatException, GeneralSecurityException,
|
||||||
|
ContactExistsException, PendingContactExistsException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a {@link PendingContact} from the given handshake link and
|
* Creates a {@link PendingContact} from the given handshake link and
|
||||||
* alias, adds it to the database and returns it.
|
* alias, adds it to the database and returns it.
|
||||||
@@ -146,6 +166,13 @@ public interface ContactManager {
|
|||||||
Collection<Pair<PendingContact, PendingContactState>> getPendingContacts()
|
Collection<Pair<PendingContact, PendingContactState>> getPendingContacts()
|
||||||
throws DbException;
|
throws DbException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of {@link PendingContact PendingContacts} and their
|
||||||
|
* {@link PendingContactState states}.
|
||||||
|
*/
|
||||||
|
Collection<Pair<PendingContact, PendingContactState>> getPendingContacts(Transaction txn)
|
||||||
|
throws DbException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes a {@link PendingContact}.
|
* Removes a {@link PendingContact}.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -10,13 +10,17 @@ apply from: '../dagger.gradle'
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation project(path: ':bramble-api', configuration: 'default')
|
implementation project(path: ':bramble-api', configuration: 'default')
|
||||||
implementation 'org.bouncycastle:bcprov-jdk15on:1.69'
|
implementation 'org.bouncycastle:bcprov-jdk15to18:1.70'
|
||||||
|
//noinspection GradleDependency
|
||||||
implementation 'com.h2database:h2:1.4.192' // The last version that supports Java 1.6
|
implementation 'com.h2database:h2:1.4.192' // The last version that supports Java 1.6
|
||||||
implementation 'org.bitlet:weupnp:0.1.4'
|
implementation 'org.bitlet:weupnp:0.1.4'
|
||||||
implementation 'net.i2p.crypto:eddsa:0.2.0'
|
implementation 'net.i2p.crypto:eddsa:0.2.0'
|
||||||
implementation 'org.whispersystems:curve25519-java:0.5.0'
|
implementation 'org.whispersystems:curve25519-java:0.5.0'
|
||||||
implementation 'org.briarproject:jtorctl:0.3'
|
implementation 'org.briarproject:jtorctl:0.3'
|
||||||
|
|
||||||
|
//noinspection GradleDependency
|
||||||
|
implementation "com.squareup.okhttp3:okhttp:$okhttp_version"
|
||||||
|
|
||||||
annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
|
annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
|
||||||
|
|
||||||
testImplementation project(path: ':bramble-api', configuration: 'testOutput')
|
testImplementation project(path: ':bramble-api', configuration: 'testOutput')
|
||||||
@@ -25,7 +29,7 @@ dependencies {
|
|||||||
testImplementation "junit:junit:$junit_version"
|
testImplementation "junit:junit:$junit_version"
|
||||||
testImplementation "org.jmock:jmock:$jmock_version"
|
testImplementation "org.jmock:jmock:$jmock_version"
|
||||||
testImplementation "org.jmock:jmock-junit4:$jmock_version"
|
testImplementation "org.jmock:jmock-junit4:$jmock_version"
|
||||||
testImplementation "org.jmock:jmock-legacy:$jmock_version"
|
testImplementation "org.jmock:jmock-imposters:$jmock_version"
|
||||||
|
|
||||||
testAnnotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
|
testAnnotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
|
||||||
|
|
||||||
|
|||||||
@@ -131,22 +131,29 @@ class ContactManagerImpl implements ContactManager, EventListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PendingContact addPendingContact(String link, String alias)
|
public PendingContact addPendingContact(Transaction txn, String link, String alias)
|
||||||
throws DbException, FormatException, GeneralSecurityException {
|
throws DbException, FormatException, GeneralSecurityException {
|
||||||
PendingContact p =
|
PendingContact p =
|
||||||
pendingContactFactory.createPendingContact(link, alias);
|
pendingContactFactory.createPendingContact(link, alias);
|
||||||
|
AuthorId local = identityManager.getLocalAuthor(txn).getId();
|
||||||
|
db.addPendingContact(txn, p, local);
|
||||||
|
KeyPair ourKeyPair = identityManager.getHandshakeKeys(txn);
|
||||||
|
keyManager.addPendingContact(txn, p.getId(), p.getPublicKey(),
|
||||||
|
ourKeyPair);
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PendingContact addPendingContact(String link, String alias)
|
||||||
|
throws DbException, FormatException, GeneralSecurityException {
|
||||||
Transaction txn = db.startTransaction(false);
|
Transaction txn = db.startTransaction(false);
|
||||||
try {
|
try {
|
||||||
AuthorId local = identityManager.getLocalAuthor(txn).getId();
|
PendingContact p = addPendingContact(txn, link, alias);
|
||||||
db.addPendingContact(txn, p, local);
|
|
||||||
KeyPair ourKeyPair = identityManager.getHandshakeKeys(txn);
|
|
||||||
keyManager.addPendingContact(txn, p.getId(), p.getPublicKey(),
|
|
||||||
ourKeyPair);
|
|
||||||
db.commitTransaction(txn);
|
db.commitTransaction(txn);
|
||||||
|
return p;
|
||||||
} finally {
|
} finally {
|
||||||
db.endTransaction(txn);
|
db.endTransaction(txn);
|
||||||
}
|
}
|
||||||
return p;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -158,8 +165,13 @@ class ContactManagerImpl implements ContactManager, EventListener {
|
|||||||
@Override
|
@Override
|
||||||
public Collection<Pair<PendingContact, PendingContactState>> getPendingContacts()
|
public Collection<Pair<PendingContact, PendingContactState>> getPendingContacts()
|
||||||
throws DbException {
|
throws DbException {
|
||||||
Collection<PendingContact> pendingContacts =
|
return db.transactionWithResult(true, this::getPendingContacts);
|
||||||
db.transactionWithResult(true, db::getPendingContacts);
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<Pair<PendingContact, PendingContactState>> getPendingContacts(Transaction txn)
|
||||||
|
throws DbException {
|
||||||
|
Collection<PendingContact> pendingContacts = db.getPendingContacts(txn);
|
||||||
List<Pair<PendingContact, PendingContactState>> pairs =
|
List<Pair<PendingContact, PendingContactState>> pairs =
|
||||||
new ArrayList<>(pendingContacts.size());
|
new ArrayList<>(pendingContacts.size());
|
||||||
for (PendingContact p : pendingContacts) {
|
for (PendingContact p : pendingContacts) {
|
||||||
|
|||||||
@@ -1,18 +1,49 @@
|
|||||||
package org.briarproject.bramble.io;
|
package org.briarproject.bramble.io;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.WeakSingletonProvider;
|
||||||
import org.briarproject.bramble.api.io.TimeoutMonitor;
|
import org.briarproject.bramble.api.io.TimeoutMonitor;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
import javax.net.SocketFactory;
|
||||||
|
|
||||||
import dagger.Module;
|
import dagger.Module;
|
||||||
import dagger.Provides;
|
import dagger.Provides;
|
||||||
|
import okhttp3.Dns;
|
||||||
|
import okhttp3.OkHttpClient;
|
||||||
|
|
||||||
|
import static java.util.concurrent.TimeUnit.MILLISECONDS;
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
public class IoModule {
|
public class IoModule {
|
||||||
|
|
||||||
|
private static final int CONNECT_TIMEOUT = 60_000; // Milliseconds
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
TimeoutMonitor provideTimeoutMonitor(TimeoutMonitorImpl timeoutMonitor) {
|
TimeoutMonitor provideTimeoutMonitor(TimeoutMonitorImpl timeoutMonitor) {
|
||||||
return timeoutMonitor;
|
return timeoutMonitor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Share an HTTP client instance between requests where possible, while
|
||||||
|
// allowing the client to be garbage-collected between requests. The
|
||||||
|
// provider keeps a weak reference to the last client instance and reuses
|
||||||
|
// the instance until it gets garbage-collected. See
|
||||||
|
// https://medium.com/@leandromazzuquini/if-you-are-using-okhttp-you-should-know-this-61d68e065a2b
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
WeakSingletonProvider<OkHttpClient> provideOkHttpClientProvider(
|
||||||
|
SocketFactory torSocketFactory, Dns noDnsLookups) {
|
||||||
|
return new WeakSingletonProvider<OkHttpClient>() {
|
||||||
|
@Override
|
||||||
|
@Nonnull
|
||||||
|
public OkHttpClient createInstance() {
|
||||||
|
return new OkHttpClient.Builder()
|
||||||
|
.socketFactory(torSocketFactory)
|
||||||
|
.dns(noDnsLookups) // Don't make local DNS lookups
|
||||||
|
.connectTimeout(CONNECT_TIMEOUT, MILLISECONDS)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import org.briarproject.bramble.api.sync.Message;
|
|||||||
import org.briarproject.bramble.api.sync.MessageContext;
|
import org.briarproject.bramble.api.sync.MessageContext;
|
||||||
import org.briarproject.bramble.test.ValidatorTestCase;
|
import org.briarproject.bramble.test.ValidatorTestCase;
|
||||||
import org.jmock.Expectations;
|
import org.jmock.Expectations;
|
||||||
import org.jmock.lib.legacy.ClassImposteriser;
|
import org.jmock.imposters.ByteBuddyClassImposteriser;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import static org.briarproject.bramble.api.transport.TransportConstants.MAX_CLOCK_DIFFERENCE;
|
import static org.briarproject.bramble.api.transport.TransportConstants.MAX_CLOCK_DIFFERENCE;
|
||||||
@@ -38,7 +38,7 @@ public class BdfMessageValidatorTest extends ValidatorTestCase {
|
|||||||
private final Metadata meta = new Metadata();
|
private final Metadata meta = new Metadata();
|
||||||
|
|
||||||
public BdfMessageValidatorTest() {
|
public BdfMessageValidatorTest() {
|
||||||
context.setImposteriser(ClassImposteriser.INSTANCE);
|
context.setImposteriser(ByteBuddyClassImposteriser.INSTANCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = InvalidMessageException.class)
|
@Test(expected = InvalidMessageException.class)
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ import org.briarproject.bramble.api.keyagreement.PayloadEncoder;
|
|||||||
import org.briarproject.bramble.test.BrambleTestCase;
|
import org.briarproject.bramble.test.BrambleTestCase;
|
||||||
import org.jmock.Expectations;
|
import org.jmock.Expectations;
|
||||||
import org.jmock.auto.Mock;
|
import org.jmock.auto.Mock;
|
||||||
|
import org.jmock.imposters.ByteBuddyClassImposteriser;
|
||||||
import org.jmock.integration.junit4.JUnitRuleMockery;
|
import org.jmock.integration.junit4.JUnitRuleMockery;
|
||||||
import org.jmock.lib.concurrent.Synchroniser;
|
import org.jmock.lib.concurrent.Synchroniser;
|
||||||
import org.jmock.lib.legacy.ClassImposteriser;
|
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ public class KeyAgreementProtocolTest extends BrambleTestCase {
|
|||||||
@Rule
|
@Rule
|
||||||
public JUnitRuleMockery context = new JUnitRuleMockery() {{
|
public JUnitRuleMockery context = new JUnitRuleMockery() {{
|
||||||
// So we can mock concrete classes like KeyAgreementTransport
|
// So we can mock concrete classes like KeyAgreementTransport
|
||||||
setImposteriser(ClassImposteriser.INSTANCE);
|
setImposteriser(ByteBuddyClassImposteriser.INSTANCE);
|
||||||
setThreadingPolicy(new Synchroniser());
|
setThreadingPolicy(new Synchroniser());
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import org.briarproject.bramble.api.record.RecordWriterFactory;
|
|||||||
import org.briarproject.bramble.test.BrambleMockTestCase;
|
import org.briarproject.bramble.test.BrambleMockTestCase;
|
||||||
import org.briarproject.bramble.test.CaptureArgumentAction;
|
import org.briarproject.bramble.test.CaptureArgumentAction;
|
||||||
import org.jmock.Expectations;
|
import org.jmock.Expectations;
|
||||||
import org.jmock.lib.legacy.ClassImposteriser;
|
import org.jmock.imposters.ByteBuddyClassImposteriser;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@@ -58,7 +58,7 @@ public class KeyAgreementTransportTest extends BrambleMockTestCase {
|
|||||||
private KeyAgreementTransport kat;
|
private KeyAgreementTransport kat;
|
||||||
|
|
||||||
public KeyAgreementTransportTest() {
|
public KeyAgreementTransportTest() {
|
||||||
context.setImposteriser(ClassImposteriser.INSTANCE);
|
context.setImposteriser(ByteBuddyClassImposteriser.INSTANCE);
|
||||||
inputStream = context.mock(InputStream.class);
|
inputStream = context.mock(InputStream.class);
|
||||||
outputStream = context.mock(OutputStream.class);
|
outputStream = context.mock(OutputStream.class);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import org.briarproject.bramble.test.BrambleMockTestCase;
|
|||||||
import org.briarproject.bramble.test.ImmediateExecutor;
|
import org.briarproject.bramble.test.ImmediateExecutor;
|
||||||
import org.briarproject.bramble.test.RunAction;
|
import org.briarproject.bramble.test.RunAction;
|
||||||
import org.jmock.Expectations;
|
import org.jmock.Expectations;
|
||||||
import org.jmock.lib.legacy.ClassImposteriser;
|
import org.jmock.imposters.ByteBuddyClassImposteriser;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@ public class PollerImplTest extends BrambleMockTestCase {
|
|||||||
private PollerImpl poller;
|
private PollerImpl poller;
|
||||||
|
|
||||||
public PollerImplTest() {
|
public PollerImplTest() {
|
||||||
context.setImposteriser(ClassImposteriser.INSTANCE);
|
context.setImposteriser(ByteBuddyClassImposteriser.INSTANCE);
|
||||||
random = context.mock(SecureRandom.class);
|
random = context.mock(SecureRandom.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,26 @@ public class TestFeatureFlagModule {
|
|||||||
public boolean shouldEnableDisappearingMessages() {
|
public boolean shouldEnableDisappearingMessages() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldEnableIntroductionsInCore() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldEnablePrivateGroupsInCore() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldEnableForumsInCore() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldEnableBlogsInCore() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ dependencyVerification {
|
|||||||
'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava:listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99',
|
'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava:listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99',
|
||||||
'com.google.j2objc:j2objc-annotations:1.1:j2objc-annotations-1.1.jar:2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6',
|
'com.google.j2objc:j2objc-annotations:1.1:j2objc-annotations-1.1.jar:2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6',
|
||||||
'com.h2database:h2:1.4.192:h2-1.4.192.jar:225b22e9857235c46c93861410b60b8c81c10dc8985f4faf188985ba5445126c',
|
'com.h2database:h2:1.4.192:h2-1.4.192.jar:225b22e9857235c46c93861410b60b8c81c10dc8985f4faf188985ba5445126c',
|
||||||
|
'com.squareup.okhttp3:okhttp:3.12.13:okhttp-3.12.13.jar:508234e024ef7e270ab1a6d5b356f5b98e786511239ca986d684fd1e2cf7bc82',
|
||||||
|
'com.squareup.okio:okio:1.15.0:okio-1.15.0.jar:693fa319a7e8843300602b204023b7674f106ebcb577f2dd5807212b66118bd2',
|
||||||
'com.squareup:javapoet:1.13.0:javapoet-1.13.0.jar:4c7517e848a71b36d069d12bb3bf46a70fd4cda3105d822b0ed2e19c00b69291',
|
'com.squareup:javapoet:1.13.0:javapoet-1.13.0.jar:4c7517e848a71b36d069d12bb3bf46a70fd4cda3105d822b0ed2e19c00b69291',
|
||||||
'javax.annotation:jsr250-api:1.0:jsr250-api-1.0.jar:a1a922d0d9b6d183ed3800dfac01d1e1eb159f0e8c6f94736931c1def54a941f',
|
'javax.annotation:jsr250-api:1.0:jsr250-api-1.0.jar:a1a922d0d9b6d183ed3800dfac01d1e1eb159f0e8c6f94736931c1def54a941f',
|
||||||
'javax.inject:javax.inject:1:javax.inject-1.jar:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff',
|
'javax.inject:javax.inject:1:javax.inject-1.jar:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff',
|
||||||
@@ -26,7 +28,7 @@ dependencyVerification {
|
|||||||
'net.ltgt.gradle.incap:incap:0.2:incap-0.2.jar:b625b9806b0f1e4bc7a2e3457119488de3cd57ea20feedd513db070a573a4ffd',
|
'net.ltgt.gradle.incap:incap:0.2:incap-0.2.jar:b625b9806b0f1e4bc7a2e3457119488de3cd57ea20feedd513db070a573a4ffd',
|
||||||
'org.apache-extras.beanshell:bsh:2.0b6:bsh-2.0b6.jar:a17955976070c0573235ee662f2794a78082758b61accffce8d3f8aedcd91047',
|
'org.apache-extras.beanshell:bsh:2.0b6:bsh-2.0b6.jar:a17955976070c0573235ee662f2794a78082758b61accffce8d3f8aedcd91047',
|
||||||
'org.bitlet:weupnp:0.1.4:weupnp-0.1.4.jar:88df7e6504929d00bdb832863761385c68ab92af945b04f0770b126270a444fb',
|
'org.bitlet:weupnp:0.1.4:weupnp-0.1.4.jar:88df7e6504929d00bdb832863761385c68ab92af945b04f0770b126270a444fb',
|
||||||
'org.bouncycastle:bcprov-jdk15on:1.69:bcprov-jdk15on-1.69.jar:e469bd39f936999f256002631003ff022a22951da9d5bd9789c7abfa9763a292',
|
'org.bouncycastle:bcprov-jdk15to18:1.70:bcprov-jdk15to18-1.70.jar:7df4c54f29ce2dd616dc3b198ca4db3dfcc79e3cb397c084a0aff97b85c0bf38',
|
||||||
'org.briarproject:jtorctl:0.3:jtorctl-0.3.jar:f2939238a097898998432effe93b0334d97a787972ab3a91a8973a1d309fc864',
|
'org.briarproject:jtorctl:0.3:jtorctl-0.3.jar:f2939238a097898998432effe93b0334d97a787972ab3a91a8973a1d309fc864',
|
||||||
'org.checkerframework:checker-compat-qual:2.5.3:checker-compat-qual-2.5.3.jar:d76b9afea61c7c082908023f0cbc1427fab9abd2df915c8b8a3e7a509bccbc6d',
|
'org.checkerframework:checker-compat-qual:2.5.3:checker-compat-qual-2.5.3.jar:d76b9afea61c7c082908023f0cbc1427fab9abd2df915c8b8a3e7a509bccbc6d',
|
||||||
'org.checkerframework:checker-qual:2.5.2:checker-qual-2.5.2.jar:64b02691c8b9d4e7700f8ee2e742dce7ea2c6e81e662b7522c9ee3bf568c040a',
|
'org.checkerframework:checker-qual:2.5.2:checker-qual-2.5.2.jar:64b02691c8b9d4e7700f8ee2e742dce7ea2c6e81e662b7522c9ee3bf568c040a',
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ dependencies {
|
|||||||
testImplementation "junit:junit:$junit_version"
|
testImplementation "junit:junit:$junit_version"
|
||||||
testImplementation "org.jmock:jmock:$jmock_version"
|
testImplementation "org.jmock:jmock:$jmock_version"
|
||||||
testImplementation "org.jmock:jmock-junit4:$jmock_version"
|
testImplementation "org.jmock:jmock-junit4:$jmock_version"
|
||||||
testImplementation "org.jmock:jmock-legacy:$jmock_version"
|
|
||||||
|
|
||||||
testAnnotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
|
testAnnotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -131,17 +131,17 @@ dependencies {
|
|||||||
def espressoVersion = '3.3.0'
|
def espressoVersion = '3.3.0'
|
||||||
testImplementation project(path: ':bramble-api', configuration: 'testOutput')
|
testImplementation project(path: ':bramble-api', configuration: 'testOutput')
|
||||||
testImplementation project(path: ':bramble-core', configuration: 'testOutput')
|
testImplementation project(path: ':bramble-core', configuration: 'testOutput')
|
||||||
testImplementation 'androidx.test:runner:1.3.0'
|
testImplementation 'androidx.test:runner:1.4.0'
|
||||||
testImplementation 'androidx.test.ext:junit:1.1.2'
|
testImplementation 'androidx.test.ext:junit:1.1.3'
|
||||||
testImplementation 'androidx.fragment:fragment-testing:1.3.4'
|
testImplementation 'androidx.fragment:fragment-testing:1.4.0'
|
||||||
testImplementation "androidx.arch.core:core-testing:2.1.0"
|
testImplementation "androidx.arch.core:core-testing:2.1.0"
|
||||||
testImplementation "androidx.test.espresso:espresso-core:$espressoVersion"
|
testImplementation "androidx.test.espresso:espresso-core:$espressoVersion"
|
||||||
testImplementation 'org.robolectric:robolectric:4.3.1'
|
testImplementation 'org.robolectric:robolectric:4.4'
|
||||||
testImplementation 'org.mockito:mockito-core:3.9.0'
|
testImplementation 'org.mockito:mockito-core:3.9.0'
|
||||||
testImplementation "junit:junit:$junit_version"
|
testImplementation "junit:junit:$junit_version"
|
||||||
testImplementation "org.jmock:jmock:$jmock_version"
|
testImplementation "org.jmock:jmock:$jmock_version"
|
||||||
testImplementation "org.jmock:jmock-junit4:$jmock_version"
|
testImplementation "org.jmock:jmock-junit4:$jmock_version"
|
||||||
testImplementation "org.jmock:jmock-legacy:$jmock_version"
|
testImplementation "org.jmock:jmock-imposters:$jmock_version"
|
||||||
testAnnotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
|
testAnnotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
|
||||||
|
|
||||||
androidTestImplementation project(path: ':bramble-api', configuration: 'testOutput')
|
androidTestImplementation project(path: ':bramble-api', configuration: 'testOutput')
|
||||||
|
|||||||
@@ -339,6 +339,26 @@ public class AppModule {
|
|||||||
public boolean shouldEnableDisappearingMessages() {
|
public boolean shouldEnableDisappearingMessages() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldEnableIntroductionsInCore() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldEnablePrivateGroupsInCore() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldEnableForumsInCore() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldEnableBlogsInCore() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -297,7 +297,7 @@
|
|||||||
<string name="duplicate_link_dialog_text_1">You already have a pending contact with this link: %s</string>
|
<string name="duplicate_link_dialog_text_1">You already have a pending contact with this link: %s</string>
|
||||||
<string name="duplicate_link_dialog_text_1_contact">You already have a contact with this link: %s</string>
|
<string name="duplicate_link_dialog_text_1_contact">You already have a contact with this link: %s</string>
|
||||||
<!-- This is a question asking whether two nicknames refer to the same person -->
|
<!-- This is a question asking whether two nicknames refer to the same person -->
|
||||||
<string name="duplicate_link_dialog_text_2">Are %s and %s the same person?</string>
|
<string name="duplicate_link_dialog_text_2">Are %1$s and %2$s the same person?</string>
|
||||||
<!-- This is a button for answering that two nicknames do indeed refer to the same person. This
|
<!-- This is a button for answering that two nicknames do indeed refer to the same person. This
|
||||||
string will be used in a dialog button, so if the translation of this string is longer than 20
|
string will be used in a dialog button, so if the translation of this string is longer than 20
|
||||||
characters, please use "Yes" instead, and use "No" for the "Different Person" button -->
|
characters, please use "Yes" instead, and use "No" for the "Different Person" button -->
|
||||||
@@ -306,7 +306,7 @@
|
|||||||
will be used in a dialog button, so if the translation of this string longer than 20 characters,
|
will be used in a dialog button, so if the translation of this string longer than 20 characters,
|
||||||
please use "No" instead, and use "Yes" for the "Same Person" button -->
|
please use "No" instead, and use "Yes" for the "Same Person" button -->
|
||||||
<string name="different_person_button">Different Person</string>
|
<string name="different_person_button">Different Person</string>
|
||||||
<string name="duplicate_link_dialog_text_3">%s and %s sent you the same link.\n\nOne of them may be trying to discover who your contacts are.\n\nDon\'t tell them you received the same link from someone else.</string>
|
<string name="duplicate_link_dialog_text_3">%1$s and %2$s sent you the same link.\n\nOne of them may be trying to discover who your contacts are.\n\nDon\'t tell them you received the same link from someone else.</string>
|
||||||
<string name="pending_contact_updated_toast">Pending contact updated</string>
|
<string name="pending_contact_updated_toast">Pending contact updated</string>
|
||||||
|
|
||||||
<!-- Introductions -->
|
<!-- Introductions -->
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import org.briarproject.bramble.test.BrambleMockTestCase;
|
|||||||
import org.briarproject.bramble.test.ImmediateExecutor;
|
import org.briarproject.bramble.test.ImmediateExecutor;
|
||||||
import org.briarproject.briar.android.account.SetupViewModel.State;
|
import org.briarproject.briar.android.account.SetupViewModel.State;
|
||||||
import org.jmock.Expectations;
|
import org.jmock.Expectations;
|
||||||
import org.jmock.lib.legacy.ClassImposteriser;
|
import org.jmock.imposters.ByteBuddyClassImposteriser;
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ public class SetupViewModelTest extends BrambleMockTestCase {
|
|||||||
private final DozeHelper dozeHelper;
|
private final DozeHelper dozeHelper;
|
||||||
|
|
||||||
public SetupViewModelTest() {
|
public SetupViewModelTest() {
|
||||||
context.setImposteriser(ClassImposteriser.INSTANCE);
|
context.setImposteriser(ByteBuddyClassImposteriser.INSTANCE);
|
||||||
app = context.mock(Application.class);
|
app = context.mock(Application.class);
|
||||||
appContext = context.mock(Context.class);
|
appContext = context.mock(Context.class);
|
||||||
accountManager = context.mock(AccountManager.class);
|
accountManager = context.mock(AccountManager.class);
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import org.briarproject.briar.api.attachment.Attachment;
|
|||||||
import org.briarproject.briar.api.attachment.AttachmentHeader;
|
import org.briarproject.briar.api.attachment.AttachmentHeader;
|
||||||
import org.briarproject.briar.api.attachment.AttachmentReader;
|
import org.briarproject.briar.api.attachment.AttachmentReader;
|
||||||
import org.jmock.Expectations;
|
import org.jmock.Expectations;
|
||||||
import org.jmock.lib.legacy.ClassImposteriser;
|
import org.jmock.imposters.ByteBuddyClassImposteriser;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
@@ -36,7 +36,7 @@ public class AttachmentRetrieverTest extends BrambleMockTestCase {
|
|||||||
private final AttachmentRetriever retriever;
|
private final AttachmentRetriever retriever;
|
||||||
|
|
||||||
public AttachmentRetrieverTest() {
|
public AttachmentRetrieverTest() {
|
||||||
context.setImposteriser(ClassImposteriser.INSTANCE);
|
context.setImposteriser(ByteBuddyClassImposteriser.INSTANCE);
|
||||||
AttachmentReader attachmentReader =
|
AttachmentReader attachmentReader =
|
||||||
context.mock(AttachmentReader.class);
|
context.mock(AttachmentReader.class);
|
||||||
imageSizeCalculator = context.mock(ImageSizeCalculator.class);
|
imageSizeCalculator = context.mock(ImageSizeCalculator.class);
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import org.robolectric.Robolectric;
|
|||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
import org.robolectric.annotation.Config;
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
|
import static android.os.Looper.getMainLooper;
|
||||||
import static junit.framework.Assert.assertEquals;
|
import static junit.framework.Assert.assertEquals;
|
||||||
import static junit.framework.Assert.assertFalse;
|
import static junit.framework.Assert.assertFalse;
|
||||||
import static junit.framework.Assert.assertTrue;
|
import static junit.framework.Assert.assertTrue;
|
||||||
@@ -33,6 +34,7 @@ import static org.mockito.Matchers.eq;
|
|||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
import static org.robolectric.Shadows.shadowOf;
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
@Config(sdk = 21)
|
@Config(sdk = 21)
|
||||||
@@ -117,6 +119,7 @@ public class ChangePasswordActivityTest {
|
|||||||
verify(viewModel, times(1)).changePassword(eq(curPass), eq(safePass));
|
verify(viewModel, times(1)).changePassword(eq(curPass), eq(safePass));
|
||||||
// Return the result
|
// Return the result
|
||||||
result.postEvent(SUCCESS);
|
result.postEvent(SUCCESS);
|
||||||
|
shadowOf(getMainLooper()).idle();
|
||||||
assertTrue(changePasswordActivity.isFinishing());
|
assertTrue(changePasswordActivity.isFinishing());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ import org.briarproject.briar.api.privategroup.event.GroupDissolvedEvent;
|
|||||||
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationItem;
|
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationItem;
|
||||||
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager;
|
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager;
|
||||||
import org.jmock.Expectations;
|
import org.jmock.Expectations;
|
||||||
import org.jmock.lib.legacy.ClassImposteriser;
|
import org.jmock.imposters.ByteBuddyClassImposteriser;
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
@@ -36,8 +36,8 @@ import java.util.concurrent.Executor;
|
|||||||
|
|
||||||
import androidx.arch.core.executor.testing.InstantTaskExecutorRule;
|
import androidx.arch.core.executor.testing.InstantTaskExecutorRule;
|
||||||
|
|
||||||
import static edu.emory.mathcs.backport.java.util.Collections.emptyList;
|
import static java.util.Collections.emptyList;
|
||||||
import static edu.emory.mathcs.backport.java.util.Collections.singletonList;
|
import static java.util.Collections.singletonList;
|
||||||
import static org.briarproject.bramble.test.TestUtils.getAuthor;
|
import static org.briarproject.bramble.test.TestUtils.getAuthor;
|
||||||
import static org.briarproject.bramble.test.TestUtils.getContact;
|
import static org.briarproject.bramble.test.TestUtils.getContact;
|
||||||
import static org.briarproject.bramble.test.TestUtils.getGroup;
|
import static org.briarproject.bramble.test.TestUtils.getGroup;
|
||||||
@@ -95,7 +95,7 @@ public class GroupListViewModelTest extends BrambleMockTestCase {
|
|||||||
new GroupItem(privateGroup2, authorInfo2, groupCount2, false);
|
new GroupItem(privateGroup2, authorInfo2, groupCount2, false);
|
||||||
|
|
||||||
public GroupListViewModelTest() {
|
public GroupListViewModelTest() {
|
||||||
context.setImposteriser(ClassImposteriser.INSTANCE);
|
context.setImposteriser(ByteBuddyClassImposteriser.INSTANCE);
|
||||||
Application app = context.mock(Application.class);
|
Application app = context.mock(Application.class);
|
||||||
context.checking(new Expectations() {{
|
context.checking(new Expectations() {{
|
||||||
oneOf(eventBus).addListener(with(any(EventListener.class)));
|
oneOf(eventBus).addListener(with(any(EventListener.class)));
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import android.content.res.Resources;
|
|||||||
import org.briarproject.bramble.test.BrambleMockTestCase;
|
import org.briarproject.bramble.test.BrambleMockTestCase;
|
||||||
import org.briarproject.briar.R;
|
import org.briarproject.briar.R;
|
||||||
import org.jmock.Expectations;
|
import org.jmock.Expectations;
|
||||||
import org.jmock.lib.legacy.ClassImposteriser;
|
import org.jmock.imposters.ByteBuddyClassImposteriser;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import static java.util.concurrent.TimeUnit.DAYS;
|
import static java.util.concurrent.TimeUnit.DAYS;
|
||||||
@@ -24,7 +24,7 @@ public class UiUtilsFormatDurationTest extends BrambleMockTestCase {
|
|||||||
private final int strDays = R.plurals.duration_days;
|
private final int strDays = R.plurals.duration_days;
|
||||||
|
|
||||||
public UiUtilsFormatDurationTest() {
|
public UiUtilsFormatDurationTest() {
|
||||||
context.setImposteriser(ClassImposteriser.INSTANCE);
|
context.setImposteriser(ByteBuddyClassImposteriser.INSTANCE);
|
||||||
ctx = context.mock(Context.class);
|
ctx = context.mock(Context.class);
|
||||||
r = context.mock(Resources.class);
|
r = context.mock(Resources.class);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
dependencyVerification {
|
dependencyVerification {
|
||||||
verify = [
|
verify = [
|
||||||
'androidx.activity:activity-ktx:1.2.2:activity-ktx-1.2.2.aar:9829e13d6a6b045b03b21a330512e091dc76eb5b3ded0d88d1ab0509cf84a50e',
|
'androidx.activity:activity-ktx:1.2.3:activity-ktx-1.2.3.aar:423c0226e237e08de245cf66f8ccaf103854bc19a584d971a4a075fd15d70df1',
|
||||||
'androidx.activity:activity:1.2.2:activity-1.2.2.aar:e165fb20f006b77894d349572cc3acd2760baa8416ae4d33cb8de6a84dd6730c',
|
'androidx.activity:activity:1.2.2:activity-1.2.2.aar:e165fb20f006b77894d349572cc3acd2760baa8416ae4d33cb8de6a84dd6730c',
|
||||||
|
'androidx.activity:activity:1.2.4:activity-1.2.4.aar:ae8e9c7de57e387d2ad90e73f3a5a5dfd502bd4f034c1dccfdb3506d1d2df81a',
|
||||||
'androidx.annotation:annotation-experimental:1.0.0:annotation-experimental-1.0.0.aar:b219d2b568e7e4ba534e09f8c2fd242343df6ccbdfbbe938846f5d740e6b0b11',
|
'androidx.annotation:annotation-experimental:1.0.0:annotation-experimental-1.0.0.aar:b219d2b568e7e4ba534e09f8c2fd242343df6ccbdfbbe938846f5d740e6b0b11',
|
||||||
'androidx.annotation:annotation:1.1.0:annotation-1.1.0.jar:d38d63edb30f1467818d50aaf05f8a692dea8b31392a049bfa991b159ad5b692',
|
'androidx.annotation:annotation:1.1.0:annotation-1.1.0.jar:d38d63edb30f1467818d50aaf05f8a692dea8b31392a049bfa991b159ad5b692',
|
||||||
'androidx.appcompat:appcompat-resources:1.2.0:appcompat-resources-1.2.0.aar:c470297c03ff3de1c3d15dacf0be0cae63abc10b52f021dd07ae28daa3100fe5',
|
'androidx.appcompat:appcompat-resources:1.2.0:appcompat-resources-1.2.0.aar:c470297c03ff3de1c3d15dacf0be0cae63abc10b52f021dd07ae28daa3100fe5',
|
||||||
@@ -15,7 +16,7 @@ dependencyVerification {
|
|||||||
'androidx.constraintlayout:constraintlayout-solver:2.0.4:constraintlayout-solver-2.0.4.jar:9ca19f5448709301c7563488ef941be9dfa55c83538ca7a059b2113e83527b46',
|
'androidx.constraintlayout:constraintlayout-solver:2.0.4:constraintlayout-solver-2.0.4.jar:9ca19f5448709301c7563488ef941be9dfa55c83538ca7a059b2113e83527b46',
|
||||||
'androidx.constraintlayout:constraintlayout:2.0.4:constraintlayout-2.0.4.aar:307a79a4a1ccff44249c72a2bf7f47da09fa1b6b1fab2a25808ca889382b738e',
|
'androidx.constraintlayout:constraintlayout:2.0.4:constraintlayout-2.0.4.aar:307a79a4a1ccff44249c72a2bf7f47da09fa1b6b1fab2a25808ca889382b738e',
|
||||||
'androidx.coordinatorlayout:coordinatorlayout:1.1.0:coordinatorlayout-1.1.0.aar:44a9e30abf56af1025c52a0af506fee9c4131aa55efda52f9fd9451211c5e8cb',
|
'androidx.coordinatorlayout:coordinatorlayout:1.1.0:coordinatorlayout-1.1.0.aar:44a9e30abf56af1025c52a0af506fee9c4131aa55efda52f9fd9451211c5e8cb',
|
||||||
'androidx.core:core-ktx:1.1.0:core-ktx-1.1.0.aar:070cc5f8864f449128a2f4b25ca5b67aa3adca3ee1bd611e2eaf1a18fad83178',
|
'androidx.core:core-ktx:1.2.0:core-ktx-1.2.0.aar:dcb74d510d552b35eff73b0dd27b829649535f3902e5b5a1f26040383c10a940',
|
||||||
'androidx.core:core:1.3.1:core-1.3.1.aar:e92ea65a37d589943d405a6a54d1be9d12a225948f26c4e41e511dd55e81efb6',
|
'androidx.core:core:1.3.1:core-1.3.1.aar:e92ea65a37d589943d405a6a54d1be9d12a225948f26c4e41e511dd55e81efb6',
|
||||||
'androidx.cursoradapter:cursoradapter:1.0.0:cursoradapter-1.0.0.aar:a81c8fe78815fa47df5b749deb52727ad11f9397da58b16017f4eb2c11e28564',
|
'androidx.cursoradapter:cursoradapter:1.0.0:cursoradapter-1.0.0.aar:a81c8fe78815fa47df5b749deb52727ad11f9397da58b16017f4eb2c11e28564',
|
||||||
'androidx.customview:customview:1.0.0:customview-1.0.0.aar:20e5b8f6526a34595a604f56718da81167c0b40a7a94a57daa355663f2594df2',
|
'androidx.customview:customview:1.0.0:customview-1.0.0.aar:20e5b8f6526a34595a604f56718da81167c0b40a7a94a57daa355663f2594df2',
|
||||||
@@ -23,9 +24,10 @@ dependencyVerification {
|
|||||||
'androidx.drawerlayout:drawerlayout:1.0.0:drawerlayout-1.0.0.aar:9402442cdc5a43cf62fb14f8cf98c63342d4d9d9b805c8033c6cf7e802749ac1',
|
'androidx.drawerlayout:drawerlayout:1.0.0:drawerlayout-1.0.0.aar:9402442cdc5a43cf62fb14f8cf98c63342d4d9d9b805c8033c6cf7e802749ac1',
|
||||||
'androidx.dynamicanimation:dynamicanimation:1.0.0:dynamicanimation-1.0.0.aar:ce005162c229bf308d2d5b12fb6cad0874069cbbeaccee63a8193bd08d40de04',
|
'androidx.dynamicanimation:dynamicanimation:1.0.0:dynamicanimation-1.0.0.aar:ce005162c229bf308d2d5b12fb6cad0874069cbbeaccee63a8193bd08d40de04',
|
||||||
'androidx.exifinterface:exifinterface:1.3.2:exifinterface-1.3.2.aar:8770c180103e0b8c04a07eb4c59153af639b09eca25deae9bdcdaf869d1e5b6b',
|
'androidx.exifinterface:exifinterface:1.3.2:exifinterface-1.3.2.aar:8770c180103e0b8c04a07eb4c59153af639b09eca25deae9bdcdaf869d1e5b6b',
|
||||||
'androidx.fragment:fragment-ktx:1.3.4:fragment-ktx-1.3.4.aar:7b33342737f2503437782d5276700ef82e8481a182dc8b37d369cf4c62bd7209',
|
'androidx.fragment:fragment-ktx:1.4.0:fragment-ktx-1.4.0.aar:439873b250461eb2245e393fe6683dceb567e7a18d9d6cf4538de9befa4ed1b0',
|
||||||
'androidx.fragment:fragment-testing:1.3.4:fragment-testing-1.3.4.aar:e6d19df625138876682b7788bff8908964dd279847073616d1c062da07998389',
|
'androidx.fragment:fragment-testing:1.4.0:fragment-testing-1.4.0.aar:1f874b83919c69f2e0df6de0ba2ad87a0d61cc7840d90b481ee0d4db85c2385b',
|
||||||
'androidx.fragment:fragment:1.3.4:fragment-1.3.4.aar:c023c0ab666456885284d8e88519a743bc863c2b2effb92741fc789cbdb10db4',
|
'androidx.fragment:fragment:1.3.4:fragment-1.3.4.aar:c023c0ab666456885284d8e88519a743bc863c2b2effb92741fc789cbdb10db4',
|
||||||
|
'androidx.fragment:fragment:1.4.0:fragment-1.4.0.aar:ec98a3b2f56f25cd247f928ab717d5527d27aea56ca4c02e67fbcd1ec32e5eed',
|
||||||
'androidx.interpolator:interpolator:1.0.0:interpolator-1.0.0.aar:33193135a64fe21fa2c35eec6688f1a76e512606c0fc83dc1b689e37add7732a',
|
'androidx.interpolator:interpolator:1.0.0:interpolator-1.0.0.aar:33193135a64fe21fa2c35eec6688f1a76e512606c0fc83dc1b689e37add7732a',
|
||||||
'androidx.legacy:legacy-support-core-utils:1.0.0:legacy-support-core-utils-1.0.0.aar:a7edcf01d5b52b3034073027bc4775b78a4764bb6202bb91d61c829add8dd1c7',
|
'androidx.legacy:legacy-support-core-utils:1.0.0:legacy-support-core-utils-1.0.0.aar:a7edcf01d5b52b3034073027bc4775b78a4764bb6202bb91d61c829add8dd1c7',
|
||||||
'androidx.lifecycle:lifecycle-common:2.3.1:lifecycle-common-2.3.1.jar:15848fb56db32f4c7cdc72b324003183d52a4884d6bf09be708ac7f587d139b5',
|
'androidx.lifecycle:lifecycle-common:2.3.1:lifecycle-common-2.3.1.jar:15848fb56db32f4c7cdc72b324003183d52a4884d6bf09be708ac7f587d139b5',
|
||||||
@@ -53,13 +55,18 @@ dependencyVerification {
|
|||||||
'androidx.test.espresso:espresso-idling-resource:3.3.0:espresso-idling-resource-3.3.0.aar:29519b112731f289cc6e2f9b2eccc5ea72c754b04272bb93370f45d7e170a7c6',
|
'androidx.test.espresso:espresso-idling-resource:3.3.0:espresso-idling-resource-3.3.0.aar:29519b112731f289cc6e2f9b2eccc5ea72c754b04272bb93370f45d7e170a7c6',
|
||||||
'androidx.test.espresso:espresso-intents:3.3.0:espresso-intents-3.3.0.aar:5b6cd6aadce78edc705d93c1e81ace3b59be97128aca0e88fd9c5c176aa9bf10',
|
'androidx.test.espresso:espresso-intents:3.3.0:espresso-intents-3.3.0.aar:5b6cd6aadce78edc705d93c1e81ace3b59be97128aca0e88fd9c5c176aa9bf10',
|
||||||
'androidx.test.ext:junit:1.1.2:junit-1.1.2.aar:6c6ab120c640bf16fcaae69cb83c144d0ed6b6298562be0ac35e37ed969c0409',
|
'androidx.test.ext:junit:1.1.2:junit-1.1.2.aar:6c6ab120c640bf16fcaae69cb83c144d0ed6b6298562be0ac35e37ed969c0409',
|
||||||
|
'androidx.test.ext:junit:1.1.3:junit-1.1.3.aar:a97209d75a9a85815fa8934f5a4a320de1163ffe94e2f0b328c0c98a59660690',
|
||||||
|
'androidx.test.services:storage:1.4.0:storage-1.4.0.aar:35cfbf442abb83e5876cd5deb9de02ae047459f18f831097c5caa76d626bc38a',
|
||||||
'androidx.test.services:test-services:1.3.0:test-services-1.3.0.apk:1b88faab6864baf25c5d0b92a610c283c159a566e7a56c03307117fa1b542993',
|
'androidx.test.services:test-services:1.3.0:test-services-1.3.0.apk:1b88faab6864baf25c5d0b92a610c283c159a566e7a56c03307117fa1b542993',
|
||||||
'androidx.test.uiautomator:uiautomator:2.2.0:uiautomator-2.2.0.aar:2838e9d961dbffefbbd229a2bd4f6f82ac4fb2462975862a9e75e9ed325a3197',
|
'androidx.test.uiautomator:uiautomator:2.2.0:uiautomator-2.2.0.aar:2838e9d961dbffefbbd229a2bd4f6f82ac4fb2462975862a9e75e9ed325a3197',
|
||||||
'androidx.test:core:1.3.0:core-1.3.0.aar:86549cae8c5b848f817e2c716e174c7dab61caf0b4df9848680eeb753089a337',
|
'androidx.test:core:1.3.0:core-1.3.0.aar:86549cae8c5b848f817e2c716e174c7dab61caf0b4df9848680eeb753089a337',
|
||||||
|
'androidx.test:core:1.4.0:core-1.4.0.aar:671284e62e393f16ceae1a99a3a9a07bf1aacda29f8fe7b6b884355ef34c09cf',
|
||||||
'androidx.test:monitor:1.3.0:monitor-1.3.0.aar:f73a31306a783e63150c60c49e140dc38da39a1b7947690f4b73387b5ebad77e',
|
'androidx.test:monitor:1.3.0:monitor-1.3.0.aar:f73a31306a783e63150c60c49e140dc38da39a1b7947690f4b73387b5ebad77e',
|
||||||
|
'androidx.test:monitor:1.4.0:monitor-1.4.0.aar:46a912a1e175f27a97521af3f50e5af87c22c49275dd2c57c043740012806325',
|
||||||
'androidx.test:orchestrator:1.3.0:orchestrator-1.3.0.apk:676f808d08a3d05050eae30c3b7d92ce5cef1e00a54d68355bb7e7d4b72366fe',
|
'androidx.test:orchestrator:1.3.0:orchestrator-1.3.0.apk:676f808d08a3d05050eae30c3b7d92ce5cef1e00a54d68355bb7e7d4b72366fe',
|
||||||
'androidx.test:rules:1.3.0:rules-1.3.0.aar:c1753946c498b0d5d7cf341cfed661f66915c4c9deb4ed10462a08ae33b2429a',
|
'androidx.test:rules:1.3.0:rules-1.3.0.aar:c1753946c498b0d5d7cf341cfed661f66915c4c9deb4ed10462a08ae33b2429a',
|
||||||
'androidx.test:runner:1.3.0:runner-1.3.0.aar:61d13f5a9fcbbd73ba18fa84e1d6a0111c6e1c665a89b418126966e61fffd93b',
|
'androidx.test:runner:1.3.0:runner-1.3.0.aar:61d13f5a9fcbbd73ba18fa84e1d6a0111c6e1c665a89b418126966e61fffd93b',
|
||||||
|
'androidx.test:runner:1.4.0:runner-1.4.0.aar:e3f3d8b8d5d4a3edcacbdaa4a31bda2b0e41d3e704b02b3750466a06367ec5a0',
|
||||||
'androidx.tracing:tracing:1.0.0:tracing-1.0.0.aar:07b8b6139665b884a162eccf97891ca50f7f56831233bf25168ae04f7b568612',
|
'androidx.tracing:tracing:1.0.0:tracing-1.0.0.aar:07b8b6139665b884a162eccf97891ca50f7f56831233bf25168ae04f7b568612',
|
||||||
'androidx.transition:transition:1.2.0:transition-1.2.0.aar:a1e059b3bc0b43a58dec0efecdcaa89c82d2bca552ea5bacf6656c46e853157e',
|
'androidx.transition:transition:1.2.0:transition-1.2.0.aar:a1e059b3bc0b43a58dec0efecdcaa89c82d2bca552ea5bacf6656c46e853157e',
|
||||||
'androidx.vectordrawable:vectordrawable-animated:1.1.0:vectordrawable-animated-1.1.0.aar:76da2c502371d9c38054df5e2b248d00da87809ed058f3363eae87ce5e2403f8',
|
'androidx.vectordrawable:vectordrawable-animated:1.1.0:vectordrawable-animated-1.1.0.aar:76da2c502371d9c38054df5e2b248d00da87809ed058f3363eae87ce5e2403f8',
|
||||||
@@ -67,9 +74,7 @@ dependencyVerification {
|
|||||||
'androidx.versionedparcelable:versionedparcelable:1.1.0:versionedparcelable-1.1.0.aar:9a1d77140ac222b7866b5054ee7d159bc1800987ed2d46dd6afdd145abb710c1',
|
'androidx.versionedparcelable:versionedparcelable:1.1.0:versionedparcelable-1.1.0.aar:9a1d77140ac222b7866b5054ee7d159bc1800987ed2d46dd6afdd145abb710c1',
|
||||||
'androidx.viewpager2:viewpager2:1.0.0:viewpager2-1.0.0.aar:e95c0031d4cc247cd48196c6287e58d2cee54d9c79b85afea7c90920330275af',
|
'androidx.viewpager2:viewpager2:1.0.0:viewpager2-1.0.0.aar:e95c0031d4cc247cd48196c6287e58d2cee54d9c79b85afea7c90920330275af',
|
||||||
'androidx.viewpager:viewpager:1.0.0:viewpager-1.0.0.aar:147af4e14a1984010d8f155e5e19d781f03c1d70dfed02a8e0d18428b8fc8682',
|
'androidx.viewpager:viewpager:1.0.0:viewpager-1.0.0.aar:147af4e14a1984010d8f155e5e19d781f03c1d70dfed02a8e0d18428b8fc8682',
|
||||||
'backport-util-concurrent:backport-util-concurrent:3.1:backport-util-concurrent-3.1.jar:f5759b7fcdfc83a525a036deedcbd32e5b536b625ebc282426f16ca137eb5902',
|
|
||||||
'cglib:cglib:3.2.8:cglib-3.2.8.jar:3f64de999ecc5595dc84ca8ff0879d8a34c8623f9ef3c517a53ed59023fcb9db',
|
'cglib:cglib:3.2.8:cglib-3.2.8.jar:3f64de999ecc5595dc84ca8ff0879d8a34c8623f9ef3c517a53ed59023fcb9db',
|
||||||
'classworlds:classworlds:1.1-alpha-2:classworlds-1.1-alpha-2.jar:2bf4e59f3acd106fea6145a9a88fe8956509f8b9c0fdd11eb96fee757269e3f3',
|
|
||||||
'com.almworks.sqlite4java:sqlite4java:0.282:sqlite4java-0.282.jar:9e1d8dd83ca6003f841e3af878ce2dc7c22497493a7bb6d1b62ec1b0d0a83c05',
|
'com.almworks.sqlite4java:sqlite4java:0.282:sqlite4java-0.282.jar:9e1d8dd83ca6003f841e3af878ce2dc7c22497493a7bb6d1b62ec1b0d0a83c05',
|
||||||
'com.android.tools.analytics-library:protos:30.0.3:protos-30.0.3.jar:f62b89dcd9de719c6a7b7e15fb1dd20e45b57222e675cf633607bd0ed6bca7e7',
|
'com.android.tools.analytics-library:protos:30.0.3:protos-30.0.3.jar:f62b89dcd9de719c6a7b7e15fb1dd20e45b57222e675cf633607bd0ed6bca7e7',
|
||||||
'com.android.tools.analytics-library:shared:30.0.3:shared-30.0.3.jar:05aa9ba3cc890354108521fdf99802565aae5dd6ca44a6ac8bb8d594d1c1cd15',
|
'com.android.tools.analytics-library:shared:30.0.3:shared-30.0.3.jar:05aa9ba3cc890354108521fdf99802565aae5dd6ca44a6ac8bb8d594d1c1cd15',
|
||||||
@@ -108,10 +113,8 @@ dependencyVerification {
|
|||||||
'com.github.javaparser:javaparser-core:3.17.0:javaparser-core-3.17.0.jar:23f5c982e1c7771423d37d52c774e8d2e80fd7ea7305ebe448797a96f67e6fca',
|
'com.github.javaparser:javaparser-core:3.17.0:javaparser-core-3.17.0.jar:23f5c982e1c7771423d37d52c774e8d2e80fd7ea7305ebe448797a96f67e6fca',
|
||||||
'com.github.kobakei:MaterialFabSpeedDial:1.2.1:MaterialFabSpeedDial-1.2.1.aar:e86198c3c48cd832fb209a769a9f222c2a3cc045743b110ac2391d9737e3ea02',
|
'com.github.kobakei:MaterialFabSpeedDial:1.2.1:MaterialFabSpeedDial-1.2.1.aar:e86198c3c48cd832fb209a769a9f222c2a3cc045743b110ac2391d9737e3ea02',
|
||||||
'com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework:2.0:accessibility-test-framework-2.0.jar:cdf16ef8f5b8023d003ce3cc1b0d51bda737762e2dab2fedf43d1c4292353f7f',
|
'com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework:2.0:accessibility-test-framework-2.0.jar:cdf16ef8f5b8023d003ce3cc1b0d51bda737762e2dab2fedf43d1c4292353f7f',
|
||||||
'com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework:2.1:accessibility-test-framework-2.1.jar:7b0aa6ed7553597ce0610684a9f7eca8021eee218f2e2f427c04a7fbf5f920bd',
|
|
||||||
'com.google.android.material:material:1.3.0:material-1.3.0.aar:cbf1e7d69fc236cdadcbd1ec5f6c0a1a41aca6ad1ef7f8481058956270ab1f0a',
|
'com.google.android.material:material:1.3.0:material-1.3.0.aar:cbf1e7d69fc236cdadcbd1ec5f6c0a1a41aca6ad1ef7f8481058956270ab1f0a',
|
||||||
'com.google.auto.service:auto-service:1.0-rc4:auto-service-1.0-rc4.jar:e422d49c312fd2031222e7306e8108c1b4118eb9c049f1b51eca280bed87e924',
|
'com.google.auto.value:auto-value-annotations:1.6.2:auto-value-annotations-1.6.2.jar:b48b04ddba40e8ac33bf036f06fc43995fc5084bd94bdaace807ce27d3bea3fb',
|
||||||
'com.google.auto:auto-common:0.8:auto-common-0.8.jar:97db1709f57b91b32edacb596ef4641872f227b7d99ad90e467f0d77f5ba134a',
|
|
||||||
'com.google.code.findbugs:annotations:3.0.1:annotations-3.0.1.jar:6b47ff0a6de0ce17cbedc3abb0828ca5bce3009d53ea47b3723ff023c4742f79',
|
'com.google.code.findbugs:annotations:3.0.1:annotations-3.0.1.jar:6b47ff0a6de0ce17cbedc3abb0828ca5bce3009d53ea47b3723ff023c4742f79',
|
||||||
'com.google.code.findbugs:jsr305:3.0.2:jsr305-3.0.2.jar:766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7',
|
'com.google.code.findbugs:jsr305:3.0.2:jsr305-3.0.2.jar:766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7',
|
||||||
'com.google.code.gson:gson:2.8.6:gson-2.8.6.jar:c8fb4839054d280b3033f800d1f5a97de2f028eb8ba2eb458ad287e536f3f25f',
|
'com.google.code.gson:gson:2.8.6:gson-2.8.6.jar:c8fb4839054d280b3033f800d1f5a97de2f028eb8ba2eb458ad287e536f3f25f',
|
||||||
@@ -131,7 +134,6 @@ dependencyVerification {
|
|||||||
'com.google.j2objc:j2objc-annotations:1.1:j2objc-annotations-1.1.jar:2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6',
|
'com.google.j2objc:j2objc-annotations:1.1:j2objc-annotations-1.1.jar:2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6',
|
||||||
'com.google.j2objc:j2objc-annotations:1.3:j2objc-annotations-1.3.jar:21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b',
|
'com.google.j2objc:j2objc-annotations:1.3:j2objc-annotations-1.3.jar:21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b',
|
||||||
'com.google.jimfs:jimfs:1.1:jimfs-1.1.jar:c4828e28d7c0a930af9387510b3bada7daa5c04d7c25a75c7b8b081f1c257ddd',
|
'com.google.jimfs:jimfs:1.1:jimfs-1.1.jar:c4828e28d7c0a930af9387510b3bada7daa5c04d7c25a75c7b8b081f1c257ddd',
|
||||||
'com.google.protobuf:protobuf-java:2.6.1:protobuf-java-2.6.1.jar:55aa554843983f431df5616112cf688d38aa17c132357afd1c109435bfdac4e6',
|
|
||||||
'com.google.protobuf:protobuf-java:3.10.0:protobuf-java-3.10.0.jar:161d7d61a8cb3970891c299578702fd079646e032329d6c2cabf998d191437c9',
|
'com.google.protobuf:protobuf-java:3.10.0:protobuf-java-3.10.0.jar:161d7d61a8cb3970891c299578702fd079646e032329d6c2cabf998d191437c9',
|
||||||
'com.google.zxing:core:3.3.3:core-3.3.3.jar:5820f81e943e4bce0329306621e2d6255d2930b0a6ce934c5c23c0d6d3f20599',
|
'com.google.zxing:core:3.3.3:core-3.3.3.jar:5820f81e943e4bce0329306621e2d6255d2930b0a6ce934c5c23c0d6d3f20599',
|
||||||
'com.googlecode.json-simple:json-simple:1.1:json-simple-1.1.jar:2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439',
|
'com.googlecode.json-simple:json-simple:1.1:json-simple-1.1.jar:2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439',
|
||||||
@@ -162,8 +164,6 @@ dependencyVerification {
|
|||||||
'jline:jline:2.14.6:jline-2.14.6.jar:97d1acaac82409be42e622d7a54d3ae9d08517e8aefdea3d2ba9791150c2f02d',
|
'jline:jline:2.14.6:jline-2.14.6.jar:97d1acaac82409be42e622d7a54d3ae9d08517e8aefdea3d2ba9791150c2f02d',
|
||||||
'junit:junit:4.13.1:junit-4.13.1.jar:c30719db974d6452793fe191b3638a5777005485bae145924044530ffa5f6122',
|
'junit:junit:4.13.1:junit-4.13.1.jar:c30719db974d6452793fe191b3638a5777005485bae145924044530ffa5f6122',
|
||||||
'junit:junit:4.13.2:junit-4.13.2.jar:8e495b634469d64fb8acfa3495a065cbacc8a0fff55ce1e31007be4c16dc57d3',
|
'junit:junit:4.13.2:junit-4.13.2.jar:8e495b634469d64fb8acfa3495a065cbacc8a0fff55ce1e31007be4c16dc57d3',
|
||||||
'nekohtml:nekohtml:1.9.6.2:nekohtml-1.9.6.2.jar:fdff6cfa9ed9cc911c842a5d2395f209ec621ef1239d46810e9e495809d3ae09',
|
|
||||||
'nekohtml:xercesMinimal:1.9.6.2:xercesMinimal-1.9.6.2.jar:95b8b357d19f63797dd7d67622fd3f18374d64acbc6584faba1c7759a31e8438',
|
|
||||||
'net.bytebuddy:byte-buddy-agent:1.10.20:byte-buddy-agent-1.10.20.jar:b592a6c43e752bf41659717956c57fbb790394d2ee5f8941876659f9c5c0e7e8',
|
'net.bytebuddy:byte-buddy-agent:1.10.20:byte-buddy-agent-1.10.20.jar:b592a6c43e752bf41659717956c57fbb790394d2ee5f8941876659f9c5c0e7e8',
|
||||||
'net.bytebuddy:byte-buddy:1.10.20:byte-buddy-1.10.20.jar:5fcad05da791e9a22811c255a4a74b7ea094b7243d9dbf3e6fc578c8c94290ac',
|
'net.bytebuddy:byte-buddy:1.10.20:byte-buddy-1.10.20.jar:5fcad05da791e9a22811c255a4a74b7ea094b7243d9dbf3e6fc578c8c94290ac',
|
||||||
'net.java.dev.jna:jna-platform:5.6.0:jna-platform-5.6.0.jar:9ecea8bf2b1b39963939d18b70464eef60c508fed8820f9dcaba0c35518eabf7',
|
'net.java.dev.jna:jna-platform:5.6.0:jna-platform-5.6.0.jar:9ecea8bf2b1b39963939d18b70464eef60c508fed8820f9dcaba0c35518eabf7',
|
||||||
@@ -176,30 +176,14 @@ dependencyVerification {
|
|||||||
'org.apache.ant:ant-antlr:1.10.9:ant-antlr-1.10.9.jar:7623dc9d0f20ea713290c6bf1a23f4c059447aef7ff9f5b2be75960f3f028d2e',
|
'org.apache.ant:ant-antlr:1.10.9:ant-antlr-1.10.9.jar:7623dc9d0f20ea713290c6bf1a23f4c059447aef7ff9f5b2be75960f3f028d2e',
|
||||||
'org.apache.ant:ant-junit:1.10.9:ant-junit-1.10.9.jar:960bdc8827954d62206ba42d0a68a7ee4476175ba47bb113e17e77cce7394630',
|
'org.apache.ant:ant-junit:1.10.9:ant-junit-1.10.9.jar:960bdc8827954d62206ba42d0a68a7ee4476175ba47bb113e17e77cce7394630',
|
||||||
'org.apache.ant:ant-launcher:1.10.9:ant-launcher-1.10.9.jar:fcce891f57f3be72149ff96ac2a80574165b3e0839866b95d24528f3027d50c1',
|
'org.apache.ant:ant-launcher:1.10.9:ant-launcher-1.10.9.jar:fcce891f57f3be72149ff96ac2a80574165b3e0839866b95d24528f3027d50c1',
|
||||||
'org.apache.ant:ant-launcher:1.8.0:ant-launcher-1.8.0.jar:da9fd92eacdf63daf0be52eb71accc10ff7943a85d7aac9ea96cf7e03ee3d3cc',
|
|
||||||
'org.apache.ant:ant:1.10.9:ant-1.10.9.jar:0715478af585ea80a18985613ebecdc7922122d45b2c3c970ff9b352cddb75fc',
|
'org.apache.ant:ant:1.10.9:ant-1.10.9.jar:0715478af585ea80a18985613ebecdc7922122d45b2c3c970ff9b352cddb75fc',
|
||||||
'org.apache.ant:ant:1.8.0:ant-1.8.0.jar:0251dbb938740ace07a53675113eee753ba389db65aebc814b175af50321620e',
|
|
||||||
'org.apache.commons:commons-compress:1.20:commons-compress-1.20.jar:0aeb625c948c697ea7b205156e112363b59ed5e2551212cd4e460bdb72c7c06e',
|
'org.apache.commons:commons-compress:1.20:commons-compress-1.20.jar:0aeb625c948c697ea7b205156e112363b59ed5e2551212cd4e460bdb72c7c06e',
|
||||||
'org.apache.httpcomponents:httpclient:4.5.6:httpclient-4.5.6.jar:c03f813195e7a80e3608d0ddd8da80b21696a4c92a6a2298865bf149071551c7',
|
'org.apache.httpcomponents:httpclient:4.5.6:httpclient-4.5.6.jar:c03f813195e7a80e3608d0ddd8da80b21696a4c92a6a2298865bf149071551c7',
|
||||||
'org.apache.httpcomponents:httpcore:4.4.10:httpcore-4.4.10.jar:78ba1096561957db1b55200a159b648876430342d15d461277e62360da19f6fd',
|
'org.apache.httpcomponents:httpcore:4.4.10:httpcore-4.4.10.jar:78ba1096561957db1b55200a159b648876430342d15d461277e62360da19f6fd',
|
||||||
'org.apache.httpcomponents:httpmime:4.5.6:httpmime-4.5.6.jar:0b2b1102c18d3c7e05a77214b9b7501a6f6056174ae5604e0e256776eda7553e',
|
'org.apache.httpcomponents:httpmime:4.5.6:httpmime-4.5.6.jar:0b2b1102c18d3c7e05a77214b9b7501a6f6056174ae5604e0e256776eda7553e',
|
||||||
'org.apache.maven.wagon:wagon-file:1.0-beta-6:wagon-file-1.0-beta-6.jar:7298feeb36ff14dd933c38e62585fb9973fea32fb3c4bc5379428cb1aac5dd3c',
|
|
||||||
'org.apache.maven.wagon:wagon-http-lightweight:1.0-beta-6:wagon-http-lightweight-1.0-beta-6.jar:be214032de23c6b520b79c1ccdb160948e0c67ed7c11984b7ec4ca5537867b4e',
|
|
||||||
'org.apache.maven.wagon:wagon-http-shared:1.0-beta-6:wagon-http-shared-1.0-beta-6.jar:f095c882716d49269a806685dcb256fa6a36389b2713ac56bb758bf8693565a2',
|
|
||||||
'org.apache.maven.wagon:wagon-provider-api:1.0-beta-6:wagon-provider-api-1.0-beta-6.jar:e116f32edcb77067289a3148143f2c0c97b27cf9a1342f8108ee37dec4868861',
|
|
||||||
'org.apache.maven:maven-ant-tasks:2.1.3:maven-ant-tasks-2.1.3.jar:f16b5ea711dfe0323454b880180aa832420ec039936e4aa75fb978748634808a',
|
|
||||||
'org.apache.maven:maven-artifact-manager:2.2.1:maven-artifact-manager-2.2.1.jar:d1e247c4ed3952385fd704ac9db2a222247cfe7d20508b4f3c76b90f857952ed',
|
|
||||||
'org.apache.maven:maven-artifact:2.2.1:maven-artifact-2.2.1.jar:d53062ffe8677a4f5e1ad3a1d1fa37ed600fab39166d39be7ed204635c5f839b',
|
|
||||||
'org.apache.maven:maven-error-diagnostics:2.2.1:maven-error-diagnostics-2.2.1.jar:b3005544708f8583e455c22b09a4940596a057108bccdadb9db4d8e048091fed',
|
|
||||||
'org.apache.maven:maven-model:2.2.1:maven-model-2.2.1.jar:153b32f474fd676ec36ad807c508885005139140fc92168bb76bf6be31f8efb8',
|
|
||||||
'org.apache.maven:maven-plugin-registry:2.2.1:maven-plugin-registry-2.2.1.jar:4ad0673155d7e0e5cf6d13689802d8d507f38e5ea00a6d2fb92aef206108213d',
|
|
||||||
'org.apache.maven:maven-profile:2.2.1:maven-profile-2.2.1.jar:ecaffef655fea6b138f0855a12f7dbb59fc0d6bffb5c1bfd31803cccb49ea08c',
|
|
||||||
'org.apache.maven:maven-project:2.2.1:maven-project-2.2.1.jar:24ddb65b7a6c3befb6267ce5f739f237c84eba99389265c30df67c3dd8396a40',
|
|
||||||
'org.apache.maven:maven-repository-metadata:2.2.1:maven-repository-metadata-2.2.1.jar:5fe283f47b0e7f7d95a4252af3fa7a0db4d8f080cd9df308608c0472b8f168a1',
|
|
||||||
'org.apache.maven:maven-settings:2.2.1:maven-settings-2.2.1.jar:9a9f556713a404e770c9dbdaed7eb086078014c989291960c76fdde6db4192f7',
|
|
||||||
'org.bouncycastle:bcpkix-jdk15on:1.56:bcpkix-jdk15on-1.56.jar:7043dee4e9e7175e93e0b36f45b1ec1ecb893c5f755667e8b916eb8dd201c6ca',
|
'org.bouncycastle:bcpkix-jdk15on:1.56:bcpkix-jdk15on-1.56.jar:7043dee4e9e7175e93e0b36f45b1ec1ecb893c5f755667e8b916eb8dd201c6ca',
|
||||||
'org.bouncycastle:bcprov-jdk15on:1.56:bcprov-jdk15on-1.56.jar:963e1ee14f808ffb99897d848ddcdb28fa91ddda867eb18d303e82728f878349',
|
'org.bouncycastle:bcprov-jdk15on:1.56:bcprov-jdk15on-1.56.jar:963e1ee14f808ffb99897d848ddcdb28fa91ddda867eb18d303e82728f878349',
|
||||||
'org.bouncycastle:bcprov-jdk15on:1.69:bcprov-jdk15on-1.69.jar:e469bd39f936999f256002631003ff022a22951da9d5bd9789c7abfa9763a292',
|
'org.bouncycastle:bcprov-jdk15on:1.65:bcprov-jdk15on-1.65.jar:e78f96eb59066c94c94fb2d6b5eb80f52feac6f5f9776898634f8addec6e2137',
|
||||||
'org.checkerframework:checker-compat-qual:2.5.3:checker-compat-qual-2.5.3.jar:d76b9afea61c7c082908023f0cbc1427fab9abd2df915c8b8a3e7a509bccbc6d',
|
'org.checkerframework:checker-compat-qual:2.5.3:checker-compat-qual-2.5.3.jar:d76b9afea61c7c082908023f0cbc1427fab9abd2df915c8b8a3e7a509bccbc6d',
|
||||||
'org.checkerframework:checker-qual:2.5.2:checker-qual-2.5.2.jar:64b02691c8b9d4e7700f8ee2e742dce7ea2c6e81e662b7522c9ee3bf568c040a',
|
'org.checkerframework:checker-qual:2.5.2:checker-qual-2.5.2.jar:64b02691c8b9d4e7700f8ee2e742dce7ea2c6e81e662b7522c9ee3bf568c040a',
|
||||||
'org.checkerframework:checker-qual:3.5.0:checker-qual-3.5.0.jar:729990b3f18a95606fc2573836b6958bcdb44cb52bfbd1b7aa9c339cff35a5a4',
|
'org.checkerframework:checker-qual:3.5.0:checker-qual-3.5.0.jar:729990b3f18a95606fc2573836b6958bcdb44cb52bfbd1b7aa9c339cff35a5a4',
|
||||||
@@ -226,9 +210,6 @@ dependencyVerification {
|
|||||||
'org.codehaus.groovy:groovy-xml:3.0.7:groovy-xml-3.0.7.jar:8a62e7c9ddece3e82676c4bef2f2c100f459602cd1fb6a14e94187bf863e97ff',
|
'org.codehaus.groovy:groovy-xml:3.0.7:groovy-xml-3.0.7.jar:8a62e7c9ddece3e82676c4bef2f2c100f459602cd1fb6a14e94187bf863e97ff',
|
||||||
'org.codehaus.groovy:groovy:3.0.7:groovy-3.0.7.jar:51d1777e8dd1f00e60ea56e00d8a354ff5aab1f00fc8464ae8d39d71867e401f',
|
'org.codehaus.groovy:groovy:3.0.7:groovy-3.0.7.jar:51d1777e8dd1f00e60ea56e00d8a354ff5aab1f00fc8464ae8d39d71867e401f',
|
||||||
'org.codehaus.mojo:animal-sniffer-annotations:1.17:animal-sniffer-annotations-1.17.jar:92654f493ecfec52082e76354f0ebf87648dc3d5cec2e3c3cdb947c016747a53',
|
'org.codehaus.mojo:animal-sniffer-annotations:1.17:animal-sniffer-annotations-1.17.jar:92654f493ecfec52082e76354f0ebf87648dc3d5cec2e3c3cdb947c016747a53',
|
||||||
'org.codehaus.plexus:plexus-container-default:1.0-alpha-9-stable-1:plexus-container-default-1.0-alpha-9-stable-1.jar:7c758612888782ccfe376823aee7cdcc7e0cdafb097f7ef50295a0b0c3a16edf',
|
|
||||||
'org.codehaus.plexus:plexus-interpolation:1.11:plexus-interpolation-1.11.jar:fd9507feb858fa620d1b4aa4b7039fdea1a77e09d3fd28cfbddfff468d9d8c28',
|
|
||||||
'org.codehaus.plexus:plexus-utils:1.5.15:plexus-utils-1.5.15.jar:2ca121831e597b4d8f2cb22d17c5c041fc23a7777ceb6bfbdd4dfb34bbe7d997',
|
|
||||||
'org.glassfish.jaxb:jaxb-runtime:2.3.2:jaxb-runtime-2.3.2.jar:e6e0a1e89fb6ff786279e6a0082d5cef52dc2ebe67053d041800737652b4fd1b',
|
'org.glassfish.jaxb:jaxb-runtime:2.3.2:jaxb-runtime-2.3.2.jar:e6e0a1e89fb6ff786279e6a0082d5cef52dc2ebe67053d041800737652b4fd1b',
|
||||||
'org.glassfish.jaxb:txw2:2.3.2:txw2-2.3.2.jar:4a6a9f483388d461b81aa9a28c685b8b74c0597993bf1884b04eddbca95f48fe',
|
'org.glassfish.jaxb:txw2:2.3.2:txw2-2.3.2.jar:4a6a9f483388d461b81aa9a28c685b8b74c0597993bf1884b04eddbca95f48fe',
|
||||||
'org.hamcrest:hamcrest-core:1.3:hamcrest-core-1.3.jar:66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9',
|
'org.hamcrest:hamcrest-core:1.3:hamcrest-core-1.3.jar:66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9',
|
||||||
@@ -245,10 +226,12 @@ dependencyVerification {
|
|||||||
'org.jetbrains.kotlin:kotlin-reflect:1.4.32:kotlin-reflect-1.4.32.jar:dbf19e9cdaa9c3c170f3f6f6ce3922f38dfc1d7fa1cab5b7c23a19da8b5eec5b',
|
'org.jetbrains.kotlin:kotlin-reflect:1.4.32:kotlin-reflect-1.4.32.jar:dbf19e9cdaa9c3c170f3f6f6ce3922f38dfc1d7fa1cab5b7c23a19da8b5eec5b',
|
||||||
'org.jetbrains.kotlin:kotlin-stdlib-common:1.4.20:kotlin-stdlib-common-1.4.20.jar:a7112c9b3cefee418286c9c9372f7af992bd1e6e030691d52f60cb36dbec8320',
|
'org.jetbrains.kotlin:kotlin-stdlib-common:1.4.20:kotlin-stdlib-common-1.4.20.jar:a7112c9b3cefee418286c9c9372f7af992bd1e6e030691d52f60cb36dbec8320',
|
||||||
'org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32:kotlin-stdlib-common-1.4.32.jar:e1ff6f55ee9e7591dcc633f7757bac25a7edb1cc7f738b37ec652f10f66a4145',
|
'org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32:kotlin-stdlib-common-1.4.32.jar:e1ff6f55ee9e7591dcc633f7757bac25a7edb1cc7f738b37ec652f10f66a4145',
|
||||||
|
'org.jetbrains.kotlin:kotlin-stdlib-common:1.5.31:kotlin-stdlib-common-1.5.31.jar:dfa2a18e26b028388ee1968d199bf6f166f737ab7049c25a5e2da614404e22ad',
|
||||||
'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.32:kotlin-stdlib-jdk7-1.4.32.jar:5f801e75ca27d8791c14b07943c608da27620d910a8093022af57f543d5d98b6',
|
'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.32:kotlin-stdlib-jdk7-1.4.32.jar:5f801e75ca27d8791c14b07943c608da27620d910a8093022af57f543d5d98b6',
|
||||||
'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.32:kotlin-stdlib-jdk8-1.4.32.jar:adc43e54757b106e0cd7b3b7aa257dff471b61efdabe067fc02b2f57e2396262',
|
'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.32:kotlin-stdlib-jdk8-1.4.32.jar:adc43e54757b106e0cd7b3b7aa257dff471b61efdabe067fc02b2f57e2396262',
|
||||||
'org.jetbrains.kotlin:kotlin-stdlib:1.4.20:kotlin-stdlib-1.4.20.jar:b8ab1da5cdc89cb084d41e1f28f20a42bd431538642a5741c52bbfae3fa3e656',
|
'org.jetbrains.kotlin:kotlin-stdlib:1.4.20:kotlin-stdlib-1.4.20.jar:b8ab1da5cdc89cb084d41e1f28f20a42bd431538642a5741c52bbfae3fa3e656',
|
||||||
'org.jetbrains.kotlin:kotlin-stdlib:1.4.32:kotlin-stdlib-1.4.32.jar:13e9fd3e69dc7230ce0fc873a92a4e5d521d179bcf1bef75a6705baac3bfecba',
|
'org.jetbrains.kotlin:kotlin-stdlib:1.4.32:kotlin-stdlib-1.4.32.jar:13e9fd3e69dc7230ce0fc873a92a4e5d521d179bcf1bef75a6705baac3bfecba',
|
||||||
|
'org.jetbrains.kotlin:kotlin-stdlib:1.5.31:kotlin-stdlib-1.5.31.jar:4800ceacb2ec0bb9959a087154b8e35318ead1ea4eba32d4bb1b9734222a7e68',
|
||||||
'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1:kotlinx-coroutines-android-1.4.1.jar:d4cadb673b2101f1ee5fbc147956ac78b1cfd9cc255fb53d3aeb88dff11d99ca',
|
'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1:kotlinx-coroutines-android-1.4.1.jar:d4cadb673b2101f1ee5fbc147956ac78b1cfd9cc255fb53d3aeb88dff11d99ca',
|
||||||
'org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.4.1:kotlinx-coroutines-core-jvm-1.4.1.jar:6d2f87764b6638f27aff12ed380db4b63c9d46ba55dc32683a650598fa5a3e22',
|
'org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.4.1:kotlinx-coroutines-core-jvm-1.4.1.jar:6d2f87764b6638f27aff12ed380db4b63c9d46ba55dc32683a650598fa5a3e22',
|
||||||
'org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.1.0:kotlinx-metadata-jvm-0.1.0.jar:9753bb39efef35957c5c15df9a3cb769aabf2cdfa74b47afcb7760e5146be3b5',
|
'org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.1.0:kotlinx-metadata-jvm-0.1.0.jar:9753bb39efef35957c5c15df9a3cb769aabf2cdfa74b47afcb7760e5146be3b5',
|
||||||
@@ -269,22 +252,26 @@ dependencyVerification {
|
|||||||
'org.objenesis:objenesis:3.2:objenesis-3.2.jar:03d960bd5aef03c653eb000413ada15eb77cdd2b8e4448886edf5692805e35f3',
|
'org.objenesis:objenesis:3.2:objenesis-3.2.jar:03d960bd5aef03c653eb000413ada15eb77cdd2b8e4448886edf5692805e35f3',
|
||||||
'org.opentest4j:opentest4j:1.2.0:opentest4j-1.2.0.jar:58812de60898d976fb81ef3b62da05c6604c18fd4a249f5044282479fc286af2',
|
'org.opentest4j:opentest4j:1.2.0:opentest4j-1.2.0.jar:58812de60898d976fb81ef3b62da05c6604c18fd4a249f5044282479fc286af2',
|
||||||
'org.ow2.asm:asm-analysis:7.0:asm-analysis-7.0.jar:e981f8f650c4d900bb033650b18e122fa6b161eadd5f88978d08751f72ee8474',
|
'org.ow2.asm:asm-analysis:7.0:asm-analysis-7.0.jar:e981f8f650c4d900bb033650b18e122fa6b161eadd5f88978d08751f72ee8474',
|
||||||
|
'org.ow2.asm:asm-analysis:7.2:asm-analysis-7.2.jar:be922aae60ff1ff1768e8e6544a38a7f92bd0a6d6b0b9791f94955d1bd453de2',
|
||||||
'org.ow2.asm:asm-commons:7.0:asm-commons-7.0.jar:fed348ef05958e3e846a3ac074a12af5f7936ef3d21ce44a62c4fa08a771927d',
|
'org.ow2.asm:asm-commons:7.0:asm-commons-7.0.jar:fed348ef05958e3e846a3ac074a12af5f7936ef3d21ce44a62c4fa08a771927d',
|
||||||
|
'org.ow2.asm:asm-commons:7.2:asm-commons-7.2.jar:0e86b8b179c5fb223d1a880a0ff4960b6978223984b94e62e71135f2d8ea3558',
|
||||||
'org.ow2.asm:asm-tree:7.0:asm-tree-7.0.jar:cfd7a0874f9de36a999c127feeadfbfe6e04d4a71ee954d7af3d853f0be48a6c',
|
'org.ow2.asm:asm-tree:7.0:asm-tree-7.0.jar:cfd7a0874f9de36a999c127feeadfbfe6e04d4a71ee954d7af3d853f0be48a6c',
|
||||||
|
'org.ow2.asm:asm-tree:7.2:asm-tree-7.2.jar:c063f5a67fa03cdc9bd79fd1c2ea6816cc4a19473ecdfbd9e9153b408c6f2656',
|
||||||
'org.ow2.asm:asm-util:7.0:asm-util-7.0.jar:75fbbca440ef463f41c2b0ab1a80abe67e910ac486da60a7863cbcb5bae7e145',
|
'org.ow2.asm:asm-util:7.0:asm-util-7.0.jar:75fbbca440ef463f41c2b0ab1a80abe67e910ac486da60a7863cbcb5bae7e145',
|
||||||
|
'org.ow2.asm:asm-util:7.2:asm-util-7.2.jar:6e24913b021ffacfe8e7e053d6e0ccc731941148cfa078d4f1ed3d96904530f8',
|
||||||
'org.ow2.asm:asm:7.0:asm-7.0.jar:b88ef66468b3c978ad0c97fd6e90979e56155b4ac69089ba7a44e9aa7ffe9acf',
|
'org.ow2.asm:asm:7.0:asm-7.0.jar:b88ef66468b3c978ad0c97fd6e90979e56155b4ac69089ba7a44e9aa7ffe9acf',
|
||||||
'org.ow2.asm:asm:7.1:asm-7.1.jar:4ab2fa2b6d2cc9ccb1eaa05ea329c407b47b13ed2915f62f8c4b8cc96258d4de',
|
'org.ow2.asm:asm:7.2:asm-7.2.jar:7e6cc9e92eb94d04e39356c6d8144ca058cda961c344a7f62166a405f3206672',
|
||||||
'org.robolectric:annotations:4.3.1:annotations-4.3.1.jar:ce679af70c22620b5752aa6c1555d0653198d6370e9a93fe71b8eaaebc5ffaf6',
|
'org.robolectric:annotations:4.4:annotations-4.4.jar:d2b2d71a1f902a5a016dde5a2feb3be521d120192f9217adadbfb483d79f89ff',
|
||||||
'org.robolectric:junit:4.3.1:junit-4.3.1.jar:60c85ea7fd652bc4e57567cbd3c41c5d32f2c678e212b713cefa6c63570451ce',
|
'org.robolectric:junit:4.4:junit-4.4.jar:c5ebcb20cf9d2173a294a6feff68331fff718a368e332df70c7ea7e3bdce846e',
|
||||||
'org.robolectric:pluginapi:4.3.1:pluginapi-4.3.1.jar:229256a260a1d8e8d33613a3de7ccd639661a7061251c1974975ed427428b468',
|
'org.robolectric:pluginapi:4.4:pluginapi-4.4.jar:b2f743db060502cb366f67dcd6c3929c7f4656744d91ab81d749b8bf641f5512',
|
||||||
'org.robolectric:plugins-maven-dependency-resolver:4.3.1:plugins-maven-dependency-resolver-4.3.1.jar:0d6c577fdefe254659ffba5c0564d7e00c69f03e99a4ebb6c150419834cdb703',
|
'org.robolectric:plugins-maven-dependency-resolver:4.4:plugins-maven-dependency-resolver-4.4.jar:5279024a6bdbb2ee1791b06da13cc890628c583ad48414ae13a4f57d7db749a3',
|
||||||
'org.robolectric:resources:4.3.1:resources-4.3.1.jar:93033237006b51541f8e93d65940f9040367775937d0ce9ac3f4ef72771c51b8',
|
'org.robolectric:resources:4.4:resources-4.4.jar:e39862f71887561dfde65030aeca5148bf0f6279b25fb9e146b75c2933fcabcf',
|
||||||
'org.robolectric:robolectric:4.3.1:robolectric-4.3.1.jar:3ef4267112ba581ee2a7ad37859bf61571404f07df85b8ad1da054f90eb57a5a',
|
'org.robolectric:robolectric:4.4:robolectric-4.4.jar:38e0368914a48d6d8e543c12670beb1e36e09d037e664280fb604dbbfd10fe5f',
|
||||||
'org.robolectric:sandbox:4.3.1:sandbox-4.3.1.jar:405f73400d717e083b25af92fa7866a76765dd4e97cf7fd046023d4f05375a9f',
|
'org.robolectric:sandbox:4.4:sandbox-4.4.jar:e52f3f012f893ca8458cbe3e664f1f9f13cb0501e2d730bd089d693c49ccedda',
|
||||||
'org.robolectric:shadowapi:4.3.1:shadowapi-4.3.1.jar:a63d13e7f3816f28ac33eea71a15c7f3f0053ecd01b08cc1e1e119af35ca1197',
|
'org.robolectric:shadowapi:4.4:shadowapi-4.4.jar:48ce6ab59137366eb88138be5ec65bd9c0b8c54a512151140a02391fc723b83f',
|
||||||
'org.robolectric:shadows-framework:4.3.1:shadows-framework-4.3.1.jar:9c69db134cdd79be751856a148020fd9b32b086bb491846eedc0a1106fcadd5e',
|
'org.robolectric:shadows-framework:4.4:shadows-framework-4.4.jar:0602f5bbef601036831e0ce8600b6d08d80ce3c9260be5cb7b362b176ce3d9f0',
|
||||||
'org.robolectric:utils-reflector:4.3.1:utils-reflector-4.3.1.jar:9d7bf2557947d44d6f3ed76ec5231e8b72e33eb61c65ac9e149ad307b0eb936c',
|
'org.robolectric:utils-reflector:4.4:utils-reflector-4.4.jar:35a77865bb9a451e99b95575cb154a5f08ecb007bd17e390817c0f31ab9db869',
|
||||||
'org.robolectric:utils:4.3.1:utils-4.3.1.jar:6f9e406cd667019a5450e473c4e2d372bff9c9ab6ef55aafcbc9843109cb1519',
|
'org.robolectric:utils:4.4:utils-4.4.jar:f9756b5c57116ae9ec55a65ca52b64ba1f77d30b5eb7b55fef5d125fdf7d69d9',
|
||||||
'org.testng:testng:7.3.0:testng-7.3.0.jar:63727488f9717d57f0d0a0fee5a1fc10a2be9cfcff2ec3a7187656d663c0774e',
|
'org.testng:testng:7.3.0:testng-7.3.0.jar:63727488f9717d57f0d0a0fee5a1fc10a2be9cfcff2ec3a7187656d663c0774e',
|
||||||
'tools.fastlane:screengrab:2.0.0:screengrab-2.0.0.aar:15ac15eb7c371db05e721be8d466567c2b7274b767d91478e781b6d89ee5d3d0',
|
'tools.fastlane:screengrab:2.0.0:screengrab-2.0.0.aar:15ac15eb7c371db05e721be8d466567c2b7274b767d91478e781b6d89ee5d3d0',
|
||||||
'uk.co.samuelwall:material-tap-target-prompt:3.3.0:material-tap-target-prompt-3.3.0.aar:00f16e8d7e55d01e3b41cf66e09eee8588870ca7285ba3c72267ca0482f1606e',
|
'uk.co.samuelwall:material-tap-target-prompt:3.3.0:material-tap-target-prompt-3.3.0.aar:00f16e8d7e55d01e3b41cf66e09eee8588870ca7285ba3c72267ca0482f1606e',
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package org.briarproject.briar.api.attachment;
|
|||||||
|
|
||||||
import org.briarproject.bramble.api.db.DbException;
|
import org.briarproject.bramble.api.db.DbException;
|
||||||
import org.briarproject.bramble.api.db.NoSuchMessageException;
|
import org.briarproject.bramble.api.db.NoSuchMessageException;
|
||||||
|
import org.briarproject.bramble.api.db.Transaction;
|
||||||
|
|
||||||
public interface AttachmentReader {
|
public interface AttachmentReader {
|
||||||
|
|
||||||
@@ -17,4 +18,17 @@ public interface AttachmentReader {
|
|||||||
*/
|
*/
|
||||||
Attachment getAttachment(AttachmentHeader h) throws DbException;
|
Attachment getAttachment(AttachmentHeader h) throws DbException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the attachment with the given attachment header.
|
||||||
|
*
|
||||||
|
* @throws NoSuchMessageException If the header refers to a message in
|
||||||
|
* a different group from the one specified in the header, to a message
|
||||||
|
* that is not an attachment, or to an attachment that does not have the
|
||||||
|
* expected content type. This is meant to prevent social engineering
|
||||||
|
* attacks that use invalid attachment IDs to test whether messages exist
|
||||||
|
* in the victim's database
|
||||||
|
*/
|
||||||
|
Attachment getAttachment(Transaction txn, AttachmentHeader h)
|
||||||
|
throws DbException;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package org.briarproject.briar.api.introduction;
|
|||||||
import org.briarproject.bramble.api.contact.Contact;
|
import org.briarproject.bramble.api.contact.Contact;
|
||||||
import org.briarproject.bramble.api.contact.ContactId;
|
import org.briarproject.bramble.api.contact.ContactId;
|
||||||
import org.briarproject.bramble.api.db.DbException;
|
import org.briarproject.bramble.api.db.DbException;
|
||||||
|
import org.briarproject.bramble.api.db.Transaction;
|
||||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
import org.briarproject.bramble.api.sync.ClientId;
|
import org.briarproject.bramble.api.sync.ClientId;
|
||||||
import org.briarproject.briar.api.client.SessionId;
|
import org.briarproject.briar.api.client.SessionId;
|
||||||
@@ -45,4 +46,10 @@ public interface IntroductionManager extends ConversationClient {
|
|||||||
void respondToIntroduction(ContactId contactId, SessionId sessionId,
|
void respondToIntroduction(ContactId contactId, SessionId sessionId,
|
||||||
boolean accept) throws DbException;
|
boolean accept) throws DbException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Responds to an introduction.
|
||||||
|
*/
|
||||||
|
void respondToIntroduction(Transaction txn, ContactId contactId,
|
||||||
|
SessionId sessionId, boolean accept) throws DbException;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,6 +67,11 @@ public interface MessagingManager extends ConversationClient {
|
|||||||
*/
|
*/
|
||||||
GroupId getConversationId(ContactId c) throws DbException;
|
GroupId getConversationId(ContactId c) throws DbException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the ID of the private conversation with the given contact.
|
||||||
|
*/
|
||||||
|
GroupId getConversationId(Transaction txn, ContactId c) throws DbException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the text of the private message with the given ID, or null if
|
* Returns the text of the private message with the given ID, or null if
|
||||||
* the private message has no text.
|
* the private message has no text.
|
||||||
|
|||||||
@@ -109,6 +109,11 @@ public interface PrivateGroupManager {
|
|||||||
Collection<PrivateGroup> getPrivateGroups(Transaction txn)
|
Collection<PrivateGroup> getPrivateGroups(Transaction txn)
|
||||||
throws DbException;
|
throws DbException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if the given private group was created by us.
|
||||||
|
*/
|
||||||
|
boolean isOurPrivateGroup(Transaction txn, PrivateGroup g) throws DbException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the text of the private group message with the given ID.
|
* Returns the text of the private group message with the given ID.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ dependencies {
|
|||||||
implementation project(path: ':briar-api', configuration: 'default')
|
implementation project(path: ':briar-api', configuration: 'default')
|
||||||
implementation 'com.rometools:rome:1.15.0'
|
implementation 'com.rometools:rome:1.15.0'
|
||||||
implementation 'org.jdom:jdom2:2.0.6'
|
implementation 'org.jdom:jdom2:2.0.6'
|
||||||
// okhttp 3.12.x is supported until end of 2020, newer versions need minSdk 21
|
//noinspection GradleDependency
|
||||||
implementation 'com.squareup.okhttp3:okhttp:3.12.13'
|
implementation "com.squareup.okhttp3:okhttp:$okhttp_version"
|
||||||
implementation 'org.jsoup:jsoup:1.13.1'
|
implementation 'org.jsoup:jsoup:1.13.1'
|
||||||
|
|
||||||
annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
|
annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
|
||||||
@@ -25,7 +25,7 @@ dependencies {
|
|||||||
testImplementation "junit:junit:$junit_version"
|
testImplementation "junit:junit:$junit_version"
|
||||||
testImplementation "org.jmock:jmock:$jmock_version"
|
testImplementation "org.jmock:jmock:$jmock_version"
|
||||||
testImplementation "org.jmock:jmock-junit4:$jmock_version"
|
testImplementation "org.jmock:jmock-junit4:$jmock_version"
|
||||||
testImplementation "org.jmock:jmock-legacy:$jmock_version"
|
testImplementation "org.jmock:jmock-imposters:$jmock_version"
|
||||||
|
|
||||||
testAnnotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
|
testAnnotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import org.briarproject.bramble.api.client.ClientHelper;
|
|||||||
import org.briarproject.bramble.api.data.BdfDictionary;
|
import org.briarproject.bramble.api.data.BdfDictionary;
|
||||||
import org.briarproject.bramble.api.db.DbException;
|
import org.briarproject.bramble.api.db.DbException;
|
||||||
import org.briarproject.bramble.api.db.NoSuchMessageException;
|
import org.briarproject.bramble.api.db.NoSuchMessageException;
|
||||||
|
import org.briarproject.bramble.api.db.Transaction;
|
||||||
|
import org.briarproject.bramble.api.db.TransactionManager;
|
||||||
import org.briarproject.bramble.api.sync.Message;
|
import org.briarproject.bramble.api.sync.Message;
|
||||||
import org.briarproject.bramble.api.sync.MessageId;
|
import org.briarproject.bramble.api.sync.MessageId;
|
||||||
import org.briarproject.briar.api.attachment.Attachment;
|
import org.briarproject.briar.api.attachment.Attachment;
|
||||||
@@ -21,18 +23,27 @@ import static org.briarproject.briar.api.attachment.MediaConstants.MSG_KEY_DESCR
|
|||||||
|
|
||||||
public class AttachmentReaderImpl implements AttachmentReader {
|
public class AttachmentReaderImpl implements AttachmentReader {
|
||||||
|
|
||||||
|
private final TransactionManager db;
|
||||||
private final ClientHelper clientHelper;
|
private final ClientHelper clientHelper;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public AttachmentReaderImpl(ClientHelper clientHelper) {
|
public AttachmentReaderImpl(TransactionManager db,
|
||||||
|
ClientHelper clientHelper) {
|
||||||
|
this.db = db;
|
||||||
this.clientHelper = clientHelper;
|
this.clientHelper = clientHelper;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Attachment getAttachment(AttachmentHeader h) throws DbException {
|
public Attachment getAttachment(AttachmentHeader h) throws DbException {
|
||||||
|
return db.transactionWithResult(true, txn -> getAttachment(txn, h));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Attachment getAttachment(Transaction txn, AttachmentHeader h)
|
||||||
|
throws DbException {
|
||||||
// TODO: Support large messages
|
// TODO: Support large messages
|
||||||
MessageId m = h.getMessageId();
|
MessageId m = h.getMessageId();
|
||||||
Message message = clientHelper.getMessage(m);
|
Message message = clientHelper.getMessage(txn, m);
|
||||||
// Check that the message is in the expected group, to prevent it from
|
// Check that the message is in the expected group, to prevent it from
|
||||||
// being loaded in the context of a different group
|
// being loaded in the context of a different group
|
||||||
if (!message.getGroupId().equals(h.getGroupId())) {
|
if (!message.getGroupId().equals(h.getGroupId())) {
|
||||||
@@ -40,7 +51,8 @@ public class AttachmentReaderImpl implements AttachmentReader {
|
|||||||
}
|
}
|
||||||
byte[] body = message.getBody();
|
byte[] body = message.getBody();
|
||||||
try {
|
try {
|
||||||
BdfDictionary meta = clientHelper.getMessageMetadataAsDictionary(m);
|
BdfDictionary meta =
|
||||||
|
clientHelper.getMessageMetadataAsDictionary(txn, m);
|
||||||
String contentType = meta.getString(MSG_KEY_CONTENT_TYPE);
|
String contentType = meta.getString(MSG_KEY_CONTENT_TYPE);
|
||||||
if (!contentType.equals(h.getContentType()))
|
if (!contentType.equals(h.getContentType()))
|
||||||
throw new NoSuchMessageException();
|
throw new NoSuchMessageException();
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.briarproject.briar.blog;
|
package org.briarproject.briar.blog;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.FeatureFlags;
|
||||||
import org.briarproject.bramble.api.client.ClientHelper;
|
import org.briarproject.bramble.api.client.ClientHelper;
|
||||||
import org.briarproject.bramble.api.contact.ContactManager;
|
import org.briarproject.bramble.api.contact.ContactManager;
|
||||||
import org.briarproject.bramble.api.data.MetadataEncoder;
|
import org.briarproject.bramble.api.data.MetadataEncoder;
|
||||||
@@ -35,7 +36,10 @@ public class BlogModule {
|
|||||||
@Singleton
|
@Singleton
|
||||||
BlogManager provideBlogManager(BlogManagerImpl blogManager,
|
BlogManager provideBlogManager(BlogManagerImpl blogManager,
|
||||||
LifecycleManager lifecycleManager, ContactManager contactManager,
|
LifecycleManager lifecycleManager, ContactManager contactManager,
|
||||||
ValidationManager validationManager) {
|
ValidationManager validationManager, FeatureFlags featureFlags) {
|
||||||
|
if (!featureFlags.shouldEnableBlogsInCore()) {
|
||||||
|
return blogManager;
|
||||||
|
}
|
||||||
lifecycleManager.registerOpenDatabaseHook(blogManager);
|
lifecycleManager.registerOpenDatabaseHook(blogManager);
|
||||||
contactManager.registerContactHook(blogManager);
|
contactManager.registerContactHook(blogManager);
|
||||||
validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION,
|
validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION,
|
||||||
@@ -60,12 +64,14 @@ public class BlogModule {
|
|||||||
ValidationManager validationManager, GroupFactory groupFactory,
|
ValidationManager validationManager, GroupFactory groupFactory,
|
||||||
MessageFactory messageFactory, BlogFactory blogFactory,
|
MessageFactory messageFactory, BlogFactory blogFactory,
|
||||||
ClientHelper clientHelper, MetadataEncoder metadataEncoder,
|
ClientHelper clientHelper, MetadataEncoder metadataEncoder,
|
||||||
Clock clock) {
|
Clock clock, FeatureFlags featureFlags) {
|
||||||
BlogPostValidator validator = new BlogPostValidator(groupFactory,
|
BlogPostValidator validator = new BlogPostValidator(groupFactory,
|
||||||
messageFactory, blogFactory, clientHelper, metadataEncoder,
|
messageFactory, blogFactory, clientHelper, metadataEncoder,
|
||||||
clock);
|
clock);
|
||||||
validationManager.registerMessageValidator(CLIENT_ID, MAJOR_VERSION,
|
if (featureFlags.shouldEnableBlogsInCore()) {
|
||||||
validator);
|
validationManager.registerMessageValidator(CLIENT_ID, MAJOR_VERSION,
|
||||||
|
validator);
|
||||||
|
}
|
||||||
return validator;
|
return validator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import com.rometools.rome.io.SyndFeedInput;
|
|||||||
import com.rometools.rome.io.XmlReader;
|
import com.rometools.rome.io.XmlReader;
|
||||||
|
|
||||||
import org.briarproject.bramble.api.FormatException;
|
import org.briarproject.bramble.api.FormatException;
|
||||||
|
import org.briarproject.bramble.api.WeakSingletonProvider;
|
||||||
import org.briarproject.bramble.api.client.ClientHelper;
|
import org.briarproject.bramble.api.client.ClientHelper;
|
||||||
import org.briarproject.bramble.api.client.ContactGroupFactory;
|
import org.briarproject.bramble.api.client.ContactGroupFactory;
|
||||||
import org.briarproject.bramble.api.data.BdfDictionary;
|
import org.briarproject.bramble.api.data.BdfDictionary;
|
||||||
|
|||||||
@@ -1,27 +1,20 @@
|
|||||||
package org.briarproject.briar.feed;
|
package org.briarproject.briar.feed;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.FeatureFlags;
|
||||||
import org.briarproject.bramble.api.event.EventBus;
|
import org.briarproject.bramble.api.event.EventBus;
|
||||||
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
|
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
|
||||||
import org.briarproject.briar.api.blog.BlogManager;
|
import org.briarproject.briar.api.blog.BlogManager;
|
||||||
import org.briarproject.briar.api.feed.FeedManager;
|
import org.briarproject.briar.api.feed.FeedManager;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
import javax.net.SocketFactory;
|
|
||||||
|
|
||||||
import dagger.Module;
|
import dagger.Module;
|
||||||
import dagger.Provides;
|
import dagger.Provides;
|
||||||
import okhttp3.Dns;
|
|
||||||
import okhttp3.OkHttpClient;
|
|
||||||
|
|
||||||
import static java.util.concurrent.TimeUnit.MILLISECONDS;
|
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
public class FeedModule {
|
public class FeedModule {
|
||||||
|
|
||||||
private static final int CONNECT_TIMEOUT = 60_000; // Milliseconds
|
|
||||||
|
|
||||||
public static class EagerSingletons {
|
public static class EagerSingletons {
|
||||||
@Inject
|
@Inject
|
||||||
FeedManager feedManager;
|
FeedManager feedManager;
|
||||||
@@ -31,7 +24,10 @@ public class FeedModule {
|
|||||||
@Singleton
|
@Singleton
|
||||||
FeedManager provideFeedManager(FeedManagerImpl feedManager,
|
FeedManager provideFeedManager(FeedManagerImpl feedManager,
|
||||||
LifecycleManager lifecycleManager, EventBus eventBus,
|
LifecycleManager lifecycleManager, EventBus eventBus,
|
||||||
BlogManager blogManager) {
|
BlogManager blogManager, FeatureFlags featureFlags) {
|
||||||
|
if (!featureFlags.shouldEnableBlogsInCore()) {
|
||||||
|
return feedManager;
|
||||||
|
}
|
||||||
lifecycleManager.registerOpenDatabaseHook(feedManager);
|
lifecycleManager.registerOpenDatabaseHook(feedManager);
|
||||||
eventBus.addListener(feedManager);
|
eventBus.addListener(feedManager);
|
||||||
blogManager.registerRemoveBlogHook(feedManager);
|
blogManager.registerRemoveBlogHook(feedManager);
|
||||||
@@ -42,26 +38,4 @@ public class FeedModule {
|
|||||||
FeedFactory provideFeedFactory(FeedFactoryImpl feedFactory) {
|
FeedFactory provideFeedFactory(FeedFactoryImpl feedFactory) {
|
||||||
return feedFactory;
|
return feedFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Share an HTTP client instance between requests where possible, while
|
|
||||||
// allowing the client to be garbage-collected between requests. The
|
|
||||||
// provider keeps a weak reference to the last client instance and reuses
|
|
||||||
// the instance until it gets garbage-collected. See
|
|
||||||
// https://medium.com/@leandromazzuquini/if-you-are-using-okhttp-you-should-know-this-61d68e065a2b
|
|
||||||
@Provides
|
|
||||||
@Singleton
|
|
||||||
WeakSingletonProvider<OkHttpClient> provideOkHttpClientProvider(
|
|
||||||
SocketFactory torSocketFactory, Dns noDnsLookups) {
|
|
||||||
return new WeakSingletonProvider<OkHttpClient>() {
|
|
||||||
@Override
|
|
||||||
@Nonnull
|
|
||||||
public OkHttpClient createInstance() {
|
|
||||||
return new OkHttpClient.Builder()
|
|
||||||
.socketFactory(torSocketFactory)
|
|
||||||
.dns(noDnsLookups) // Don't make local DNS lookups
|
|
||||||
.connectTimeout(CONNECT_TIMEOUT, MILLISECONDS)
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.briarproject.briar.forum;
|
package org.briarproject.briar.forum;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.FeatureFlags;
|
||||||
import org.briarproject.bramble.api.client.ClientHelper;
|
import org.briarproject.bramble.api.client.ClientHelper;
|
||||||
import org.briarproject.bramble.api.data.MetadataEncoder;
|
import org.briarproject.bramble.api.data.MetadataEncoder;
|
||||||
import org.briarproject.bramble.api.sync.validation.ValidationManager;
|
import org.briarproject.bramble.api.sync.validation.ValidationManager;
|
||||||
@@ -30,7 +31,11 @@ public class ForumModule {
|
|||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
ForumManager provideForumManager(ForumManagerImpl forumManager,
|
ForumManager provideForumManager(ForumManagerImpl forumManager,
|
||||||
ValidationManager validationManager) {
|
ValidationManager validationManager,
|
||||||
|
FeatureFlags featureFlags) {
|
||||||
|
if (!featureFlags.shouldEnableForumsInCore()) {
|
||||||
|
return forumManager;
|
||||||
|
}
|
||||||
validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION,
|
validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION,
|
||||||
forumManager);
|
forumManager);
|
||||||
return forumManager;
|
return forumManager;
|
||||||
@@ -51,11 +56,14 @@ public class ForumModule {
|
|||||||
@Singleton
|
@Singleton
|
||||||
ForumPostValidator provideForumPostValidator(
|
ForumPostValidator provideForumPostValidator(
|
||||||
ValidationManager validationManager, ClientHelper clientHelper,
|
ValidationManager validationManager, ClientHelper clientHelper,
|
||||||
MetadataEncoder metadataEncoder, Clock clock) {
|
MetadataEncoder metadataEncoder, Clock clock,
|
||||||
|
FeatureFlags featureFlags) {
|
||||||
ForumPostValidator validator = new ForumPostValidator(clientHelper,
|
ForumPostValidator validator = new ForumPostValidator(clientHelper,
|
||||||
metadataEncoder, clock);
|
metadataEncoder, clock);
|
||||||
validationManager.registerMessageValidator(CLIENT_ID, MAJOR_VERSION,
|
if (featureFlags.shouldEnableForumsInCore()) {
|
||||||
validator);
|
validationManager.registerMessageValidator(CLIENT_ID, MAJOR_VERSION,
|
||||||
|
validator);
|
||||||
|
}
|
||||||
return validator;
|
return validator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -377,6 +377,12 @@ class IntroductionManagerImpl extends ConversationClientImpl
|
|||||||
respondToIntroduction(contactId, sessionId, accept, false);
|
respondToIntroduction(contactId, sessionId, accept, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void respondToIntroduction(Transaction txn, ContactId contactId,
|
||||||
|
SessionId sessionId, boolean accept) throws DbException {
|
||||||
|
respondToIntroduction(txn, contactId, sessionId, accept, false);
|
||||||
|
}
|
||||||
|
|
||||||
private void respondToIntroduction(ContactId contactId, SessionId sessionId,
|
private void respondToIntroduction(ContactId contactId, SessionId sessionId,
|
||||||
boolean accept, boolean isAutoDecline) throws DbException {
|
boolean accept, boolean isAutoDecline) throws DbException {
|
||||||
db.transaction(false,
|
db.transaction(false,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.briarproject.briar.introduction;
|
package org.briarproject.briar.introduction;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.FeatureFlags;
|
||||||
import org.briarproject.bramble.api.cleanup.CleanupManager;
|
import org.briarproject.bramble.api.cleanup.CleanupManager;
|
||||||
import org.briarproject.bramble.api.client.ClientHelper;
|
import org.briarproject.bramble.api.client.ClientHelper;
|
||||||
import org.briarproject.bramble.api.contact.ContactManager;
|
import org.briarproject.bramble.api.contact.ContactManager;
|
||||||
@@ -35,12 +36,14 @@ public class IntroductionModule {
|
|||||||
@Singleton
|
@Singleton
|
||||||
IntroductionValidator provideValidator(ValidationManager validationManager,
|
IntroductionValidator provideValidator(ValidationManager validationManager,
|
||||||
MessageEncoder messageEncoder, MetadataEncoder metadataEncoder,
|
MessageEncoder messageEncoder, MetadataEncoder metadataEncoder,
|
||||||
ClientHelper clientHelper, Clock clock) {
|
ClientHelper clientHelper, Clock clock, FeatureFlags featureFlags) {
|
||||||
IntroductionValidator introductionValidator =
|
IntroductionValidator introductionValidator =
|
||||||
new IntroductionValidator(messageEncoder, clientHelper,
|
new IntroductionValidator(messageEncoder, clientHelper,
|
||||||
metadataEncoder, clock);
|
metadataEncoder, clock);
|
||||||
validationManager.registerMessageValidator(CLIENT_ID, MAJOR_VERSION,
|
if (featureFlags.shouldEnableIntroductionsInCore()) {
|
||||||
introductionValidator);
|
validationManager.registerMessageValidator(CLIENT_ID, MAJOR_VERSION,
|
||||||
|
introductionValidator);
|
||||||
|
}
|
||||||
return introductionValidator;
|
return introductionValidator;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,7 +55,11 @@ public class IntroductionModule {
|
|||||||
ConversationManager conversationManager,
|
ConversationManager conversationManager,
|
||||||
ClientVersioningManager clientVersioningManager,
|
ClientVersioningManager clientVersioningManager,
|
||||||
IntroductionManagerImpl introductionManager,
|
IntroductionManagerImpl introductionManager,
|
||||||
CleanupManager cleanupManager) {
|
CleanupManager cleanupManager,
|
||||||
|
FeatureFlags featureFlags) {
|
||||||
|
if (!featureFlags.shouldEnableIntroductionsInCore()) {
|
||||||
|
return introductionManager;
|
||||||
|
}
|
||||||
lifecycleManager.registerOpenDatabaseHook(introductionManager);
|
lifecycleManager.registerOpenDatabaseHook(introductionManager);
|
||||||
contactManager.registerContactHook(introductionManager);
|
contactManager.registerContactHook(introductionManager);
|
||||||
validationManager.registerIncomingMessageHook(CLIENT_ID,
|
validationManager.registerIncomingMessageHook(CLIENT_ID,
|
||||||
|
|||||||
@@ -389,14 +389,13 @@ class MessagingManagerImpl implements MessagingManager, IncomingMessageHook,
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GroupId getConversationId(ContactId c) throws DbException {
|
public GroupId getConversationId(ContactId c) throws DbException {
|
||||||
Contact contact;
|
return db.transactionWithResult(true,
|
||||||
Transaction txn = db.startTransaction(true);
|
txn -> getConversationId(txn, c));
|
||||||
try {
|
}
|
||||||
contact = db.getContact(txn, c);
|
|
||||||
db.commitTransaction(txn);
|
@Override
|
||||||
} finally {
|
public GroupId getConversationId(Transaction txn, ContactId c) throws DbException {
|
||||||
db.endTransaction(txn);
|
Contact contact = db.getContact(txn, c);
|
||||||
}
|
|
||||||
return getContactGroup(contact).getId();
|
return getContactGroup(contact).getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -287,6 +287,13 @@ class PrivateGroupManagerImpl extends BdfIncomingMessageHook
|
|||||||
return privateGroups;
|
return privateGroups;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isOurPrivateGroup(Transaction txn, PrivateGroup g)
|
||||||
|
throws DbException {
|
||||||
|
LocalAuthor localAuthor = identityManager.getLocalAuthor(txn);
|
||||||
|
return localAuthor.getId().equals(g.getCreator().getId());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<PrivateGroup> getPrivateGroups() throws DbException {
|
public Collection<PrivateGroup> getPrivateGroups() throws DbException {
|
||||||
return db.transactionWithResult(true, this::getPrivateGroups);
|
return db.transactionWithResult(true, this::getPrivateGroups);
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.briarproject.briar.privategroup;
|
package org.briarproject.briar.privategroup;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.FeatureFlags;
|
||||||
import org.briarproject.bramble.api.client.ClientHelper;
|
import org.briarproject.bramble.api.client.ClientHelper;
|
||||||
import org.briarproject.bramble.api.data.MetadataEncoder;
|
import org.briarproject.bramble.api.data.MetadataEncoder;
|
||||||
import org.briarproject.bramble.api.sync.validation.ValidationManager;
|
import org.briarproject.bramble.api.sync.validation.ValidationManager;
|
||||||
@@ -32,7 +33,11 @@ public class PrivateGroupModule {
|
|||||||
@Singleton
|
@Singleton
|
||||||
PrivateGroupManager provideGroupManager(
|
PrivateGroupManager provideGroupManager(
|
||||||
PrivateGroupManagerImpl groupManager,
|
PrivateGroupManagerImpl groupManager,
|
||||||
ValidationManager validationManager) {
|
ValidationManager validationManager,
|
||||||
|
FeatureFlags featureFlags) {
|
||||||
|
if (!featureFlags.shouldEnablePrivateGroupsInCore()) {
|
||||||
|
return groupManager;
|
||||||
|
}
|
||||||
validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION,
|
validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION,
|
||||||
groupManager);
|
groupManager);
|
||||||
return groupManager;
|
return groupManager;
|
||||||
@@ -56,12 +61,14 @@ public class PrivateGroupModule {
|
|||||||
PrivateGroupFactory privateGroupFactory,
|
PrivateGroupFactory privateGroupFactory,
|
||||||
ClientHelper clientHelper, MetadataEncoder metadataEncoder,
|
ClientHelper clientHelper, MetadataEncoder metadataEncoder,
|
||||||
Clock clock, GroupInvitationFactory groupInvitationFactory,
|
Clock clock, GroupInvitationFactory groupInvitationFactory,
|
||||||
ValidationManager validationManager) {
|
ValidationManager validationManager, FeatureFlags featureFlags) {
|
||||||
GroupMessageValidator validator = new GroupMessageValidator(
|
GroupMessageValidator validator = new GroupMessageValidator(
|
||||||
privateGroupFactory, clientHelper, metadataEncoder, clock,
|
privateGroupFactory, clientHelper, metadataEncoder, clock,
|
||||||
groupInvitationFactory);
|
groupInvitationFactory);
|
||||||
validationManager.registerMessageValidator(CLIENT_ID, MAJOR_VERSION,
|
if (featureFlags.shouldEnablePrivateGroupsInCore()) {
|
||||||
validator);
|
validationManager.registerMessageValidator(CLIENT_ID, MAJOR_VERSION,
|
||||||
|
validator);
|
||||||
|
}
|
||||||
return validator;
|
return validator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -128,15 +128,59 @@ class GroupInvitationManagerImpl extends ConversationClientImpl
|
|||||||
// Attach the contact ID to the group
|
// Attach the contact ID to the group
|
||||||
clientHelper.setContactId(txn, g.getId(), c.getId());
|
clientHelper.setContactId(txn, g.getId(), c.getId());
|
||||||
// If the contact belongs to any private groups, create a peer session
|
// If the contact belongs to any private groups, create a peer session
|
||||||
for (Group pg : db.getGroups(txn, PrivateGroupManager.CLIENT_ID,
|
// or sessions in LEFT state for creator/invitee.
|
||||||
|
for (Group group : db.getGroups(txn, PrivateGroupManager.CLIENT_ID,
|
||||||
PrivateGroupManager.MAJOR_VERSION)) {
|
PrivateGroupManager.MAJOR_VERSION)) {
|
||||||
if (privateGroupManager.isMember(txn, pg.getId(), c.getAuthor()))
|
if (privateGroupManager
|
||||||
addingMember(txn, pg.getId(), c);
|
.isMember(txn, group.getId(), c.getAuthor())) {
|
||||||
|
PrivateGroup pg =
|
||||||
|
privateGroupManager.getPrivateGroup(txn, group.getId());
|
||||||
|
recreateSession(txn, c, pg, g.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void recreateSession(Transaction txn, Contact c,
|
||||||
|
PrivateGroup pg, GroupId contactGroupId) throws DbException {
|
||||||
|
boolean isOur = privateGroupManager.isOurPrivateGroup(txn, pg);
|
||||||
|
boolean isTheirs =
|
||||||
|
c.getAuthor().getId().equals(pg.getCreator().getId());
|
||||||
|
if (isOur || isTheirs) {
|
||||||
|
// we are creator or invitee, create a left session for each role
|
||||||
|
MessageId storageId = createStorageId(txn, contactGroupId);
|
||||||
|
Session<?> session;
|
||||||
|
if (isOur) {
|
||||||
|
session = new CreatorSession(contactGroupId, pg.getId(), null,
|
||||||
|
null, 0, 0, CreatorState.LEFT);
|
||||||
|
} else {
|
||||||
|
session = new InviteeSession(contactGroupId, pg.getId(), null,
|
||||||
|
null, 0, 0, InviteeState.LEFT);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
storeSession(txn, storageId, session);
|
||||||
|
} catch (FormatException e) {
|
||||||
|
throw new DbException(e);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// we are neither creator nor invitee, create peer session
|
||||||
|
addingMember(txn, pg.getId(), c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removingContact(Transaction txn, Contact c) throws DbException {
|
public void removingContact(Transaction txn, Contact c) throws DbException {
|
||||||
|
// mark private groups created by that contact as dissolved
|
||||||
|
for (Group g : db.getGroups(txn, PrivateGroupManager.CLIENT_ID,
|
||||||
|
PrivateGroupManager.MAJOR_VERSION)) {
|
||||||
|
if (privateGroupManager.isMember(txn, g.getId(), c.getAuthor())) {
|
||||||
|
PrivateGroup pg =
|
||||||
|
privateGroupManager.getPrivateGroup(txn, g.getId());
|
||||||
|
// check if contact to be removed is creator of the group
|
||||||
|
if (c.getAuthor().getId().equals(pg.getCreator().getId())) {
|
||||||
|
privateGroupManager.markGroupDissolved(txn, g.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
// Remove the contact group (all messages will be removed with it)
|
// Remove the contact group (all messages will be removed with it)
|
||||||
db.removeGroup(txn, getContactGroup(c));
|
db.removeGroup(txn, getContactGroup(c));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.briarproject.briar.privategroup.invitation;
|
package org.briarproject.briar.privategroup.invitation;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.FeatureFlags;
|
||||||
import org.briarproject.bramble.api.cleanup.CleanupManager;
|
import org.briarproject.bramble.api.cleanup.CleanupManager;
|
||||||
import org.briarproject.bramble.api.client.ClientHelper;
|
import org.briarproject.bramble.api.client.ClientHelper;
|
||||||
import org.briarproject.bramble.api.contact.ContactManager;
|
import org.briarproject.bramble.api.contact.ContactManager;
|
||||||
@@ -43,7 +44,10 @@ public class GroupInvitationModule {
|
|||||||
PrivateGroupManager privateGroupManager,
|
PrivateGroupManager privateGroupManager,
|
||||||
ConversationManager conversationManager,
|
ConversationManager conversationManager,
|
||||||
ClientVersioningManager clientVersioningManager,
|
ClientVersioningManager clientVersioningManager,
|
||||||
CleanupManager cleanupManager) {
|
CleanupManager cleanupManager, FeatureFlags featureFlags) {
|
||||||
|
if (!featureFlags.shouldEnablePrivateGroupsInCore()) {
|
||||||
|
return groupInvitationManager;
|
||||||
|
}
|
||||||
lifecycleManager.registerOpenDatabaseHook(groupInvitationManager);
|
lifecycleManager.registerOpenDatabaseHook(groupInvitationManager);
|
||||||
validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION,
|
validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION,
|
||||||
groupInvitationManager);
|
groupInvitationManager);
|
||||||
@@ -69,12 +73,15 @@ public class GroupInvitationModule {
|
|||||||
ClientHelper clientHelper, MetadataEncoder metadataEncoder,
|
ClientHelper clientHelper, MetadataEncoder metadataEncoder,
|
||||||
Clock clock, PrivateGroupFactory privateGroupFactory,
|
Clock clock, PrivateGroupFactory privateGroupFactory,
|
||||||
MessageEncoder messageEncoder,
|
MessageEncoder messageEncoder,
|
||||||
ValidationManager validationManager) {
|
ValidationManager validationManager,
|
||||||
|
FeatureFlags featureFlags) {
|
||||||
GroupInvitationValidator validator = new GroupInvitationValidator(
|
GroupInvitationValidator validator = new GroupInvitationValidator(
|
||||||
clientHelper, metadataEncoder, clock, privateGroupFactory,
|
clientHelper, metadataEncoder, clock, privateGroupFactory,
|
||||||
messageEncoder);
|
messageEncoder);
|
||||||
validationManager.registerMessageValidator(CLIENT_ID, MAJOR_VERSION,
|
if (featureFlags.shouldEnablePrivateGroupsInCore()) {
|
||||||
validator);
|
validationManager.registerMessageValidator(CLIENT_ID, MAJOR_VERSION,
|
||||||
|
validator);
|
||||||
|
}
|
||||||
return validator;
|
return validator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.briarproject.briar.sharing;
|
package org.briarproject.briar.sharing;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.FeatureFlags;
|
||||||
import org.briarproject.bramble.api.cleanup.CleanupManager;
|
import org.briarproject.bramble.api.cleanup.CleanupManager;
|
||||||
import org.briarproject.bramble.api.client.ClientHelper;
|
import org.briarproject.bramble.api.client.ClientHelper;
|
||||||
import org.briarproject.bramble.api.contact.ContactManager;
|
import org.briarproject.bramble.api.contact.ContactManager;
|
||||||
@@ -60,12 +61,15 @@ public class SharingModule {
|
|||||||
BlogSharingValidator provideBlogSharingValidator(
|
BlogSharingValidator provideBlogSharingValidator(
|
||||||
ValidationManager validationManager, MessageEncoder messageEncoder,
|
ValidationManager validationManager, MessageEncoder messageEncoder,
|
||||||
ClientHelper clientHelper, MetadataEncoder metadataEncoder,
|
ClientHelper clientHelper, MetadataEncoder metadataEncoder,
|
||||||
Clock clock, BlogFactory blogFactory) {
|
Clock clock, BlogFactory blogFactory, FeatureFlags featureFlags) {
|
||||||
BlogSharingValidator validator = new BlogSharingValidator(
|
BlogSharingValidator validator = new BlogSharingValidator(
|
||||||
messageEncoder, clientHelper, metadataEncoder, clock,
|
messageEncoder, clientHelper, metadataEncoder, clock,
|
||||||
blogFactory);
|
blogFactory);
|
||||||
validationManager.registerMessageValidator(BlogSharingManager.CLIENT_ID,
|
if (featureFlags.shouldEnableBlogsInCore()) {
|
||||||
BlogSharingManager.MAJOR_VERSION, validator);
|
validationManager.registerMessageValidator(
|
||||||
|
BlogSharingManager.CLIENT_ID,
|
||||||
|
BlogSharingManager.MAJOR_VERSION, validator);
|
||||||
|
}
|
||||||
return validator;
|
return validator;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,7 +81,10 @@ public class SharingModule {
|
|||||||
ConversationManager conversationManager, BlogManager blogManager,
|
ConversationManager conversationManager, BlogManager blogManager,
|
||||||
ClientVersioningManager clientVersioningManager,
|
ClientVersioningManager clientVersioningManager,
|
||||||
BlogSharingManagerImpl blogSharingManager,
|
BlogSharingManagerImpl blogSharingManager,
|
||||||
CleanupManager cleanupManager) {
|
CleanupManager cleanupManager, FeatureFlags featureFlags) {
|
||||||
|
if (!featureFlags.shouldEnableBlogsInCore()) {
|
||||||
|
return blogSharingManager;
|
||||||
|
}
|
||||||
lifecycleManager.registerOpenDatabaseHook(blogSharingManager);
|
lifecycleManager.registerOpenDatabaseHook(blogSharingManager);
|
||||||
contactManager.registerContactHook(blogSharingManager);
|
contactManager.registerContactHook(blogSharingManager);
|
||||||
validationManager.registerIncomingMessageHook(
|
validationManager.registerIncomingMessageHook(
|
||||||
@@ -122,13 +129,15 @@ public class SharingModule {
|
|||||||
ForumSharingValidator provideForumSharingValidator(
|
ForumSharingValidator provideForumSharingValidator(
|
||||||
ValidationManager validationManager, MessageEncoder messageEncoder,
|
ValidationManager validationManager, MessageEncoder messageEncoder,
|
||||||
ClientHelper clientHelper, MetadataEncoder metadataEncoder,
|
ClientHelper clientHelper, MetadataEncoder metadataEncoder,
|
||||||
Clock clock, ForumFactory forumFactory) {
|
Clock clock, ForumFactory forumFactory, FeatureFlags featureFlags) {
|
||||||
ForumSharingValidator validator = new ForumSharingValidator(
|
ForumSharingValidator validator = new ForumSharingValidator(
|
||||||
messageEncoder, clientHelper, metadataEncoder, clock,
|
messageEncoder, clientHelper, metadataEncoder, clock,
|
||||||
forumFactory);
|
forumFactory);
|
||||||
validationManager.registerMessageValidator(
|
if (featureFlags.shouldEnableForumsInCore()) {
|
||||||
ForumSharingManager.CLIENT_ID,
|
validationManager.registerMessageValidator(
|
||||||
ForumSharingManager.MAJOR_VERSION, validator);
|
ForumSharingManager.CLIENT_ID,
|
||||||
|
ForumSharingManager.MAJOR_VERSION, validator);
|
||||||
|
}
|
||||||
return validator;
|
return validator;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,7 +149,10 @@ public class SharingModule {
|
|||||||
ConversationManager conversationManager, ForumManager forumManager,
|
ConversationManager conversationManager, ForumManager forumManager,
|
||||||
ClientVersioningManager clientVersioningManager,
|
ClientVersioningManager clientVersioningManager,
|
||||||
ForumSharingManagerImpl forumSharingManager,
|
ForumSharingManagerImpl forumSharingManager,
|
||||||
CleanupManager cleanupManager) {
|
CleanupManager cleanupManager, FeatureFlags featureFlags) {
|
||||||
|
if (!featureFlags.shouldEnableForumsInCore()) {
|
||||||
|
return forumSharingManager;
|
||||||
|
}
|
||||||
lifecycleManager.registerOpenDatabaseHook(forumSharingManager);
|
lifecycleManager.registerOpenDatabaseHook(forumSharingManager);
|
||||||
contactManager.registerContactHook(forumSharingManager);
|
contactManager.registerContactHook(forumSharingManager);
|
||||||
validationManager.registerIncomingMessageHook(
|
validationManager.registerIncomingMessageHook(
|
||||||
|
|||||||
@@ -3,13 +3,16 @@ package org.briarproject.briar.attachment;
|
|||||||
import org.briarproject.bramble.api.client.ClientHelper;
|
import org.briarproject.bramble.api.client.ClientHelper;
|
||||||
import org.briarproject.bramble.api.data.BdfDictionary;
|
import org.briarproject.bramble.api.data.BdfDictionary;
|
||||||
import org.briarproject.bramble.api.data.BdfEntry;
|
import org.briarproject.bramble.api.data.BdfEntry;
|
||||||
|
import org.briarproject.bramble.api.db.DatabaseComponent;
|
||||||
import org.briarproject.bramble.api.db.NoSuchMessageException;
|
import org.briarproject.bramble.api.db.NoSuchMessageException;
|
||||||
|
import org.briarproject.bramble.api.db.Transaction;
|
||||||
|
import org.briarproject.bramble.api.db.TransactionManager;
|
||||||
import org.briarproject.bramble.api.sync.GroupId;
|
import org.briarproject.bramble.api.sync.GroupId;
|
||||||
import org.briarproject.bramble.api.sync.Message;
|
import org.briarproject.bramble.api.sync.Message;
|
||||||
import org.briarproject.bramble.test.BrambleMockTestCase;
|
import org.briarproject.bramble.test.BrambleMockTestCase;
|
||||||
|
import org.briarproject.bramble.test.DbExpectations;
|
||||||
import org.briarproject.briar.api.attachment.Attachment;
|
import org.briarproject.briar.api.attachment.Attachment;
|
||||||
import org.briarproject.briar.api.attachment.AttachmentHeader;
|
import org.briarproject.briar.api.attachment.AttachmentHeader;
|
||||||
import org.jmock.Expectations;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
@@ -25,6 +28,7 @@ import static org.junit.Assert.assertArrayEquals;
|
|||||||
|
|
||||||
public class AttachmentReaderImplTest extends BrambleMockTestCase {
|
public class AttachmentReaderImplTest extends BrambleMockTestCase {
|
||||||
|
|
||||||
|
private final TransactionManager db = context.mock(DatabaseComponent.class);
|
||||||
private final ClientHelper clientHelper = context.mock(ClientHelper.class);
|
private final ClientHelper clientHelper = context.mock(ClientHelper.class);
|
||||||
|
|
||||||
private final GroupId groupId = new GroupId(getRandomId());
|
private final GroupId groupId = new GroupId(getRandomId());
|
||||||
@@ -34,7 +38,7 @@ public class AttachmentReaderImplTest extends BrambleMockTestCase {
|
|||||||
message.getId(), contentType);
|
message.getId(), contentType);
|
||||||
|
|
||||||
private final AttachmentReaderImpl attachmentReader =
|
private final AttachmentReaderImpl attachmentReader =
|
||||||
new AttachmentReaderImpl(clientHelper);
|
new AttachmentReaderImpl(db, clientHelper);
|
||||||
|
|
||||||
@Test(expected = NoSuchMessageException.class)
|
@Test(expected = NoSuchMessageException.class)
|
||||||
public void testWrongGroup() throws Exception {
|
public void testWrongGroup() throws Exception {
|
||||||
@@ -42,8 +46,11 @@ public class AttachmentReaderImplTest extends BrambleMockTestCase {
|
|||||||
AttachmentHeader wrongGroup = new AttachmentHeader(wrongGroupId,
|
AttachmentHeader wrongGroup = new AttachmentHeader(wrongGroupId,
|
||||||
message.getId(), contentType);
|
message.getId(), contentType);
|
||||||
|
|
||||||
context.checking(new Expectations() {{
|
Transaction txn = new Transaction(null, true);
|
||||||
oneOf(clientHelper).getMessage(message.getId());
|
|
||||||
|
context.checking(new DbExpectations() {{
|
||||||
|
oneOf(db).transactionWithResult(with(true), withDbCallable(txn));
|
||||||
|
oneOf(clientHelper).getMessage(txn, message.getId());
|
||||||
will(returnValue(message));
|
will(returnValue(message));
|
||||||
}});
|
}});
|
||||||
|
|
||||||
@@ -74,10 +81,14 @@ public class AttachmentReaderImplTest extends BrambleMockTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void testInvalidMetadata(BdfDictionary meta) throws Exception {
|
private void testInvalidMetadata(BdfDictionary meta) throws Exception {
|
||||||
context.checking(new Expectations() {{
|
Transaction txn = new Transaction(null, true);
|
||||||
oneOf(clientHelper).getMessage(message.getId());
|
|
||||||
|
context.checking(new DbExpectations() {{
|
||||||
|
oneOf(db).transactionWithResult(with(true), withDbCallable(txn));
|
||||||
|
oneOf(clientHelper).getMessage(txn, message.getId());
|
||||||
will(returnValue(message));
|
will(returnValue(message));
|
||||||
oneOf(clientHelper).getMessageMetadataAsDictionary(message.getId());
|
oneOf(clientHelper)
|
||||||
|
.getMessageMetadataAsDictionary(txn, message.getId());
|
||||||
will(returnValue(meta));
|
will(returnValue(meta));
|
||||||
}});
|
}});
|
||||||
|
|
||||||
@@ -95,10 +106,14 @@ public class AttachmentReaderImplTest extends BrambleMockTestCase {
|
|||||||
byte[] expectedData = new byte[body.length - descriptorLength];
|
byte[] expectedData = new byte[body.length - descriptorLength];
|
||||||
arraycopy(body, descriptorLength, expectedData, 0, expectedData.length);
|
arraycopy(body, descriptorLength, expectedData, 0, expectedData.length);
|
||||||
|
|
||||||
context.checking(new Expectations() {{
|
Transaction txn = new Transaction(null, true);
|
||||||
oneOf(clientHelper).getMessage(message.getId());
|
|
||||||
|
context.checking(new DbExpectations() {{
|
||||||
|
oneOf(db).transactionWithResult(with(true), withDbCallable(txn));
|
||||||
|
oneOf(clientHelper).getMessage(txn, message.getId());
|
||||||
will(returnValue(message));
|
will(returnValue(message));
|
||||||
oneOf(clientHelper).getMessageMetadataAsDictionary(message.getId());
|
oneOf(clientHelper)
|
||||||
|
.getMessageMetadataAsDictionary(txn, message.getId());
|
||||||
will(returnValue(meta));
|
will(returnValue(meta));
|
||||||
}});
|
}});
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package org.briarproject.briar.feed;
|
|||||||
import com.rometools.rome.feed.synd.SyndEntry;
|
import com.rometools.rome.feed.synd.SyndEntry;
|
||||||
import com.rometools.rome.feed.synd.SyndEntryImpl;
|
import com.rometools.rome.feed.synd.SyndEntryImpl;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.WeakSingletonProvider;
|
||||||
import org.briarproject.bramble.api.client.ClientHelper;
|
import org.briarproject.bramble.api.client.ClientHelper;
|
||||||
import org.briarproject.bramble.api.client.ContactGroupFactory;
|
import org.briarproject.bramble.api.client.ContactGroupFactory;
|
||||||
import org.briarproject.bramble.api.data.BdfDictionary;
|
import org.briarproject.bramble.api.data.BdfDictionary;
|
||||||
@@ -71,7 +72,7 @@ public class FeedManagerImplTest extends BrambleMockTestCase {
|
|||||||
new WeakSingletonProvider<OkHttpClient>() {
|
new WeakSingletonProvider<OkHttpClient>() {
|
||||||
@Override
|
@Override
|
||||||
@Nonnull
|
@Nonnull
|
||||||
OkHttpClient createInstance() {
|
public OkHttpClient createInstance() {
|
||||||
return client;
|
return client;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -709,6 +709,41 @@ public class GroupInvitationIntegrationTest
|
|||||||
assertTrue(deleteMessages0From1(emptySet()).allDeleted());
|
assertTrue(deleteMessages0From1(emptySet()).allDeleted());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testInvitationAfterReAddingContacts() throws Exception {
|
||||||
|
// sync invitation and response back
|
||||||
|
sendInvitation(c0.getClock().currentTimeMillis(), null);
|
||||||
|
sync0To1(1, true);
|
||||||
|
groupInvitationManager1
|
||||||
|
.respondToInvitation(contactId0From1, privateGroup, true);
|
||||||
|
sync1To0(1, true);
|
||||||
|
|
||||||
|
// sync group join messages
|
||||||
|
sync0To1(2, true); // + one invitation protocol join message
|
||||||
|
sync1To0(1, true);
|
||||||
|
|
||||||
|
// inviting again is not possible
|
||||||
|
assertFalse(groupInvitationManager0
|
||||||
|
.isInvitationAllowed(contact1From0, privateGroup.getId()));
|
||||||
|
|
||||||
|
// contacts remove each other
|
||||||
|
removeAllContacts();
|
||||||
|
|
||||||
|
// group gets dissolved for invitee automatically, but not creator
|
||||||
|
assertFalse(groupManager0.isDissolved(privateGroup.getId()));
|
||||||
|
assertTrue(groupManager1.isDissolved(privateGroup.getId()));
|
||||||
|
|
||||||
|
// contacts re-add each other
|
||||||
|
addDefaultContacts();
|
||||||
|
|
||||||
|
// creator can still not invite again
|
||||||
|
assertFalse(groupInvitationManager0
|
||||||
|
.isInvitationAllowed(contact1From0, privateGroup.getId()));
|
||||||
|
|
||||||
|
// finally invitee can remove group without issues
|
||||||
|
groupManager1.removePrivateGroup(privateGroup.getId());
|
||||||
|
}
|
||||||
|
|
||||||
private Collection<ConversationMessageHeader> getMessages1From0()
|
private Collection<ConversationMessageHeader> getMessages1From0()
|
||||||
throws DbException {
|
throws DbException {
|
||||||
return db0.transactionWithResult(true, txn -> groupInvitationManager0
|
return db0.transactionWithResult(true, txn -> groupInvitationManager0
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest
|
|||||||
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse;
|
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse;
|
||||||
import org.jmock.AbstractExpectations;
|
import org.jmock.AbstractExpectations;
|
||||||
import org.jmock.Expectations;
|
import org.jmock.Expectations;
|
||||||
import org.jmock.lib.legacy.ClassImposteriser;
|
import org.jmock.imposters.ByteBuddyClassImposteriser;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@@ -45,6 +45,8 @@ import java.util.Map;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import static java.util.Arrays.asList;
|
import static java.util.Arrays.asList;
|
||||||
|
import static java.util.Collections.emptyList;
|
||||||
|
import static java.util.Collections.singletonList;
|
||||||
import static junit.framework.TestCase.fail;
|
import static junit.framework.TestCase.fail;
|
||||||
import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED;
|
import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED;
|
||||||
import static org.briarproject.bramble.api.sync.validation.IncomingMessageHook.DeliveryAction.ACCEPT_DO_NOT_SHARE;
|
import static org.briarproject.bramble.api.sync.validation.IncomingMessageHook.DeliveryAction.ACCEPT_DO_NOT_SHARE;
|
||||||
@@ -106,7 +108,9 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
|
|||||||
private final ContactId contactId = contact.getId();
|
private final ContactId contactId = contact.getId();
|
||||||
private final Group localGroup = getGroup(CLIENT_ID, MAJOR_VERSION);
|
private final Group localGroup = getGroup(CLIENT_ID, MAJOR_VERSION);
|
||||||
private final Group contactGroup = getGroup(CLIENT_ID, MAJOR_VERSION);
|
private final Group contactGroup = getGroup(CLIENT_ID, MAJOR_VERSION);
|
||||||
private final Group privateGroup = getGroup(CLIENT_ID, MAJOR_VERSION);
|
private final Group group = getGroup(CLIENT_ID, MAJOR_VERSION);
|
||||||
|
private final PrivateGroup privateGroup = new PrivateGroup(group,
|
||||||
|
getRandomString(5), getAuthor(), getRandomBytes(32));
|
||||||
private final BdfDictionary meta = BdfDictionary.of(new BdfEntry("m", "e"));
|
private final BdfDictionary meta = BdfDictionary.of(new BdfEntry("m", "e"));
|
||||||
private final Message message = getMessage(contactGroup.getId());
|
private final Message message = getMessage(contactGroup.getId());
|
||||||
private final BdfList body = BdfList.of("body");
|
private final BdfList body = BdfList.of("body");
|
||||||
@@ -122,7 +126,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
|
|||||||
|
|
||||||
|
|
||||||
public GroupInvitationManagerImplTest() {
|
public GroupInvitationManagerImplTest() {
|
||||||
context.setImposteriser(ClassImposteriser.INSTANCE);
|
context.setImposteriser(ByteBuddyClassImposteriser.INSTANCE);
|
||||||
creatorEngine = context.mock(CreatorProtocolEngine.class);
|
creatorEngine = context.mock(CreatorProtocolEngine.class);
|
||||||
inviteeEngine = context.mock(InviteeProtocolEngine.class);
|
inviteeEngine = context.mock(InviteeProtocolEngine.class);
|
||||||
peerEngine = context.mock(PeerProtocolEngine.class);
|
peerEngine = context.mock(PeerProtocolEngine.class);
|
||||||
@@ -160,9 +164,9 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
|
|||||||
will(returnValue(false));
|
will(returnValue(false));
|
||||||
oneOf(db).addGroup(txn, localGroup);
|
oneOf(db).addGroup(txn, localGroup);
|
||||||
oneOf(db).getContacts(txn);
|
oneOf(db).getContacts(txn);
|
||||||
will(returnValue(Collections.singletonList(contact)));
|
will(returnValue(singletonList(contact)));
|
||||||
}});
|
}});
|
||||||
expectAddingContact(contact);
|
expectAddingContact(contact, emptyList());
|
||||||
groupInvitationManager.onDatabaseOpened(txn);
|
groupInvitationManager.onDatabaseOpened(txn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,7 +182,8 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
|
|||||||
groupInvitationManager.onDatabaseOpened(txn);
|
groupInvitationManager.onDatabaseOpened(txn);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void expectAddingContact(Contact c) throws Exception {
|
private void expectAddingContact(Contact c, Collection<Group> groups)
|
||||||
|
throws Exception {
|
||||||
context.checking(new Expectations() {{
|
context.checking(new Expectations() {{
|
||||||
oneOf(contactGroupFactory).createContactGroup(CLIENT_ID,
|
oneOf(contactGroupFactory).createContactGroup(CLIENT_ID,
|
||||||
MAJOR_VERSION, c);
|
MAJOR_VERSION, c);
|
||||||
@@ -193,12 +198,8 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
|
|||||||
.setContactId(txn, contactGroup.getId(), contactId);
|
.setContactId(txn, contactGroup.getId(), contactId);
|
||||||
oneOf(db).getGroups(txn, PrivateGroupManager.CLIENT_ID,
|
oneOf(db).getGroups(txn, PrivateGroupManager.CLIENT_ID,
|
||||||
PrivateGroupManager.MAJOR_VERSION);
|
PrivateGroupManager.MAJOR_VERSION);
|
||||||
will(returnValue(Collections.singletonList(privateGroup)));
|
will(returnValue(groups));
|
||||||
oneOf(privateGroupManager).isMember(txn, privateGroup.getId(),
|
|
||||||
c.getAuthor());
|
|
||||||
will(returnValue(true));
|
|
||||||
}});
|
}});
|
||||||
expectAddingMember(privateGroup.getId(), c);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void expectAddingMember(GroupId g, Contact c) throws Exception {
|
private void expectAddingMember(GroupId g, Contact c) throws Exception {
|
||||||
@@ -252,13 +253,99 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testAddingContact() throws Exception {
|
public void testAddingContact() throws Exception {
|
||||||
expectAddingContact(contact);
|
expectAddingContact(contact, singletonList(group));
|
||||||
|
|
||||||
|
context.checking(new Expectations() {{
|
||||||
|
oneOf(privateGroupManager)
|
||||||
|
.isMember(txn, privateGroup.getId(), contact.getAuthor());
|
||||||
|
will(returnValue(true));
|
||||||
|
oneOf(privateGroupManager)
|
||||||
|
.getPrivateGroup(txn, privateGroup.getId());
|
||||||
|
will(returnValue(privateGroup));
|
||||||
|
oneOf(privateGroupManager).isOurPrivateGroup(txn, privateGroup);
|
||||||
|
will(returnValue(false));
|
||||||
|
}});
|
||||||
|
// creates PEER session
|
||||||
|
expectAddingMember(privateGroup.getId(), contact);
|
||||||
|
|
||||||
groupInvitationManager.addingContact(txn, contact);
|
groupInvitationManager.addingContact(txn, contact);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testRemovingContact() throws Exception {
|
public void testAddingContactWhoCreatedGroup() throws Exception {
|
||||||
|
PrivateGroup privateGroup = new PrivateGroup(group,
|
||||||
|
getRandomString(5), contact.getAuthor(), getRandomBytes(32));
|
||||||
|
|
||||||
|
expectAddingContact(contact, singletonList(group));
|
||||||
|
|
||||||
context.checking(new Expectations() {{
|
context.checking(new Expectations() {{
|
||||||
|
oneOf(privateGroupManager)
|
||||||
|
.isMember(txn, privateGroup.getId(), contact.getAuthor());
|
||||||
|
will(returnValue(true));
|
||||||
|
oneOf(privateGroupManager)
|
||||||
|
.getPrivateGroup(txn, privateGroup.getId());
|
||||||
|
will(returnValue(privateGroup));
|
||||||
|
oneOf(privateGroupManager).isOurPrivateGroup(txn, privateGroup);
|
||||||
|
will(returnValue(false));
|
||||||
|
}});
|
||||||
|
expectCreateStorageId();
|
||||||
|
context.checking(new Expectations() {{
|
||||||
|
oneOf(sessionEncoder)
|
||||||
|
.encodeSession(with(any(InviteeSession.class)));
|
||||||
|
will(returnValue(meta));
|
||||||
|
oneOf(clientHelper)
|
||||||
|
.mergeMessageMetadata(txn, storageMessage.getId(), meta);
|
||||||
|
}});
|
||||||
|
|
||||||
|
groupInvitationManager.addingContact(txn, contact);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRemovingContactWithoutCommonGroups() throws Exception {
|
||||||
|
context.checking(new Expectations() {{
|
||||||
|
oneOf(db).getGroups(txn, PrivateGroupManager.CLIENT_ID,
|
||||||
|
PrivateGroupManager.MAJOR_VERSION);
|
||||||
|
will(returnValue(emptyList()));
|
||||||
|
oneOf(contactGroupFactory).createContactGroup(CLIENT_ID,
|
||||||
|
MAJOR_VERSION, contact);
|
||||||
|
will(returnValue(contactGroup));
|
||||||
|
oneOf(db).removeGroup(txn, contactGroup);
|
||||||
|
}});
|
||||||
|
groupInvitationManager.removingContact(txn, contact);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRemovingContactWithCommonGroups() throws Exception {
|
||||||
|
context.checking(new Expectations() {{
|
||||||
|
oneOf(db).getGroups(txn, PrivateGroupManager.CLIENT_ID,
|
||||||
|
PrivateGroupManager.MAJOR_VERSION);
|
||||||
|
will(returnValue(singletonList(group)));
|
||||||
|
oneOf(privateGroupManager).isMember(txn, group.getId(), author);
|
||||||
|
will(returnValue(true));
|
||||||
|
oneOf(privateGroupManager).getPrivateGroup(txn, group.getId());
|
||||||
|
will(returnValue(privateGroup));
|
||||||
|
oneOf(contactGroupFactory).createContactGroup(CLIENT_ID,
|
||||||
|
MAJOR_VERSION, contact);
|
||||||
|
will(returnValue(contactGroup));
|
||||||
|
oneOf(db).removeGroup(txn, contactGroup);
|
||||||
|
}});
|
||||||
|
groupInvitationManager.removingContact(txn, contact);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRemovingContactWhoIsCreatorOfCommonGroup()
|
||||||
|
throws Exception {
|
||||||
|
PrivateGroup privateGroup = new PrivateGroup(group,
|
||||||
|
getRandomString(5), contact.getAuthor(), getRandomBytes(32));
|
||||||
|
context.checking(new Expectations() {{
|
||||||
|
oneOf(db).getGroups(txn, PrivateGroupManager.CLIENT_ID,
|
||||||
|
PrivateGroupManager.MAJOR_VERSION);
|
||||||
|
will(returnValue(singletonList(group)));
|
||||||
|
oneOf(privateGroupManager).isMember(txn, group.getId(), author);
|
||||||
|
will(returnValue(true));
|
||||||
|
oneOf(privateGroupManager).getPrivateGroup(txn, group.getId());
|
||||||
|
will(returnValue(privateGroup));
|
||||||
|
oneOf(privateGroupManager).markGroupDissolved(txn, group.getId());
|
||||||
oneOf(contactGroupFactory).createContactGroup(CLIENT_ID,
|
oneOf(contactGroupFactory).createContactGroup(CLIENT_ID,
|
||||||
MAJOR_VERSION, contact);
|
MAJOR_VERSION, contact);
|
||||||
will(returnValue(contactGroup));
|
will(returnValue(contactGroup));
|
||||||
@@ -355,8 +442,8 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
|
|||||||
BdfDictionary bdfSession) throws Exception {
|
BdfDictionary bdfSession) throws Exception {
|
||||||
expectParseMessageMetadata();
|
expectParseMessageMetadata();
|
||||||
expectGetSession(oneResult, sessionId, contactGroup.getId());
|
expectGetSession(oneResult, sessionId, contactGroup.getId());
|
||||||
Session<?> session =
|
Session<?> session = expectHandleMessage(role, messageMetadata,
|
||||||
expectHandleMessage(role, messageMetadata, bdfSession, type);
|
bdfSession, type);
|
||||||
expectStoreSession(session, storageMessage.getId());
|
expectStoreSession(session, storageMessage.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -569,7 +656,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testAcceptInvitationWithGroupId() throws Exception {
|
public void testAcceptInvitationWithGroupId() throws Exception {
|
||||||
PrivateGroup pg = new PrivateGroup(privateGroup,
|
PrivateGroup pg = new PrivateGroup(group,
|
||||||
getRandomString(MAX_GROUP_NAME_LENGTH), author,
|
getRandomString(MAX_GROUP_NAME_LENGTH), author,
|
||||||
getRandomBytes(GROUP_SALT_LENGTH));
|
getRandomBytes(GROUP_SALT_LENGTH));
|
||||||
|
|
||||||
@@ -579,7 +666,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDeclineInvitationWithGroupId() throws Exception {
|
public void testDeclineInvitationWithGroupId() throws Exception {
|
||||||
PrivateGroup pg = new PrivateGroup(privateGroup,
|
PrivateGroup pg = new PrivateGroup(group,
|
||||||
getRandomString(MAX_GROUP_NAME_LENGTH), author,
|
getRandomString(MAX_GROUP_NAME_LENGTH), author,
|
||||||
getRandomBytes(GROUP_SALT_LENGTH));
|
getRandomBytes(GROUP_SALT_LENGTH));
|
||||||
|
|
||||||
@@ -670,7 +757,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
|
|||||||
privateGroup.getId(), time1, "name", author,
|
privateGroup.getId(), time1, "name", author,
|
||||||
new byte[0], null, new byte[0], NO_AUTO_DELETE_TIMER);
|
new byte[0], null, new byte[0], NO_AUTO_DELETE_TIMER);
|
||||||
PrivateGroup pg =
|
PrivateGroup pg =
|
||||||
new PrivateGroup(privateGroup, invite.getGroupName(),
|
new PrivateGroup(group, invite.getGroupName(),
|
||||||
invite.getCreator(), invite.getSalt());
|
invite.getCreator(), invite.getSalt());
|
||||||
|
|
||||||
context.checking(new Expectations() {{
|
context.checking(new Expectations() {{
|
||||||
@@ -738,7 +825,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
|
|||||||
new InviteMessage(message2.getId(), contactGroup.getId(),
|
new InviteMessage(message2.getId(), contactGroup.getId(),
|
||||||
privateGroup.getId(), time2, groupName, author, salt,
|
privateGroup.getId(), time2, groupName, author, salt,
|
||||||
null, getRandomBytes(5), NO_AUTO_DELETE_TIMER);
|
null, getRandomBytes(5), NO_AUTO_DELETE_TIMER);
|
||||||
PrivateGroup pg = new PrivateGroup(privateGroup, groupName,
|
PrivateGroup pg = new PrivateGroup(group, groupName,
|
||||||
author, salt);
|
author, salt);
|
||||||
|
|
||||||
context.checking(new Expectations() {{
|
context.checking(new Expectations() {{
|
||||||
@@ -747,7 +834,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
|
|||||||
oneOf(db).startTransaction(true);
|
oneOf(db).startTransaction(true);
|
||||||
will(returnValue(txn));
|
will(returnValue(txn));
|
||||||
oneOf(db).getContacts(txn);
|
oneOf(db).getContacts(txn);
|
||||||
will(returnValue(Collections.singletonList(contact)));
|
will(returnValue(singletonList(contact)));
|
||||||
oneOf(contactGroupFactory).createContactGroup(CLIENT_ID,
|
oneOf(contactGroupFactory).createContactGroup(CLIENT_ID,
|
||||||
MAJOR_VERSION, contact);
|
MAJOR_VERSION, contact);
|
||||||
will(returnValue(contactGroup));
|
will(returnValue(contactGroup));
|
||||||
@@ -839,7 +926,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
|
|||||||
expectAddingMember(privateGroup.getId(), contact);
|
expectAddingMember(privateGroup.getId(), contact);
|
||||||
context.checking(new Expectations() {{
|
context.checking(new Expectations() {{
|
||||||
oneOf(db).getContactsByAuthorId(txn, author.getId());
|
oneOf(db).getContactsByAuthorId(txn, author.getId());
|
||||||
will(returnValue(Collections.singletonList(contact)));
|
will(returnValue(singletonList(contact)));
|
||||||
}});
|
}});
|
||||||
groupInvitationManager.addingMember(txn, privateGroup.getId(), author);
|
groupInvitationManager.addingMember(txn, privateGroup.getId(), author);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -291,10 +291,10 @@ public abstract class BriarIntegrationTest<C extends BriarIntegrationTestCompone
|
|||||||
contactManager0.removeContact(contactId2From0);
|
contactManager0.removeContact(contactId2From0);
|
||||||
contactManager1.removeContact(contactId0From1);
|
contactManager1.removeContact(contactId0From1);
|
||||||
contactManager2.removeContact(contactId0From2);
|
contactManager2.removeContact(contactId0From2);
|
||||||
assertNotNull(contactId2From1);
|
if (contactId2From1 != null)
|
||||||
contactManager1.removeContact(contactId2From1);
|
contactManager1.removeContact(contactId2From1);
|
||||||
assertNotNull(contactId1From2);
|
if (contactId1From2 != null)
|
||||||
contactManager2.removeContact(contactId1From2);
|
contactManager2.removeContact(contactId1From2);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setAutoDeleteTimer(BriarIntegrationTestComponent component,
|
protected void setAutoDeleteTimer(BriarIntegrationTestComponent component,
|
||||||
|
|||||||
@@ -107,5 +107,9 @@ internal class HeadlessModule(private val appDir: File) {
|
|||||||
override fun shouldEnableImageAttachments() = false
|
override fun shouldEnableImageAttachments() = false
|
||||||
override fun shouldEnableProfilePictures() = false
|
override fun shouldEnableProfilePictures() = false
|
||||||
override fun shouldEnableDisappearingMessages() = false
|
override fun shouldEnableDisappearingMessages() = false
|
||||||
|
override fun shouldEnableIntroductionsInCore() = false
|
||||||
|
override fun shouldEnablePrivateGroupsInCore() = false
|
||||||
|
override fun shouldEnableForumsInCore() = true
|
||||||
|
override fun shouldEnableBlogsInCore() = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ buildscript {
|
|||||||
}
|
}
|
||||||
ext {
|
ext {
|
||||||
dagger_version = "2.33"
|
dagger_version = "2.33"
|
||||||
|
// okhttp 3.12.x is supported until end of 2021, newer versions need minSdk 21
|
||||||
|
okhttp_version = "3.12.13"
|
||||||
tor_version = "0.3.5.17"
|
tor_version = "0.3.5.17"
|
||||||
obfs4proxy_version = "0.0.12-dev-40245c4a"
|
obfs4proxy_version = "0.0.12-dev-40245c4a"
|
||||||
junit_version = "4.13.2"
|
junit_version = "4.13.2"
|
||||||
|
|||||||
Reference in New Issue
Block a user