mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 02:39:05 +01:00
Merge branch '599-fetch-rss-feeds-via-tor' into 'master'
Factor out Tor Socks Port This MR factors out the local Tor port, so other clients can listen to an `TransportEnabledEvent` for Tor and start tasks as soon as Tor becomes available. This would also enable client to pass traffic through Tor's local SOCKS proxy. See merge request !301
This commit is contained in:
@@ -27,6 +27,7 @@ import org.briarproject.api.event.SettingsUpdatedEvent;
|
||||
import org.briarproject.api.keyagreement.KeyAgreementListener;
|
||||
import org.briarproject.api.keyagreement.TransportDescriptor;
|
||||
import org.briarproject.api.plugins.Backoff;
|
||||
import org.briarproject.api.plugins.TorConstants;
|
||||
import org.briarproject.api.plugins.duplex.DuplexPlugin;
|
||||
import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
|
||||
import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
|
||||
@@ -72,18 +73,17 @@ import static java.util.logging.Level.INFO;
|
||||
import static java.util.logging.Level.WARNING;
|
||||
import static net.freehaven.tor.control.TorControlCommands.HS_ADDRESS;
|
||||
import static net.freehaven.tor.control.TorControlCommands.HS_PRIVKEY;
|
||||
import static org.briarproject.api.plugins.TorConstants.CONTROL_PORT;
|
||||
import static org.briarproject.api.plugins.TorConstants.SOCKS_PORT;
|
||||
import static org.briarproject.util.PrivacyUtils.scrubOnion;
|
||||
|
||||
class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
|
||||
|
||||
static final TransportId ID = new TransportId("tor");
|
||||
|
||||
private static final String PROP_ONION = "onion";
|
||||
private static final String[] EVENTS = {
|
||||
"CIRC", "ORCONN", "HS_DESC", "NOTICE", "WARN", "ERR"
|
||||
};
|
||||
private static final String OWNER = "__OwningControllerProcess";
|
||||
private static final int SOCKS_PORT = 59050, CONTROL_PORT = 59051;
|
||||
private static final int COOKIE_TIMEOUT = 3000; // Milliseconds
|
||||
private static final Pattern ONION = Pattern.compile("[a-z2-7]{16}");
|
||||
private static final Logger LOG =
|
||||
@@ -140,7 +140,7 @@ class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
|
||||
|
||||
@Override
|
||||
public TransportId getId() {
|
||||
return ID;
|
||||
return TorConstants.ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -8,6 +8,7 @@ import org.briarproject.api.TransportId;
|
||||
import org.briarproject.api.event.EventBus;
|
||||
import org.briarproject.api.plugins.Backoff;
|
||||
import org.briarproject.api.plugins.BackoffFactory;
|
||||
import org.briarproject.api.plugins.TorConstants;
|
||||
import org.briarproject.api.plugins.duplex.DuplexPlugin;
|
||||
import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
|
||||
import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
|
||||
@@ -48,7 +49,7 @@ public class TorPluginFactory implements DuplexPluginFactory {
|
||||
|
||||
@Override
|
||||
public TransportId getId() {
|
||||
return TorPlugin.ID;
|
||||
return TorConstants.ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
12
briar-api/src/org/briarproject/api/plugins/TorConstants.java
Normal file
12
briar-api/src/org/briarproject/api/plugins/TorConstants.java
Normal file
@@ -0,0 +1,12 @@
|
||||
package org.briarproject.api.plugins;
|
||||
|
||||
import org.briarproject.api.TransportId;
|
||||
|
||||
public interface TorConstants {
|
||||
|
||||
TransportId ID = new TransportId("tor");
|
||||
|
||||
int SOCKS_PORT = 59050;
|
||||
int CONTROL_PORT = 59051;
|
||||
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import com.rometools.rome.io.SyndFeedInput;
|
||||
import com.rometools.rome.io.XmlReader;
|
||||
|
||||
import org.briarproject.api.FormatException;
|
||||
import org.briarproject.api.TransportId;
|
||||
import org.briarproject.api.blogs.Blog;
|
||||
import org.briarproject.api.blogs.BlogManager;
|
||||
import org.briarproject.api.blogs.BlogPost;
|
||||
@@ -21,14 +22,16 @@ import org.briarproject.api.data.BdfList;
|
||||
import org.briarproject.api.db.DatabaseComponent;
|
||||
import org.briarproject.api.db.DbException;
|
||||
import org.briarproject.api.db.Transaction;
|
||||
import org.briarproject.api.event.Event;
|
||||
import org.briarproject.api.event.EventListener;
|
||||
import org.briarproject.api.event.TransportEnabledEvent;
|
||||
import org.briarproject.api.feed.Feed;
|
||||
import org.briarproject.api.feed.FeedManager;
|
||||
import org.briarproject.api.identity.AuthorId;
|
||||
import org.briarproject.api.identity.IdentityManager;
|
||||
import org.briarproject.api.identity.LocalAuthor;
|
||||
import org.briarproject.api.lifecycle.IoExecutor;
|
||||
import org.briarproject.api.lifecycle.Service;
|
||||
import org.briarproject.api.lifecycle.ServiceException;
|
||||
import org.briarproject.api.plugins.TorConstants;
|
||||
import org.briarproject.api.sync.ClientId;
|
||||
import org.briarproject.api.sync.Group;
|
||||
import org.briarproject.api.sync.GroupId;
|
||||
@@ -39,6 +42,7 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.Proxy;
|
||||
import java.net.SocketAddress;
|
||||
import java.security.GeneralSecurityException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@@ -47,6 +51,7 @@ import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -62,8 +67,9 @@ import static org.briarproject.api.feed.FeedConstants.FETCH_DELAY_INITIAL;
|
||||
import static org.briarproject.api.feed.FeedConstants.FETCH_INTERVAL;
|
||||
import static org.briarproject.api.feed.FeedConstants.FETCH_UNIT;
|
||||
import static org.briarproject.api.feed.FeedConstants.KEY_FEEDS;
|
||||
import static org.briarproject.api.plugins.TorConstants.SOCKS_PORT;
|
||||
|
||||
class FeedManagerImpl implements FeedManager, Service, Client {
|
||||
class FeedManagerImpl implements FeedManager, Client, EventListener {
|
||||
|
||||
private static final Logger LOG =
|
||||
Logger.getLogger(FeedManagerImpl.class.getName());
|
||||
@@ -78,8 +84,9 @@ class FeedManagerImpl implements FeedManager, Service, Client {
|
||||
private final DatabaseComponent db;
|
||||
private final PrivateGroupFactory privateGroupFactory;
|
||||
private final ClientHelper clientHelper;
|
||||
private IdentityManager identityManager;
|
||||
private final IdentityManager identityManager;
|
||||
private final BlogManager blogManager;
|
||||
private final AtomicBoolean fetcherStarted = new AtomicBoolean(false);
|
||||
|
||||
@Inject
|
||||
@SuppressWarnings("WeakerAccess")
|
||||
@@ -109,8 +116,20 @@ class FeedManagerImpl implements FeedManager, Service, Client {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startService() throws ServiceException {
|
||||
public void eventOccurred(Event e) {
|
||||
if (e instanceof TransportEnabledEvent) {
|
||||
TransportId t = ((TransportEnabledEvent) e).getTransportId();
|
||||
if (t.equals(TorConstants.ID)) {
|
||||
startFeedExecutor();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void startFeedExecutor() {
|
||||
if (fetcherStarted.getAndSet(true)) return;
|
||||
LOG.info("Tor started, scheduling RSS feed fetcher");
|
||||
Runnable fetcher = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
ioExecutor.execute(new Runnable() {
|
||||
@Override
|
||||
@@ -124,11 +143,6 @@ class FeedManagerImpl implements FeedManager, Service, Client {
|
||||
FETCH_INTERVAL, FETCH_UNIT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stopService() throws ServiceException {
|
||||
// feedExecutor will be stopped by LifecycleManager
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createLocalState(Transaction txn) throws DbException {
|
||||
Group g = getLocalGroup();
|
||||
@@ -341,11 +355,9 @@ class FeedManagerImpl implements FeedManager, Service, Client {
|
||||
|
||||
private InputStream getFeedInputStream(String url) throws IOException {
|
||||
// Set proxy
|
||||
// TODO verify and use local Tor proxy address/port
|
||||
String proxyHost = "localhost";
|
||||
int proxyPort = 59050;
|
||||
Proxy proxy = new Proxy(Proxy.Type.SOCKS,
|
||||
new InetSocketAddress(proxyHost, proxyPort));
|
||||
SocketAddress socketAddress =
|
||||
new InetSocketAddress("127.0.0.1", SOCKS_PORT);
|
||||
Proxy proxy = new Proxy(Proxy.Type.SOCKS, socketAddress);
|
||||
|
||||
// Build HTTP Client
|
||||
OkHttpClient client = new OkHttpClient.Builder()
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.briarproject.feed;
|
||||
|
||||
import org.briarproject.api.event.EventBus;
|
||||
import org.briarproject.api.feed.FeedManager;
|
||||
import org.briarproject.api.lifecycle.LifecycleManager;
|
||||
|
||||
@@ -20,10 +21,10 @@ public class FeedModule {
|
||||
@Provides
|
||||
@Singleton
|
||||
FeedManager provideFeedManager(FeedManagerImpl feedManager,
|
||||
LifecycleManager lifecycleManager) {
|
||||
LifecycleManager lifecycleManager, EventBus eventBus) {
|
||||
|
||||
lifecycleManager.registerClient(feedManager);
|
||||
lifecycleManager.registerService(feedManager);
|
||||
eventBus.addListener(feedManager);
|
||||
return feedManager;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user