From 150b4e45d42dc4dff21c7121066833f0dfb1283e Mon Sep 17 00:00:00 2001 From: Simon Walton Date: Fri, 16 Aug 2019 17:30:28 -0700 Subject: [PATCH] More robust handling of the avatar verify-failed property --- interface/src/avatar/MyAvatar.h | 3 +++ interface/src/commerce/Wallet.cpp | 7 ++++++- .../src/avatars-renderer/Avatar.cpp | 2 +- libraries/avatars/src/AvatarData.cpp | 13 +++++++++++++ libraries/avatars/src/AvatarData.h | 2 +- libraries/avatars/src/AvatarHashMap.cpp | 4 ---- 6 files changed, 24 insertions(+), 7 deletions(-) diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index ad45df892b..bb6f036533 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -1866,6 +1866,9 @@ public: // also clears internal reaction triggers void updateRigControllerParameters(Rig::ControllerParameters& params); + // Don't substitute verify-fail: + virtual const QUrl& getSkeletonModelURL() const override { return _skeletonModelURL; } + public slots: /**jsdoc diff --git a/interface/src/commerce/Wallet.cpp b/interface/src/commerce/Wallet.cpp index 5af7a357b0..c449874117 100644 --- a/interface/src/commerce/Wallet.cpp +++ b/interface/src/commerce/Wallet.cpp @@ -830,9 +830,14 @@ void Wallet::handleChallengeOwnershipPacket(QSharedPointer pack } void Wallet::sendChallengeOwnershipResponses() { - if (_pendingChallenges.size() == 0 || getSalt().length() == 0) { + if (_pendingChallenges.size() == 0) { return; } + if (getSalt().length() == 0) { + qCDebug(commerce) << "Not responding to ownership challenge due to missing Wallet salt"; + return; + } + auto nodeList = DependencyManager::get(); EC_KEY* ec = readKeys(keyFilePath()); diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index a7e4a0ae9f..9d88dd47ea 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1511,7 +1511,7 @@ void Avatar::setSkeletonModelURL(const QUrl& skeletonModelURL) { } indicateLoadingStatus(LoadingStatus::LoadModel); - _skeletonModel->setURL(_skeletonModelURL); + _skeletonModel->setURL(getSkeletonModelURL()); } void Avatar::setModelURLFinished(bool success) { diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 7d5f38db40..72bead6e74 100755 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -1988,6 +1988,7 @@ void AvatarData::processAvatarIdentity(QDataStream& packetStream, bool& identity if (flagValue != _verificationFailed) { _verificationFailed = flagValue; identityChanged = true; + setSkeletonModelURL(_skeletonModelURL); } if (identity.attachmentData != _attachmentData) { @@ -2016,6 +2017,18 @@ QUrl AvatarData::getWireSafeSkeletonModelURL() const { return QUrl(); } } + +static const QString VERIFY_FAIL_MODEL { "/meshes/verifyFailed.fst" }; + +const QUrl& AvatarData::getSkeletonModelURL() const { + if (_verificationFailed) { + static QUrl VERIFY_FAIL_MODEL_URL = PathUtils::resourcesUrl(VERIFY_FAIL_MODEL); + return VERIFY_FAIL_MODEL_URL; + } else { + return _skeletonModelURL; + } +} + QByteArray AvatarData::packSkeletonData() const { // Send an avatar trait packet with the skeleton data before the mesh is loaded int avatarDataSize = 0; diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 20c5b1900d..59a2e2a53e 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -1205,7 +1205,7 @@ public: QByteArray identityByteArray(bool setIsReplicated = false) const; QUrl getWireSafeSkeletonModelURL() const; - const QUrl& getSkeletonModelURL() const { return _skeletonModelURL; } + virtual const QUrl& getSkeletonModelURL() const; const QString& getDisplayName() const { return _displayName; } const QString& getSessionDisplayName() const { return _sessionDisplayName; } diff --git a/libraries/avatars/src/AvatarHashMap.cpp b/libraries/avatars/src/AvatarHashMap.cpp index 0c7054424f..d0b315b524 100644 --- a/libraries/avatars/src/AvatarHashMap.cpp +++ b/libraries/avatars/src/AvatarHashMap.cpp @@ -330,10 +330,6 @@ void AvatarHashMap::processAvatarIdentityPacket(QSharedPointer bool displayNameChanged = false; // In this case, the "sendingNode" is the Avatar Mixer. avatar->processAvatarIdentity(avatarIdentityStream, identityChanged, displayNameChanged); - if (avatar->isCertifyFailed() && identityUUID != EMPTY) { - qCDebug(avatars) << "Avatar" << avatar->getSessionDisplayName() << "marked as VERIFY-FAILED"; - avatar->setSkeletonModelURL(PathUtils::resourcesUrl(VERIFY_FAIL_MODEL)); - } _replicas.processAvatarIdentity(identityUUID, message->getMessage(), identityChanged, displayNameChanged); } }