diff --git a/assignment-client/src/entities/EntityServer.cpp b/assignment-client/src/entities/EntityServer.cpp index 0b27cfa408..475c911bb8 100644 --- a/assignment-client/src/entities/EntityServer.cpp +++ b/assignment-client/src/entities/EntityServer.cpp @@ -442,7 +442,7 @@ void EntityServer::domainSettingsRequestFailed() { void EntityServer::startDynamicDomainVerification() { qCDebug(entities) << "Starting Dynamic Domain Verification..."; - QString thisPlaceName = DependencyManager::get()->currentAddress().authority(); + QString thisPlaceName = DependencyManager::get()->getPlaceName(); EntityTreePointer tree = std::static_pointer_cast(_tree); QHash localMap(tree->getEntityCertificateIDMap()); @@ -466,7 +466,7 @@ void EntityServer::startDynamicDomainVerification() { networkRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); QUrl requestURL = NetworkingConstants::METAVERSE_SERVER_URL; - requestURL.setPath("/api/v1/commerce/proof_of_purchase_status/transfer"); + requestURL.setPath("/api/v1/commerce/proof_of_purchase_status/location"); QJsonObject request; request["certificate_id"] = i.key(); networkRequest.setUrl(requestURL); @@ -486,8 +486,11 @@ void EntityServer::startDynamicDomainVerification() { // ZRF FIXME!!! //if (jsonObject["place_name"].toString() != thisPlaceName) { if (false) { - qCDebug(entities) << "Entity's cert's place name isn't the current place name; deleting entity" << i.value(); + qCDebug(entities) << "Entity's cert's place name" << jsonObject["place_name"].toString() + << "isn't the current place name" << thisPlaceName << "; deleting entity" << i.value(); tree->deleteEntity(i.value(), true); + } else { + qCDebug(entities) << "Entity passed dynamic domain verification:" << i.value(); } } else { qCDebug(entities) << "Call to proof_of_purchase_status endpoint failed; deleting entity" << i.value(); diff --git a/interface/src/commerce/Wallet.cpp b/interface/src/commerce/Wallet.cpp index 74f5e700f6..0bdb3c03ec 100644 --- a/interface/src/commerce/Wallet.cpp +++ b/interface/src/commerce/Wallet.cpp @@ -750,7 +750,7 @@ void Wallet::handleChallengeOwnershipPacket(QSharedPointer pack decryptedTextPacket->write(certID); decryptedTextPacket->write(decryptedTextByteArray); - qCDebug(commerce) << "Sending ChallengeOwnership Packet containing decrypted text"; + qCDebug(commerce) << "Sending ChallengeOwnership Packet containing decrypted text" << decryptedTextByteArray << "for CertID" << certID; nodeList->sendPacket(std::move(decryptedTextPacket), *sendingNode); } else { diff --git a/libraries/entities/src/EntityEditPacketSender.cpp b/libraries/entities/src/EntityEditPacketSender.cpp index aa045acbcc..5527cbc5ba 100644 --- a/libraries/entities/src/EntityEditPacketSender.cpp +++ b/libraries/entities/src/EntityEditPacketSender.cpp @@ -111,7 +111,7 @@ void EntityEditPacketSender::queueEditEntityMessage(PacketType type, #endif queueOctreeEditMessage(type, bufferOut); if (type == PacketType::EntityAdd && !properties.getCertificateID().isEmpty()) { - emit addingEntityWithCertificate(properties.getCertificateID(), DependencyManager::get()->currentAddress().authority()); + emit addingEntityWithCertificate(properties.getCertificateID(), DependencyManager::get()->getPlaceName()); } } } diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index 202d9f74b7..69b7e5ab33 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -1187,10 +1187,25 @@ QByteArray EntityTree::computeEncryptedNonce(const QString& certID, const QStrin } bool EntityTree::verifyDecryptedNonce(const QString& certID, const QString& decryptedNonce) { + + QReadLocker certIdMapLocker(&_entityCertificateIDMapLock); + EntityItemID id = _entityCertificateIDMap.value(certID); + QWriteLocker locker(&_certNonceMapLock); QString actualNonce = _certNonceMap.take(certID).toString(); - return actualNonce == decryptedNonce; + bool verificationSuccess = (actualNonce == decryptedNonce); + if (!verificationSuccess) { + if (!id.isNull()) { + qCDebug(entities) << "Ownership challenge for Cert ID" << certID << "failed; deleting entity" << id + << "\nActual nonce:" << actualNonce << "\nDecrypted nonce:" << decryptedNonce; + deleteEntity(id, true); + } + } else { + qCDebug(entities) << "Ownership challenge for Cert ID" << certID << "succeeded; keeping entity" << id; + } + + return verificationSuccess; } void EntityTree::validatePop(const QString& certID, const EntityItemID& entityItemID, const SharedNodePointer& senderNode, bool isRetryingValidation) { @@ -1289,22 +1304,9 @@ void EntityTree::processChallengeOwnershipPacket(ReceivedMessage& message, const QString certID(message.read(certIDByteArraySize)); QString decryptedText(message.read(decryptedTextByteArraySize)); - EntityItemID id; - { - QReadLocker certIdMapLocker(&_entityCertificateIDMapLock); - id = _entityCertificateIDMap.value(certID); - } - emit killChallengeOwnershipTimeoutTimer(certID); - if (!verifyDecryptedNonce(certID, decryptedText)) { - if (!id.isNull()) { - qCDebug(entities) << "Ownership challenge for Cert ID" << certID << "failed; deleting entity" << id; - deleteEntity(id, true); - } - } else { - qCDebug(entities) << "Ownership challenge for Cert ID" << certID << "succeeded; keeping entity" << id; - } + verifyDecryptedNonce(certID, decryptedText); } int EntityTree::processEditPacketData(ReceivedMessage& message, const unsigned char* editData, int maxLength,