Skip to content

Commit

Permalink
Pinata: pass file name + metadata to the service
Browse files Browse the repository at this point in the history
  • Loading branch information
gjeanmart committed Oct 10, 2019
1 parent 0566305 commit f677115
Show file tree
Hide file tree
Showing 8 changed files with 82 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,9 @@ public IndexingResponse index(IndexingRequest request) {
if(!noPin) {
Content contentToPin = Content.of(contentId);
storageService.getReplicaSet().forEach(pinningService ->
CompletableFuture.runAsync(() -> pinningService.pin(contentToPin.getContentId()))
CompletableFuture.runAsync(() -> pinningService.pin(contentToPin.getContentId(),
request.getIndexName() + "-" + indexDocId,
request.getIndexFields()))
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,11 @@ public void run() {
// Pin each replica node
storageService.getReplicaSet().forEach(pinningService -> {
current[0] = pinningService.getName();
pinningService.pin(m.getContentId());
pinningService.pin(m.getContentId(),
m.getIndexName() + "-" + m.getIndexDocId(),
m.getIndexFields());
});

// Set the flag __pinned to true
indexingService.updateField(indexName, m.getIndexDocId(), IndexingService.PINNED_KEY, true);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package net.consensys.mahuta.core.service.pinning;

import java.util.List;
import java.util.Map;

/**
* Interface representing a pinning service.
Expand All @@ -22,6 +23,17 @@ public interface PinningService {
*/
void pin(String id);

/**
* Pin content with metadata
* default implement only pin CID
* @param id Content ID (hash, CID)
* @param name Content name
* @param metadata Content metadata
*/
default void pin(String id, String name, Map<String, Object> metadata) {
pin(id);
}

/**
* unpin content
* @param id Content ID (hash, CID)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package net.consensys.mahuta.core.service.pinning.ipfs;

import java.util.Map;

import com.fasterxml.jackson.annotation.JsonProperty;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

@AllArgsConstructor @NoArgsConstructor
@ToString
public class PinataMetadata {

@JsonProperty("name")
private @Getter String name;

@JsonProperty("keyvalues")
private Map<String, String> metadata;

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package net.consensys.mahuta.core.service.pinning.ipfs;

import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.annotation.JsonProperty;

Expand All @@ -21,6 +20,6 @@ public class PinataPinRequest {
private @Getter List<String> hostNodes;

@JsonProperty("pinataMetadata")
private Map<String, String> metadata;
private PinataMetadata metadata;

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
package net.consensys.mahuta.core.service.pinning.ipfs;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.stream.Collectors;

import com.fasterxml.jackson.core.JsonProcessingException;
Expand Down Expand Up @@ -78,12 +82,24 @@ endpoint, apiKey, obfuscateKey(secretApiKey), addresses,

@Override
public void pin(String cid) {
log.debug("pin CID {} on Pinata", cid);
this.pin(cid, null, null);
}

@Override
public void pin(String cid, String name, Map<String, Object> metadata) {
log.debug("pin CID {} on Pinata [name: {}, metadata: {}]", cid, name, metadata);

try {
ValidatorUtils.rejectIfEmpty("cid", cid);

PinataPinRequest request = new PinataPinRequest(cid, addresses, null);
// Transform metadata
Map<String, String> keyvalues = Optional.ofNullable(metadata).orElseGet(() -> new HashMap<String, Object>())
.entrySet()
.stream()
.collect (Collectors.toMap(Entry::getKey, Object::toString));

PinataPinRequest request = new PinataPinRequest(cid, addresses,
new PinataMetadata(name, keyvalues));
log.trace("call POST {}/pinning/pinHashToIPFS {}", endpoint, mapper.writeValueAsString(request));

HttpResponse<String> response = Unirest.post(endpoint + "/pinning/pinHashToIPFS")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,23 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.util.Arrays;
import java.util.Date;
import java.util.List;

import org.junit.Ignore;
import org.junit.Test;

import com.google.common.collect.ImmutableMap;

import net.consensys.mahuta.core.service.pinning.ipfs.PinataPinRequest;
import net.consensys.mahuta.core.service.pinning.ipfs.PinataPinningService;

@Ignore("Only run locally")
public class PinataServiceReplicaIntegrationTest {

private static final String API_KEY = "CHANGE ME";
private static final String SECRET_API_KEY = "CHANGE ME";
private static final String API_KEY = "CHANGE_ME";
private static final String SECRET_API_KEY = "CHANGE_ME";
private static final String CID = "Qmaisz6NMhDB51cCvNWa1GMS7LU1pAxdF4Ld6Ft9kZEP2a";

public PinataServiceReplicaIntegrationTest() {
Expand All @@ -37,6 +42,19 @@ public void pin() {
assertTrue(tracked.stream().anyMatch(c -> c.equals(CID)));
}

@Test
public void pinWithMetadata() {
PinataPinningService service = buildPinataPinningService(API_KEY, SECRET_API_KEY);
service.pin(CID, "hello", ImmutableMap.of(
"id", 123,
"author", "greg",
"date", new Date(),
"complex", new PinataPinRequest("test", Arrays.asList("1", "2"), null)));

List<String> tracked = service.getTracked();
assertTrue(tracked.stream().anyMatch(c -> c.equals(CID)));
}

@Test
public void unpin() {
PinataPinningService service = buildPinataPinningService(API_KEY, SECRET_API_KEY);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package net.consensys.mahuta.core.tests;

import static com.github.tomakehurst.wiremock.client.WireMock.delete;
import static com.github.tomakehurst.wiremock.client.WireMock.get;
import static com.github.tomakehurst.wiremock.client.WireMock.okJson;
import static com.github.tomakehurst.wiremock.client.WireMock.post;
Expand All @@ -20,15 +19,13 @@
import net.consensys.mahuta.core.domain.indexing.IndexingResponse;
import net.consensys.mahuta.core.service.DefaultMahutaService;
import net.consensys.mahuta.core.service.indexing.IndexingService;
import net.consensys.mahuta.core.service.pinning.ipfs.IPFSClusterPinningService;
import net.consensys.mahuta.core.service.pinning.ipfs.PinataPinningService;
import net.consensys.mahuta.core.service.storage.StorageService;
import net.consensys.mahuta.core.service.storage.ipfs.IPFSService;
import net.consensys.mahuta.core.test.utils.ContainerUtils;
import net.consensys.mahuta.core.test.utils.IndexingRequestUtils;
import net.consensys.mahuta.core.test.utils.MahutaTestAbstract;
import net.consensys.mahuta.core.test.utils.ContainerUtils.ContainerType;
import net.consensys.mahuta.core.test.utils.IndexingRequestUtils;
import net.consensys.mahuta.core.test.utils.IndexingRequestUtils.BuilderAndResponse;
import net.consensys.mahuta.core.test.utils.MahutaTestAbstract;

public class PinataServiceReplicaTest extends MahutaTestAbstract {

Expand Down

0 comments on commit f677115

Please sign in to comment.