diff --git a/src/main/java/org/peergos/HttpProxyService.java b/src/main/java/org/peergos/HttpProxyService.java index 0265caa0..7f1ebd35 100755 --- a/src/main/java/org/peergos/HttpProxyService.java +++ b/src/main/java/org/peergos/HttpProxyService.java @@ -48,7 +48,10 @@ public ProxyResponse proxyRequest(Multihash targetNodeId, ProxyRequest request) Multiaddr[] addrs = peer.getPublicAddresses().stream().map(a -> Multiaddr.fromString(a.toString())).toArray(Multiaddr[]::new); targetAddressesOpt = Optional.of(addrs[0]); } - HttpProtocol.HttpController proxier = p2pHttpBinding.dial(node, targetAddressesOpt.get()).getController().join(); + Multiaddr finalAddress = targetAddressesOpt.get().toString().contains("/ipfs/") ? targetAddressesOpt.get() + : new Multiaddr(targetAddressesOpt.get() + "/ipfs/" + targetNodeId); + + HttpProtocol.HttpController proxier = p2pHttpBinding.dial(node, finalAddress).getController().join(); String urlParams = constructQueryParamString(request.queryParams); FullHttpRequest httpRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.valueOf(request.method.name()), diff --git a/src/main/java/org/peergos/config/Config.java b/src/main/java/org/peergos/config/Config.java index a9bec2b4..aad130e1 100644 --- a/src/main/java/org/peergos/config/Config.java +++ b/src/main/java/org/peergos/config/Config.java @@ -19,6 +19,16 @@ public class Config { public final DatastoreSection datastore; public final IdentitySection identity; + public static final List defaultBootstrapNodes = List.of( + "/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN", + "/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa", + "/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb", + "/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt", + "/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ", // mars.i.ipfs.io + "/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ").stream() + .map(MultiAddress::new) + .collect(Collectors.toList()); + public Config() { Config config = defaultConfig(Optional.empty()); this.addresses = config.addresses; @@ -68,18 +78,10 @@ public Config defaultConfig(Optional> dataStoreSupplier) { List swarmAddresses = List.of(new MultiAddress("/ip6/::/tcp/4001")); MultiAddress apiAddress = new MultiAddress("/ip4/127.0.0.1/tcp/5001"); MultiAddress gatewayAddress = new MultiAddress("/ip4/127.0.0.1/tcp/8080"); - Optional proxyTargetAddress = Optional.of(new MultiAddress("/ip4/127.0.0.1/tcp/8000")); + Optional proxyTargetAddress = Optional.of(new MultiAddress("/ip4/127.0.0.1/tcp/8003")); Optional allowTarget = Optional.of("http://localhost:8002"); - List bootstrapNodes = List.of( - "/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN", - "/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa", - "/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb", - "/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt", - "/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ", // mars.i.ipfs.io - "/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ").stream() - .map(MultiAddress::new) - .collect(Collectors.toList()); + List bootstrapNodes = new ArrayList<>(defaultBootstrapNodes); Mount blockMount = null; if (dataStoreSupplier.isPresent()) { blockMount = dataStoreSupplier.get().get(); diff --git a/src/main/java/org/peergos/net/HttpProxyHandler.java b/src/main/java/org/peergos/net/HttpProxyHandler.java index 3d2196f3..d1018105 100755 --- a/src/main/java/org/peergos/net/HttpProxyHandler.java +++ b/src/main/java/org/peergos/net/HttpProxyHandler.java @@ -12,20 +12,29 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.function.Function; import java.util.logging.Logger; import java.util.stream.Collectors; public class HttpProxyHandler extends Handler { - private static final Logger LOG = Logging.LOG(); + private static final Logger LOG = Logging.LOG(); private static final boolean LOGGING = true; private final HttpProxyService service; + private final Function peerIdToMultiHashConverter; private static final String HTTP_REQUEST = "/http/"; + private static final Function defaultPeerIdToMultiHashConverter = (peerIdStr) -> + Multihash.deserialize(PeerId.fromBase58(peerIdStr).getBytes()); public HttpProxyHandler(HttpProxyService service) { + this(service, defaultPeerIdToMultiHashConverter); + } + + public HttpProxyHandler(HttpProxyService service, Function peerIdToMultiHashConverter) { this.service = service; + this.peerIdToMultiHashConverter = peerIdToMultiHashConverter; } @@ -41,7 +50,8 @@ public void handleCallToAPI(HttpExchange httpExchange) { throw new IllegalStateException("Expecting p2p request to include path in url"); } String peerId = path.substring(0, streamPathIndex); - Multihash targetNodeId = Multihash.deserialize(PeerId.fromBase58(peerId).getBytes()); + //Multihash targetNodeId = Multihash.deserialize(PeerId.fromBase58(peerId).getBytes()); + Multihash targetNodeId = peerIdToMultiHashConverter.apply(peerId); String targetPath = path.substring(streamPathIndex); if (!targetPath.startsWith(HTTP_REQUEST)) { throw new IllegalStateException("Expecting path to be a http request");