diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index b01c9b2d26..0f5059d688 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -1097,6 +1097,29 @@ bool EntityTree::isScriptInWhitelist(const QString& scriptProperty) { return false; } +void EntityTree::popStatusSuccess(QNetworkReply& reply) { + QJsonObject jsonObject = QJsonDocument::fromJson(reply.readAll()).object(); + qCDebug(entities) << "ZRF FIXME" << jsonObject; + //if (!jsonObject["invalid_reason"].toString().isEmpty()) { + // qCDebug(entities) << "invalid_reason not empty, deleting entity" << entityItemID; + // deleteEntity(entityItemID, true); + //} else if (jsonObject["transfer_status"].toString() == "failed") { + // qCDebug(entities) << "'transfer_status' is 'failed', deleting entity" << entityItemID; + // deleteEntity(entityItemID, true); + //} else { + // //auto challengeOwnershipPacket = NLPacket::create(PacketType::ChallengeOwnership, NUM_BYTES_RFC4122_UUID + sizeof(encryptedText)); + // //challengeOwnershipPacket->write(senderNode->getUUID()); + // //challengeOwnershipPacket->writePrimitive(KillAvatarReason::TheirAvatarEnteredYourBubble); + //} +} + +void EntityTree::popStatusFailure(QNetworkReply& reply) { + QJsonObject jsonObject = QJsonDocument::fromJson(reply.readAll()).object(); + qCDebug(entities) << "ZRF FIXME" << jsonObject; + //qCDebug(entities) << "Call to proof_of_purchase_status endpoint failed; deleting entity" << entityItemID; + //deleteEntity(entityItemID, true); +} + int EntityTree::processEditPacketData(ReceivedMessage& message, const unsigned char* editData, int maxLength, const SharedNodePointer& senderNode) { @@ -1322,7 +1345,22 @@ int EntityTree::processEditPacketData(ReceivedMessage& message, const unsigned c qCDebug(entities) << "Certificate ID" << certID << "belongs to" << entityItemID; } - // Start owner verification + // Start owner verification. + // First, asynchronously hit "proof_of_purchase_status?transaction_type=transfer" endpoint. + const QString endpoint("proof_of_purchase_status?transaction_type=transfer"); + QJsonObject request; + request["certificate_id"] = certID; + request["domain_id"] = DependencyManager::get()->getDomainHandler().getUUID().toString(); + + auto accountManager = DependencyManager::get(); + const QString URL = "/api/v1/commerce/"; + JSONCallbackParameters callbackParams(this, "popStatusSuccess", this, "popStatusFailure"); + qCDebug(entities) << "Sending" << endpoint << QJsonDocument(request).toJson(QJsonDocument::Compact); + accountManager->sendRequest(URL + endpoint, + AccountManagerAuth::None, + QNetworkAccessManager::PostOperation, + callbackParams, + QJsonDocument(request).toJson()); } } diff --git a/libraries/entities/src/EntityTree.h b/libraries/entities/src/EntityTree.h index 4168dc3b66..8c26cd0791 100644 --- a/libraries/entities/src/EntityTree.h +++ b/libraries/entities/src/EntityTree.h @@ -15,6 +15,11 @@ #include #include +#include "AccountManager.h" +#include +#include +#include + #include #include @@ -277,6 +282,10 @@ signals: void newCollisionSoundURL(const QUrl& url, const EntityItemID& entityID); void clearingEntities(); +private slots: + void popStatusSuccess(QNetworkReply& reply); + void popStatusFailure(QNetworkReply& reply); + protected: void processRemovedEntities(const DeleteEntityOperator& theOperator);