forked from Qortal/qortal
/arbitrary/metadata/* endpoint now returns ArbitraryResourceMetadata rather than a raw JSON string.
This commit is contained in:
parent
e6f93e0a08
commit
46606152eb
@ -694,7 +694,7 @@ public class ArbitraryResource {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
@SecurityRequirement(name = "apiKey")
|
@SecurityRequirement(name = "apiKey")
|
||||||
public String getMetadata(@HeaderParam(Security.API_KEY_HEADER) String apiKey,
|
public ArbitraryResourceMetadata getMetadata(@HeaderParam(Security.API_KEY_HEADER) String apiKey,
|
||||||
@PathParam("service") Service service,
|
@PathParam("service") Service service,
|
||||||
@PathParam("name") String name,
|
@PathParam("name") String name,
|
||||||
@PathParam("identifier") String identifier) {
|
@PathParam("identifier") String identifier) {
|
||||||
@ -703,12 +703,20 @@ public class ArbitraryResource {
|
|||||||
ArbitraryDataResource resource = new ArbitraryDataResource(name, ResourceIdType.NAME, service, identifier);
|
ArbitraryDataResource resource = new ArbitraryDataResource(name, ResourceIdType.NAME, service, identifier);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
byte[] metadata = ArbitraryMetadataManager.getInstance().fetchMetadata(resource, false);
|
ArbitraryDataTransactionMetadata transactionMetadata = ArbitraryMetadataManager.getInstance().fetchMetadata(resource, false);
|
||||||
if (metadata != null) {
|
if (transactionMetadata != null) {
|
||||||
return new String(metadata, StandardCharsets.UTF_8);
|
ArbitraryResourceMetadata resourceMetadata = ArbitraryResourceMetadata.fromTransactionMetadata(transactionMetadata);
|
||||||
|
if (resourceMetadata != null) {
|
||||||
|
return resourceMetadata;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// The metadata file doesn't contain title, description, category, or tags
|
||||||
|
throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.FILE_NOT_FOUND);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
throw ApiExceptionFactory.INSTANCE.createCustomException(request, ApiError.INVALID_CRITERIA, e.getMessage());
|
// No metadata exists for this resource
|
||||||
|
throw ApiExceptionFactory.INSTANCE.createCustomException(request, ApiError.FILE_NOT_FOUND, e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.INVALID_DATA);
|
throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.INVALID_DATA);
|
||||||
@ -1279,7 +1287,7 @@ public class ArbitraryResource {
|
|||||||
ArbitraryDataTransactionMetadata transactionMetadata = resource.getLatestTransactionMetadata();
|
ArbitraryDataTransactionMetadata transactionMetadata = resource.getLatestTransactionMetadata();
|
||||||
ArbitraryResourceMetadata resourceMetadata = ArbitraryResourceMetadata.fromTransactionMetadata(transactionMetadata);
|
ArbitraryResourceMetadata resourceMetadata = ArbitraryResourceMetadata.fromTransactionMetadata(transactionMetadata);
|
||||||
if (resourceMetadata != null) {
|
if (resourceMetadata != null) {
|
||||||
resourceInfo.metadata = ArbitraryResourceMetadata.fromTransactionMetadata(transactionMetadata);
|
resourceInfo.metadata = resourceMetadata;
|
||||||
}
|
}
|
||||||
updatedResources.add(resourceInfo);
|
updatedResources.add(resourceInfo);
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import org.apache.logging.log4j.Logger;
|
|||||||
import org.qortal.api.resource.TransactionsResource.ConfirmationStatus;
|
import org.qortal.api.resource.TransactionsResource.ConfirmationStatus;
|
||||||
import org.qortal.arbitrary.ArbitraryDataFile;
|
import org.qortal.arbitrary.ArbitraryDataFile;
|
||||||
import org.qortal.arbitrary.ArbitraryDataResource;
|
import org.qortal.arbitrary.ArbitraryDataResource;
|
||||||
|
import org.qortal.arbitrary.metadata.ArbitraryDataTransactionMetadata;
|
||||||
import org.qortal.arbitrary.misc.Service;
|
import org.qortal.arbitrary.misc.Service;
|
||||||
import org.qortal.controller.Controller;
|
import org.qortal.controller.Controller;
|
||||||
import org.qortal.data.network.ArbitraryPeerData;
|
import org.qortal.data.network.ArbitraryPeerData;
|
||||||
@ -349,7 +350,7 @@ public class ArbitraryDataManager extends Thread {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Entrypoint to request new metadata from peers
|
// Entrypoint to request new metadata from peers
|
||||||
public byte[] fetchMetadata(ArbitraryTransactionData arbitraryTransactionData) {
|
public ArbitraryDataTransactionMetadata fetchMetadata(ArbitraryTransactionData arbitraryTransactionData) {
|
||||||
|
|
||||||
ArbitraryDataResource resource = new ArbitraryDataResource(
|
ArbitraryDataResource resource = new ArbitraryDataResource(
|
||||||
arbitraryTransactionData.getName(),
|
arbitraryTransactionData.getName(),
|
||||||
|
@ -4,6 +4,7 @@ import org.apache.logging.log4j.LogManager;
|
|||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.qortal.arbitrary.ArbitraryDataFile;
|
import org.qortal.arbitrary.ArbitraryDataFile;
|
||||||
import org.qortal.arbitrary.ArbitraryDataResource;
|
import org.qortal.arbitrary.ArbitraryDataResource;
|
||||||
|
import org.qortal.arbitrary.metadata.ArbitraryDataTransactionMetadata;
|
||||||
import org.qortal.controller.Controller;
|
import org.qortal.controller.Controller;
|
||||||
import org.qortal.data.transaction.ArbitraryTransactionData;
|
import org.qortal.data.transaction.ArbitraryTransactionData;
|
||||||
import org.qortal.data.transaction.TransactionData;
|
import org.qortal.data.transaction.TransactionData;
|
||||||
@ -18,6 +19,7 @@ import org.qortal.utils.Base58;
|
|||||||
import org.qortal.utils.NTP;
|
import org.qortal.utils.NTP;
|
||||||
import org.qortal.utils.Triple;
|
import org.qortal.utils.Triple;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static org.qortal.controller.arbitrary.ArbitraryDataFileListManager.RELAY_REQUEST_MAX_DURATION;
|
import static org.qortal.controller.arbitrary.ArbitraryDataFileListManager.RELAY_REQUEST_MAX_DURATION;
|
||||||
@ -75,7 +77,7 @@ public class ArbitraryMetadataManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public byte[] fetchMetadata(ArbitraryDataResource arbitraryDataResource, boolean useRateLimiter) {
|
public ArbitraryDataTransactionMetadata fetchMetadata(ArbitraryDataResource arbitraryDataResource, boolean useRateLimiter) {
|
||||||
try (final Repository repository = RepositoryManager.getRepository()) {
|
try (final Repository repository = RepositoryManager.getRepository()) {
|
||||||
// Find latest transaction
|
// Find latest transaction
|
||||||
ArbitraryTransactionData latestTransaction = repository.getArbitraryRepository()
|
ArbitraryTransactionData latestTransaction = repository.getArbitraryRepository()
|
||||||
@ -91,17 +93,21 @@ public class ArbitraryMetadataManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ArbitraryDataFile metadataFile = ArbitraryDataFile.fromHash(metadataHash, signature);
|
ArbitraryDataFile metadataFile = ArbitraryDataFile.fromHash(metadataHash, signature);
|
||||||
|
if (!metadataFile.exists()) {
|
||||||
|
// Request from network
|
||||||
|
this.fetchArbitraryMetadata(latestTransaction, useRateLimiter);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now check again as it may have been downloaded above
|
||||||
if (metadataFile.exists()) {
|
if (metadataFile.exists()) {
|
||||||
// Use local copy
|
// Use local copy
|
||||||
return metadataFile.getBytes();
|
ArbitraryDataTransactionMetadata transactionMetadata = new ArbitraryDataTransactionMetadata(metadataFile.getFilePath());
|
||||||
}
|
transactionMetadata.read();
|
||||||
else {
|
return transactionMetadata;
|
||||||
// Request from network
|
|
||||||
return this.fetchArbitraryMetadata(latestTransaction, useRateLimiter);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (DataException e) {
|
} catch (DataException | IOException e) {
|
||||||
LOGGER.error("Repository issue when fetching arbitrary transaction metadata", e);
|
LOGGER.error("Repository issue when fetching arbitrary transaction metadata", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user