From 5a5f68c7d9a291417b6765c338517d8cfcfbfa26 Mon Sep 17 00:00:00 2001 From: kevodwyer Date: Tue, 7 Feb 2023 15:30:06 +0000 Subject: [PATCH] sample app to demo usage of remote Pinning API --- src/main/java/io/ipfs/api/IPFS.java | 4 +- .../ipfs/api/demo/UsageRemotePinningAPI.java | 75 +++++++++++++++++++ src/test/java/io/ipfs/api/APITest.java | 2 +- 3 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 src/main/java/io/ipfs/api/demo/UsageRemotePinningAPI.java diff --git a/src/main/java/io/ipfs/api/IPFS.java b/src/main/java/io/ipfs/api/IPFS.java index 7dfec0a..88ff786 100644 --- a/src/main/java/io/ipfs/api/IPFS.java +++ b/src/main/java/io/ipfs/api/IPFS.java @@ -244,8 +244,8 @@ public String addService(String service, String endPoint, String key) throws IOE return retrieveString("pin/remote/service/add?arg=" + service + "&arg=" + endPoint + "&arg=" + key); } - public Map lsService(boolean stat) throws IOException { - return retrieveMap("pin/remote/service/ls?stat=" + stat); + public List lsService(boolean stat) throws IOException { + return (List) retrieveMap("pin/remote/service/ls?stat=" + stat).get("RemoteServices"); } public String rmService(String service) throws IOException { diff --git a/src/main/java/io/ipfs/api/demo/UsageRemotePinningAPI.java b/src/main/java/io/ipfs/api/demo/UsageRemotePinningAPI.java new file mode 100644 index 0000000..2e15f72 --- /dev/null +++ b/src/main/java/io/ipfs/api/demo/UsageRemotePinningAPI.java @@ -0,0 +1,75 @@ +package io.ipfs.api.demo; + +import io.ipfs.api.IPFS; +import io.ipfs.api.MerkleNode; +import io.ipfs.api.NamedStreamable; +import io.ipfs.multiaddr.MultiAddress; +import io.ipfs.multihash.Multihash; + +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +/* +This sample program demonstrates how to use the remote pinning API methods + +rpc api - https://docs.ipfs.tech/reference/kubo/rpc/#api-v0-pin-remote-add + +setup: +For demonstration purposes it uses a mock pinning service: +- https://github.com/ipfs-shipyard/js-mock-ipfs-pinning-service +Follow the instructions in the README.md file of the above repository for installation + +Sample command to execute before running this program: +npx mock-ipfs-pinning-service --port 3000 --token secret + +Note: The above parameters are referenced in the program below + */ +public class UsageRemotePinningAPI { + + public UsageRemotePinningAPI(IPFS ipfsClient) { + try { + run(ipfsClient); + } catch (IOException ioe) { + ioe.printStackTrace(); + } + } + private void run(IPFS ipfs) throws IOException { + + // Add file to the local node + MerkleNode file = ipfs.add(new NamedStreamable.ByteArrayWrapper("file.txt", "test data".getBytes())).get(0); + // Retrieve CID + Multihash hash = file.hash; + + //Add the service + String serviceName = "mock"; + ipfs.pin.remote.rmService(serviceName); //clean up if necessary + ipfs.pin.remote.addService(serviceName, "http://127.0.0.1:3000", "secret"); + + //List services + List services = ipfs.pin.remote.lsService(true); + for(Map service : services) { + System.out.println(service); + } + + // Pin + Map addHashResult = ipfs.pin.remote.add(serviceName, hash, Optional.empty(), true); + System.out.println(addHashResult); + + // List + List statusList = List.of(IPFS.PinStatus.values()); // all statuses + Map ls = ipfs.pin.remote.ls(serviceName, Optional.empty(), Optional.of(statusList)); + System.out.println(ls); + + // Remove pin from remote pinning service + List queued = List.of(IPFS.PinStatus.queued); + ipfs.pin.remote.rm(serviceName, Optional.empty(), Optional.of(queued), Optional.of(List.of(hash))); + + } + + public static void main(String[] args) { + IPFS ipfsClient = new IPFS(new MultiAddress("/ip4/127.0.0.1/tcp/5001")); + new UsageRemotePinningAPI(ipfsClient); + } +} diff --git a/src/test/java/io/ipfs/api/APITest.java b/src/test/java/io/ipfs/api/APITest.java index f393178..f03689c 100644 --- a/src/test/java/io/ipfs/api/APITest.java +++ b/src/test/java/io/ipfs/api/APITest.java @@ -330,7 +330,7 @@ public void remotePinTest() throws IOException { Multihash hash = file.hash; String service = "mock"; String rmRemoteService = ipfs.pin.remote.rmService(service); - Map lsRemoteService = ipfs.pin.remote.lsService(false); + List lsRemoteService = ipfs.pin.remote.lsService(false); String endpoint = "http://127.0.0.1:3000"; String key = "SET_VALUE_HERE"; String added = ipfs.pin.remote.addService(service, endpoint, key);