More improvements to Service handling.

This commit is contained in:
CalDescent 2023-03-19 10:17:56 +00:00
parent 713fd4f0c6
commit 2848ae695c
6 changed files with 58 additions and 6 deletions

View File

@ -540,6 +540,9 @@ public class ArbitraryResource {
} }
for (ArbitraryTransactionData transactionData : transactionDataList) { for (ArbitraryTransactionData transactionData : transactionDataList) {
if (transactionData.getService() == null) {
continue;
}
ArbitraryResourceInfo arbitraryResourceInfo = new ArbitraryResourceInfo(); ArbitraryResourceInfo arbitraryResourceInfo = new ArbitraryResourceInfo();
arbitraryResourceInfo.name = transactionData.getName(); arbitraryResourceInfo.name = transactionData.getName();
arbitraryResourceInfo.service = transactionData.getService(); arbitraryResourceInfo.service = transactionData.getService();

View File

@ -163,7 +163,7 @@ public class PirateChainWalletController extends Thread {
// Library not found, so check if we've fetched the resource from QDN // Library not found, so check if we've fetched the resource from QDN
ArbitraryTransactionData t = this.getTransactionData(repository); ArbitraryTransactionData t = this.getTransactionData(repository);
if (t == null) { if (t == null || t.getService() == null) {
// Can't find the transaction - maybe on a different chain? // Can't find the transaction - maybe on a different chain?
return; return;
} }

View File

@ -137,7 +137,7 @@ public class ArbitraryDataCleanupManager extends Thread {
// Fetch the transaction data // Fetch the transaction data
ArbitraryTransactionData arbitraryTransactionData = ArbitraryTransactionUtils.fetchTransactionData(repository, signature); ArbitraryTransactionData arbitraryTransactionData = ArbitraryTransactionUtils.fetchTransactionData(repository, signature);
if (arbitraryTransactionData == null) { if (arbitraryTransactionData == null || arbitraryTransactionData.getService() == null) {
continue; continue;
} }

View File

@ -398,6 +398,11 @@ public class ArbitraryDataManager extends Thread {
// Entrypoint to request new metadata from peers // Entrypoint to request new metadata from peers
public ArbitraryDataTransactionMetadata fetchMetadata(ArbitraryTransactionData arbitraryTransactionData) { public ArbitraryDataTransactionMetadata fetchMetadata(ArbitraryTransactionData arbitraryTransactionData) {
if (arbitraryTransactionData.getService() == null) {
// Can't fetch metadata without a valid service
return null;
}
ArbitraryDataResource resource = new ArbitraryDataResource( ArbitraryDataResource resource = new ArbitraryDataResource(
arbitraryTransactionData.getName(), arbitraryTransactionData.getName(),
ArbitraryDataFile.ResourceIdType.NAME, ArbitraryDataFile.ResourceIdType.NAME,
@ -489,7 +494,7 @@ public class ArbitraryDataManager extends Thread {
public void invalidateCache(ArbitraryTransactionData arbitraryTransactionData) { public void invalidateCache(ArbitraryTransactionData arbitraryTransactionData) {
String signature58 = Base58.encode(arbitraryTransactionData.getSignature()); String signature58 = Base58.encode(arbitraryTransactionData.getSignature());
if (arbitraryTransactionData.getName() != null) { if (arbitraryTransactionData.getName() != null && arbitraryTransactionData.getService() != null) {
String resourceId = arbitraryTransactionData.getName().toLowerCase(); String resourceId = arbitraryTransactionData.getName().toLowerCase();
Service service = arbitraryTransactionData.getService(); Service service = arbitraryTransactionData.getService();
String identifier = arbitraryTransactionData.getIdentifier(); String identifier = arbitraryTransactionData.getIdentifier();

View File

@ -66,7 +66,7 @@ public class HSQLDBArbitraryTransactionRepository extends HSQLDBTransactionRepos
HSQLDBSaver saveHelper = new HSQLDBSaver("ArbitraryTransactions"); HSQLDBSaver saveHelper = new HSQLDBSaver("ArbitraryTransactions");
saveHelper.bind("signature", arbitraryTransactionData.getSignature()).bind("sender", arbitraryTransactionData.getSenderPublicKey()) saveHelper.bind("signature", arbitraryTransactionData.getSignature()).bind("sender", arbitraryTransactionData.getSenderPublicKey())
.bind("version", arbitraryTransactionData.getVersion()).bind("service", arbitraryTransactionData.getService().value) .bind("version", arbitraryTransactionData.getVersion()).bind("service", arbitraryTransactionData.getServiceInt())
.bind("nonce", arbitraryTransactionData.getNonce()).bind("size", arbitraryTransactionData.getSize()) .bind("nonce", arbitraryTransactionData.getNonce()).bind("size", arbitraryTransactionData.getSize())
.bind("is_data_raw", arbitraryTransactionData.getDataType() == DataType.RAW_DATA).bind("data", arbitraryTransactionData.getData()) .bind("is_data_raw", arbitraryTransactionData.getDataType() == DataType.RAW_DATA).bind("data", arbitraryTransactionData.getData())
.bind("metadata_hash", arbitraryTransactionData.getMetadataHash()).bind("name", arbitraryTransactionData.getName()) .bind("metadata_hash", arbitraryTransactionData.getMetadataHash()).bind("name", arbitraryTransactionData.getName())

View File

@ -6,12 +6,14 @@ import org.junit.Test;
import org.qortal.account.PrivateKeyAccount; import org.qortal.account.PrivateKeyAccount;
import org.qortal.arbitrary.ArbitraryDataFile; import org.qortal.arbitrary.ArbitraryDataFile;
import org.qortal.arbitrary.ArbitraryDataTransactionBuilder; import org.qortal.arbitrary.ArbitraryDataTransactionBuilder;
import org.qortal.arbitrary.exception.MissingDataException;
import org.qortal.arbitrary.misc.Service; import org.qortal.arbitrary.misc.Service;
import org.qortal.controller.arbitrary.ArbitraryDataManager; import org.qortal.controller.arbitrary.ArbitraryDataManager;
import org.qortal.data.PaymentData;
import org.qortal.data.transaction.ArbitraryTransactionData; import org.qortal.data.transaction.ArbitraryTransactionData;
import org.qortal.data.transaction.BaseTransactionData;
import org.qortal.data.transaction.RegisterNameTransactionData; import org.qortal.data.transaction.RegisterNameTransactionData;
import org.qortal.data.transaction.TransactionData; import org.qortal.data.transaction.TransactionData;
import org.qortal.group.Group;
import org.qortal.repository.DataException; import org.qortal.repository.DataException;
import org.qortal.repository.Repository; import org.qortal.repository.Repository;
import org.qortal.repository.RepositoryManager; import org.qortal.repository.RepositoryManager;
@ -25,9 +27,11 @@ import org.qortal.transaction.Transaction;
import org.qortal.utils.Base58; import org.qortal.utils.Base58;
import org.qortal.utils.NTP; import org.qortal.utils.NTP;
import javax.xml.crypto.Data;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import static org.junit.Assert.*; import static org.junit.Assert.*;
@ -423,4 +427,44 @@ public class ArbitraryTransactionTests extends Common {
assertTrue(transaction.isSignatureValid()); assertTrue(transaction.isSignatureValid());
} }
} }
@Test
public void testInvalidService() {
byte[] randomHash = new byte[32];
new Random().nextBytes(randomHash);
byte[] lastReference = new byte[64];
new Random().nextBytes(lastReference);
Long now = NTP.getTime();
final BaseTransactionData baseTransactionData = new BaseTransactionData(now, Group.NO_GROUP,
lastReference, randomHash, 0L, null);
final String name = "test";
final String identifier = "test";
final ArbitraryTransactionData.Method method = ArbitraryTransactionData.Method.PUT;
final ArbitraryTransactionData.Compression compression = ArbitraryTransactionData.Compression.ZIP;
final int size = 999;
final int version = 5;
final int nonce = 0;
final byte[] secret = randomHash;
final ArbitraryTransactionData.DataType dataType = ArbitraryTransactionData.DataType.DATA_HASH;
final byte[] digest = randomHash;
final byte[] metadataHash = null;
final List<PaymentData> payments = new ArrayList<>();
final int validService = Service.IMAGE.value;
final int invalidService = 99999999;
// Try with valid service
ArbitraryTransactionData transactionData = new ArbitraryTransactionData(baseTransactionData,
version, validService, nonce, size, name, identifier, method,
secret, compression, digest, dataType, metadataHash, payments);
assertEquals(Service.IMAGE, transactionData.getService());
// Try with invalid service
transactionData = new ArbitraryTransactionData(baseTransactionData,
version, invalidService, nonce, size, name, identifier, method,
secret, compression, digest, dataType, metadataHash, payments);
assertNull(transactionData.getService());
}
} }