mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 14:18:24 +02:00
Bugfix.
This commit is contained in:
parent
704d4255a5
commit
ecc0a2f43b
3 changed files with 153 additions and 141 deletions
|
@ -24,6 +24,7 @@ Rectangle {
|
||||||
|
|
||||||
id: root;
|
id: root;
|
||||||
property string marketplaceUrl: "";
|
property string marketplaceUrl: "";
|
||||||
|
property string entityId: "";
|
||||||
property string certificateId: "";
|
property string certificateId: "";
|
||||||
property string itemName: "--";
|
property string itemName: "--";
|
||||||
property string itemOwner: "--";
|
property string itemOwner: "--";
|
||||||
|
@ -110,77 +111,81 @@ Rectangle {
|
||||||
}
|
}
|
||||||
|
|
||||||
onUpdateCertificateStatus: {
|
onUpdateCertificateStatus: {
|
||||||
root.certificateStatus = certStatus;
|
updateCertificateStatus(certStatus);
|
||||||
if (root.certificateStatus === 1) { // CERTIFICATE_STATUS_VERIFICATION_SUCCESS
|
|
||||||
root.useGoldCert = true;
|
|
||||||
root.certTitleTextColor = hifi.colors.darkGray;
|
|
||||||
root.certTextColor = hifi.colors.white;
|
|
||||||
root.infoTextColor = hifi.colors.blueAccent;
|
|
||||||
titleBarText.text = "Certificate";
|
|
||||||
popText.text = "PROOF OF PROVENANCE";
|
|
||||||
showInMarketplaceButton.visible = true;
|
|
||||||
root.certInfoReplaceMode = 5;
|
|
||||||
// "Item Name" text will be set in "onCertificateInfoResult()"
|
|
||||||
// "Edition" text will be set in "onCertificateInfoResult()"
|
|
||||||
// "Owner" text will be set in "onCertificateInfoResult()"
|
|
||||||
// "Purchase Date" text will be set in "onCertificateInfoResult()"
|
|
||||||
// "Purchase Price" text will be set in "onCertificateInfoResult()"
|
|
||||||
errorText.text = "";
|
|
||||||
} else if (root.certificateStatus === 2) { // CERTIFICATE_STATUS_VERIFICATION_TIMEOUT
|
|
||||||
root.useGoldCert = false;
|
|
||||||
root.certTitleTextColor = hifi.colors.redHighlight;
|
|
||||||
root.certTextColor = hifi.colors.redHighlight;
|
|
||||||
root.infoTextColor = hifi.colors.redHighlight;
|
|
||||||
titleBarText.text = "Request Timed Out";
|
|
||||||
popText.text = "";
|
|
||||||
showInMarketplaceButton.visible = false;
|
|
||||||
root.certInfoReplaceMode = 0;
|
|
||||||
root.itemName = "";
|
|
||||||
root.itemEdition = "";
|
|
||||||
root.itemOwner = "";
|
|
||||||
root.dateOfPurchase = "";
|
|
||||||
root.itemCost = "";
|
|
||||||
errorText.text = "Your request to inspect this item timed out. Please try again later.";
|
|
||||||
} else if (root.certificateStatus === 3) { // CERTIFICATE_STATUS_STATIC_VERIFICATION_FAILED
|
|
||||||
root.useGoldCert = false;
|
|
||||||
root.certTitleTextColor = hifi.colors.redHighlight;
|
|
||||||
root.certTextColor = hifi.colors.redHighlight;
|
|
||||||
root.infoTextColor = hifi.colors.redHighlight;
|
|
||||||
titleBarText.text = "Certificate\nNo Longer Valid";
|
|
||||||
popText.text = "";
|
|
||||||
showInMarketplaceButton.visible = true;
|
|
||||||
root.certInfoReplaceMode = 5;
|
|
||||||
// "Item Name" text will be set in "onCertificateInfoResult()"
|
|
||||||
// "Edition" text will be set in "onCertificateInfoResult()"
|
|
||||||
// "Owner" text will be set in "onCertificateInfoResult()"
|
|
||||||
// "Purchase Date" text will be set in "onCertificateInfoResult()"
|
|
||||||
// "Purchase Price" text will be set in "onCertificateInfoResult()"
|
|
||||||
errorText.text = "The information associated with this item has been modified and it no longer matches the original certified item.";
|
|
||||||
} else if (root.certificateStatus === 4) { // CERTIFICATE_STATUS_OWNER_VERIFICATION_FAILED
|
|
||||||
root.useGoldCert = false;
|
|
||||||
root.certTitleTextColor = hifi.colors.redHighlight;
|
|
||||||
root.certTextColor = hifi.colors.redHighlight;
|
|
||||||
root.infoTextColor = hifi.colors.redHighlight;
|
|
||||||
titleBarText.text = "Invalid Certificate";
|
|
||||||
popText.text = "";
|
|
||||||
showInMarketplaceButton.visible = true;
|
|
||||||
root.certInfoReplaceMode = 4;
|
|
||||||
// "Item Name" text will be set in "onCertificateInfoResult()"
|
|
||||||
root.itemEdition = "Uncertified Copy"
|
|
||||||
// "Owner" text will be set in "onCertificateInfoResult()"
|
|
||||||
// "Purchase Date" text will be set in "onCertificateInfoResult()"
|
|
||||||
// "Purchase Price" text will be set in "onCertificateInfoResult()"
|
|
||||||
// "Error Text" text will be set in "onCertificateInfoResult()"
|
|
||||||
} else {
|
|
||||||
console.log("Unknown certificate status received from ledger signal!");
|
|
||||||
}
|
|
||||||
|
|
||||||
root.certificateStatusPending = false;
|
|
||||||
// We've gotten cert status - we are GO on getting the cert info
|
|
||||||
Commerce.certificateInfo(root.certificateId);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateCertificateStatus(status) {
|
||||||
|
root.certificateStatus = status;
|
||||||
|
if (root.certificateStatus === 1) { // CERTIFICATE_STATUS_VERIFICATION_SUCCESS
|
||||||
|
root.useGoldCert = true;
|
||||||
|
root.certTitleTextColor = hifi.colors.darkGray;
|
||||||
|
root.certTextColor = hifi.colors.white;
|
||||||
|
root.infoTextColor = hifi.colors.blueAccent;
|
||||||
|
titleBarText.text = "Certificate";
|
||||||
|
popText.text = "PROOF OF PROVENANCE";
|
||||||
|
showInMarketplaceButton.visible = true;
|
||||||
|
root.certInfoReplaceMode = 5;
|
||||||
|
// "Item Name" text will be set in "onCertificateInfoResult()"
|
||||||
|
// "Edition" text will be set in "onCertificateInfoResult()"
|
||||||
|
// "Owner" text will be set in "onCertificateInfoResult()"
|
||||||
|
// "Purchase Date" text will be set in "onCertificateInfoResult()"
|
||||||
|
// "Purchase Price" text will be set in "onCertificateInfoResult()"
|
||||||
|
errorText.text = "";
|
||||||
|
} else if (root.certificateStatus === 2) { // CERTIFICATE_STATUS_VERIFICATION_TIMEOUT
|
||||||
|
root.useGoldCert = false;
|
||||||
|
root.certTitleTextColor = hifi.colors.redHighlight;
|
||||||
|
root.certTextColor = hifi.colors.redHighlight;
|
||||||
|
root.infoTextColor = hifi.colors.redHighlight;
|
||||||
|
titleBarText.text = "Request Timed Out";
|
||||||
|
popText.text = "";
|
||||||
|
showInMarketplaceButton.visible = false;
|
||||||
|
root.certInfoReplaceMode = 0;
|
||||||
|
root.itemName = "";
|
||||||
|
root.itemEdition = "";
|
||||||
|
root.itemOwner = "";
|
||||||
|
root.dateOfPurchase = "";
|
||||||
|
root.itemCost = "";
|
||||||
|
errorText.text = "Your request to inspect this item timed out. Please try again later.";
|
||||||
|
} else if (root.certificateStatus === 3) { // CERTIFICATE_STATUS_STATIC_VERIFICATION_FAILED
|
||||||
|
root.useGoldCert = false;
|
||||||
|
root.certTitleTextColor = hifi.colors.redHighlight;
|
||||||
|
root.certTextColor = hifi.colors.redHighlight;
|
||||||
|
root.infoTextColor = hifi.colors.redHighlight;
|
||||||
|
titleBarText.text = "Certificate\nNo Longer Valid";
|
||||||
|
popText.text = "";
|
||||||
|
showInMarketplaceButton.visible = true;
|
||||||
|
root.certInfoReplaceMode = 5;
|
||||||
|
// "Item Name" text will be set in "onCertificateInfoResult()"
|
||||||
|
// "Edition" text will be set in "onCertificateInfoResult()"
|
||||||
|
// "Owner" text will be set in "onCertificateInfoResult()"
|
||||||
|
// "Purchase Date" text will be set in "onCertificateInfoResult()"
|
||||||
|
// "Purchase Price" text will be set in "onCertificateInfoResult()"
|
||||||
|
errorText.text = "The information associated with this item has been modified and it no longer matches the original certified item.";
|
||||||
|
} else if (root.certificateStatus === 4) { // CERTIFICATE_STATUS_OWNER_VERIFICATION_FAILED
|
||||||
|
root.useGoldCert = false;
|
||||||
|
root.certTitleTextColor = hifi.colors.redHighlight;
|
||||||
|
root.certTextColor = hifi.colors.redHighlight;
|
||||||
|
root.infoTextColor = hifi.colors.redHighlight;
|
||||||
|
titleBarText.text = "Invalid Certificate";
|
||||||
|
popText.text = "";
|
||||||
|
showInMarketplaceButton.visible = true;
|
||||||
|
root.certInfoReplaceMode = 4;
|
||||||
|
// "Item Name" text will be set in "onCertificateInfoResult()"
|
||||||
|
root.itemEdition = "Uncertified Copy"
|
||||||
|
// "Owner" text will be set in "onCertificateInfoResult()"
|
||||||
|
// "Purchase Date" text will be set in "onCertificateInfoResult()"
|
||||||
|
// "Purchase Price" text will be set in "onCertificateInfoResult()"
|
||||||
|
// "Error Text" text will be set in "onCertificateInfoResult()"
|
||||||
|
} else {
|
||||||
|
console.log("Unknown certificate status received from ledger signal!");
|
||||||
|
}
|
||||||
|
|
||||||
|
root.certificateStatusPending = false;
|
||||||
|
// We've gotten cert status - we are GO on getting the cert info
|
||||||
|
Commerce.certificateInfo(root.certificateId);
|
||||||
|
}
|
||||||
|
|
||||||
// This object is always used in a popup.
|
// This object is always used in a popup.
|
||||||
// This MouseArea is used to prevent a user from being
|
// This MouseArea is used to prevent a user from being
|
||||||
// able to click on a button/mouseArea underneath the popup.
|
// able to click on a button/mouseArea underneath the popup.
|
||||||
|
@ -563,7 +568,12 @@ Rectangle {
|
||||||
case 'inspectionCertificate_setCertificateId':
|
case 'inspectionCertificate_setCertificateId':
|
||||||
resetCert(false);
|
resetCert(false);
|
||||||
root.certificateId = message.certificateId;
|
root.certificateId = message.certificateId;
|
||||||
sendToScript({method: 'inspectionCertificate_requestOwnershipVerification', certificateId: root.certificateId});
|
if (message.entityId === "") {
|
||||||
|
updateCertificateStatus(1); // CERTIFICATE_STATUS_VERIFICATION_SUCCESS
|
||||||
|
} else {
|
||||||
|
root.entityId = message.entityId;
|
||||||
|
sendToScript({method: 'inspectionCertificate_requestOwnershipVerification', entity: root.entityId});
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'inspectionCertificate_resetCert':
|
case 'inspectionCertificate_resetCert':
|
||||||
resetCert(true);
|
resetCert(true);
|
||||||
|
@ -576,6 +586,7 @@ Rectangle {
|
||||||
|
|
||||||
function resetCert(alsoResetCertID) {
|
function resetCert(alsoResetCertID) {
|
||||||
if (alsoResetCertID) {
|
if (alsoResetCertID) {
|
||||||
|
root.entityId = "";
|
||||||
root.certificateId = "";
|
root.certificateId = "";
|
||||||
}
|
}
|
||||||
root.certInfoReplaceMode = 5;
|
root.certInfoReplaceMode = 5;
|
||||||
|
|
|
@ -274,88 +274,88 @@ void ContextOverlayInterface::requestOwnershipVerification(const QUuid& entityID
|
||||||
|
|
||||||
auto nodeList = DependencyManager::get<NodeList>();
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
|
|
||||||
if (entityProperties.getClientOnly()) {
|
if (entityProperties.verifyStaticCertificateProperties()) {
|
||||||
if (entityProperties.verifyStaticCertificateProperties()) {
|
if (entityProperties.getClientOnly()) {
|
||||||
SharedNodePointer entityServer = nodeList->soloNodeOfType(NodeType::EntityServer);
|
SharedNodePointer entityServer = nodeList->soloNodeOfType(NodeType::EntityServer);
|
||||||
|
|
||||||
if (entityServer) {
|
if (entityServer) {
|
||||||
QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
|
QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
|
||||||
QNetworkRequest networkRequest;
|
QNetworkRequest networkRequest;
|
||||||
networkRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
|
networkRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
|
||||||
networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
||||||
QUrl requestURL = NetworkingConstants::METAVERSE_SERVER_URL();
|
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/transfer");
|
||||||
QJsonObject request;
|
QJsonObject request;
|
||||||
request["certificate_id"] = entityProperties.getCertificateID();
|
request["certificate_id"] = entityProperties.getCertificateID();
|
||||||
networkRequest.setUrl(requestURL);
|
networkRequest.setUrl(requestURL);
|
||||||
|
|
||||||
QNetworkReply* networkReply = NULL;
|
QNetworkReply* networkReply = NULL;
|
||||||
networkReply = networkAccessManager.put(networkRequest, QJsonDocument(request).toJson());
|
networkReply = networkAccessManager.put(networkRequest, QJsonDocument(request).toJson());
|
||||||
|
|
||||||
connect(networkReply, &QNetworkReply::finished, [=]() {
|
connect(networkReply, &QNetworkReply::finished, [=]() {
|
||||||
QJsonObject jsonObject = QJsonDocument::fromJson(networkReply->readAll()).object();
|
QJsonObject jsonObject = QJsonDocument::fromJson(networkReply->readAll()).object();
|
||||||
jsonObject = jsonObject["data"].toObject();
|
jsonObject = jsonObject["data"].toObject();
|
||||||
|
|
||||||
if (networkReply->error() == QNetworkReply::NoError) {
|
if (networkReply->error() == QNetworkReply::NoError) {
|
||||||
if (!jsonObject["invalid_reason"].toString().isEmpty()) {
|
if (!jsonObject["invalid_reason"].toString().isEmpty()) {
|
||||||
qCDebug(entities) << "invalid_reason not empty";
|
qCDebug(entities) << "invalid_reason not empty";
|
||||||
} else if (jsonObject["transfer_status"].toArray().first().toString() == "failed") {
|
} else if (jsonObject["transfer_status"].toArray().first().toString() == "failed") {
|
||||||
qCDebug(entities) << "'transfer_status' is 'failed'";
|
qCDebug(entities) << "'transfer_status' is 'failed'";
|
||||||
} else if (jsonObject["transfer_status"].toArray().first().toString() == "pending") {
|
} else if (jsonObject["transfer_status"].toArray().first().toString() == "pending") {
|
||||||
qCDebug(entities) << "'transfer_status' is 'pending'";
|
qCDebug(entities) << "'transfer_status' is 'pending'";
|
||||||
} else {
|
|
||||||
QString ownerKey = jsonObject["transfer_recipient_key"].toString();
|
|
||||||
|
|
||||||
QByteArray certID = entityProperties.getCertificateID().toUtf8();
|
|
||||||
QByteArray text = DependencyManager::get<EntityTreeRenderer>()->getTree()->computeNonce(certID, ownerKey);
|
|
||||||
QByteArray nodeToChallengeByteArray = entityProperties.getOwningAvatarID().toRfc4122();
|
|
||||||
|
|
||||||
int certIDByteArraySize = certID.length();
|
|
||||||
int textByteArraySize = text.length();
|
|
||||||
int nodeToChallengeByteArraySize = nodeToChallengeByteArray.length();
|
|
||||||
|
|
||||||
auto challengeOwnershipPacket = NLPacket::create(PacketType::ChallengeOwnershipRequest,
|
|
||||||
certIDByteArraySize + textByteArraySize + nodeToChallengeByteArraySize + 3 * sizeof(int),
|
|
||||||
true);
|
|
||||||
challengeOwnershipPacket->writePrimitive(certIDByteArraySize);
|
|
||||||
challengeOwnershipPacket->writePrimitive(textByteArraySize);
|
|
||||||
challengeOwnershipPacket->writePrimitive(nodeToChallengeByteArraySize);
|
|
||||||
challengeOwnershipPacket->write(certID);
|
|
||||||
challengeOwnershipPacket->write(text);
|
|
||||||
challengeOwnershipPacket->write(nodeToChallengeByteArray);
|
|
||||||
nodeList->sendPacket(std::move(challengeOwnershipPacket), *entityServer);
|
|
||||||
|
|
||||||
// Kickoff a 10-second timeout timer that marks the cert if we don't get an ownership response in time
|
|
||||||
if (thread() != QThread::currentThread()) {
|
|
||||||
QMetaObject::invokeMethod(this, "startChallengeOwnershipTimer");
|
|
||||||
return;
|
|
||||||
} else {
|
} else {
|
||||||
startChallengeOwnershipTimer();
|
QString ownerKey = jsonObject["transfer_recipient_key"].toString();
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
qCDebug(entities) << "Call to" << networkReply->url() << "failed with error" << networkReply->error() <<
|
|
||||||
"More info:" << networkReply->readAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
networkReply->deleteLater();
|
QByteArray certID = entityProperties.getCertificateID().toUtf8();
|
||||||
});
|
QByteArray text = DependencyManager::get<EntityTreeRenderer>()->getTree()->computeNonce(certID, ownerKey);
|
||||||
} else {
|
QByteArray nodeToChallengeByteArray = entityProperties.getOwningAvatarID().toRfc4122();
|
||||||
qCWarning(context_overlay) << "Couldn't get Entity Server!";
|
|
||||||
}
|
int certIDByteArraySize = certID.length();
|
||||||
|
int textByteArraySize = text.length();
|
||||||
|
int nodeToChallengeByteArraySize = nodeToChallengeByteArray.length();
|
||||||
|
|
||||||
|
auto challengeOwnershipPacket = NLPacket::create(PacketType::ChallengeOwnershipRequest,
|
||||||
|
certIDByteArraySize + textByteArraySize + nodeToChallengeByteArraySize + 3 * sizeof(int),
|
||||||
|
true);
|
||||||
|
challengeOwnershipPacket->writePrimitive(certIDByteArraySize);
|
||||||
|
challengeOwnershipPacket->writePrimitive(textByteArraySize);
|
||||||
|
challengeOwnershipPacket->writePrimitive(nodeToChallengeByteArraySize);
|
||||||
|
challengeOwnershipPacket->write(certID);
|
||||||
|
challengeOwnershipPacket->write(text);
|
||||||
|
challengeOwnershipPacket->write(nodeToChallengeByteArray);
|
||||||
|
nodeList->sendPacket(std::move(challengeOwnershipPacket), *entityServer);
|
||||||
|
|
||||||
|
// Kickoff a 10-second timeout timer that marks the cert if we don't get an ownership response in time
|
||||||
|
if (thread() != QThread::currentThread()) {
|
||||||
|
QMetaObject::invokeMethod(this, "startChallengeOwnershipTimer");
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
startChallengeOwnershipTimer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
qCDebug(entities) << "Call to" << networkReply->url() << "failed with error" << networkReply->error() <<
|
||||||
|
"More info:" << networkReply->readAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
networkReply->deleteLater();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
qCWarning(context_overlay) << "Couldn't get Entity Server!";
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// We don't currently verify ownership of entities that aren't Avatar Entities,
|
||||||
|
// so they always pass Ownership Verification. It's necessary to emit this signal
|
||||||
|
// so that the Inspection Certificate can continue its information-grabbing process.
|
||||||
auto ledger = DependencyManager::get<Ledger>();
|
auto ledger = DependencyManager::get<Ledger>();
|
||||||
_challengeOwnershipTimeoutTimer.stop();
|
emit ledger->updateCertificateStatus(entityProperties.getCertificateID(), (uint)(ledger->CERTIFICATE_STATUS_VERIFICATION_SUCCESS));
|
||||||
emit ledger->updateCertificateStatus(entityProperties.getCertificateID(), (uint)(ledger->CERTIFICATE_STATUS_STATIC_VERIFICATION_FAILED));
|
|
||||||
emit DependencyManager::get<WalletScriptingInterface>()->ownershipVerificationFailed(_lastInspectedEntity);
|
|
||||||
qCDebug(context_overlay) << "Entity" << _lastInspectedEntity << "failed static certificate verification!";
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// We don't currently verify ownership of entities that aren't Avatar Entities,
|
|
||||||
// so they always pass Ownership Verification. It's necessary to emit this signal
|
|
||||||
// so that the Inspection Certificate can continue its information-grabbing process.
|
|
||||||
auto ledger = DependencyManager::get<Ledger>();
|
auto ledger = DependencyManager::get<Ledger>();
|
||||||
emit ledger->updateCertificateStatus(entityProperties.getCertificateID(), (uint)(ledger->CERTIFICATE_STATUS_VERIFICATION_SUCCESS));
|
_challengeOwnershipTimeoutTimer.stop();
|
||||||
|
emit ledger->updateCertificateStatus(entityProperties.getCertificateID(), (uint)(ledger->CERTIFICATE_STATUS_STATIC_VERIFICATION_FAILED));
|
||||||
|
emit DependencyManager::get<WalletScriptingInterface>()->ownershipVerificationFailed(_lastInspectedEntity);
|
||||||
|
qCDebug(context_overlay) << "Entity" << _lastInspectedEntity << "failed static certificate verification!";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -163,6 +163,7 @@ var selectionDisplay = null; // for gridTool.js to ignore
|
||||||
var certificateId = itemCertificateId || (Entities.getEntityProperties(currentEntityWithContextOverlay, ['certificateID']).certificateID);
|
var certificateId = itemCertificateId || (Entities.getEntityProperties(currentEntityWithContextOverlay, ['certificateID']).certificateID);
|
||||||
tablet.sendToQml({
|
tablet.sendToQml({
|
||||||
method: 'inspectionCertificate_setCertificateId',
|
method: 'inspectionCertificate_setCertificateId',
|
||||||
|
entityId: currentEntityWithContextOverlay,
|
||||||
certificateId: certificateId
|
certificateId: certificateId
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -584,7 +585,7 @@ var selectionDisplay = null; // for gridTool.js to ignore
|
||||||
tablet.gotoHomeScreen();
|
tablet.gotoHomeScreen();
|
||||||
break;
|
break;
|
||||||
case 'inspectionCertificate_requestOwnershipVerification':
|
case 'inspectionCertificate_requestOwnershipVerification':
|
||||||
ContextOverlay.requestOwnershipVerification(message.certificateId);
|
ContextOverlay.requestOwnershipVerification(message.entity);
|
||||||
break;
|
break;
|
||||||
case 'inspectionCertificate_showInMarketplaceClicked':
|
case 'inspectionCertificate_showInMarketplaceClicked':
|
||||||
tablet.gotoWebScreen(message.marketplaceUrl, MARKETPLACES_INJECT_SCRIPT_URL);
|
tablet.gotoWebScreen(message.marketplaceUrl, MARKETPLACES_INJECT_SCRIPT_URL);
|
||||||
|
|
Loading…
Reference in a new issue