fix NodeConnectionData discrepancy on request

This commit is contained in:
Stephen Birarda 2015-08-24 14:43:49 -07:00
parent e8772277de
commit d2acf327dd
4 changed files with 19 additions and 8 deletions

View file

@ -168,6 +168,10 @@ SharedNodePointer DomainGatekeeper::processAgentConnectRequest(const NodeConnect
if (usernameSignature.isEmpty()) {
// if user didn't include usernameSignature in connect request, send a connectionToken packet
sendConnectionTokenPacket(username, nodeConnection.senderSockAddr);
// ask for their public key right now to make sure we have it
requestUserPublicKey(username);
return SharedNodePointer();
}
}
@ -205,11 +209,9 @@ SharedNodePointer DomainGatekeeper::processAgentConnectRequest(const NodeConnect
valueForKeyPath(_server->_settingsManager.getSettingsMap(), ALLOWED_EDITORS_SETTINGS_KEYPATH);
QStringList allowedEditors = allowedEditorsVariant ? allowedEditorsVariant->toStringList() : QStringList();
bool isAllowedEditor = allowedEditors.isEmpty() || allowedEditors.contains(username);
bool canAdjustLocks = allowedEditors.empty();
bool canAdjustLocks = false;
if (isAllowedEditor) {
if (allowedEditors.contains(username)) {
if (!verifiedUsername) {
if (!verifyUserSignature(username, usernameSignature, HifiSockAddr())) {
qDebug() << "Could not verify user" << username << "as allowed editor. User will still be allowed to connect"
@ -394,6 +396,8 @@ bool DomainGatekeeper::isWithinMaxCapacity(const QString& username, const QByteA
if (allowedEditors.contains(username)) {
if (verifiedUsername || verifyUserSignature(username, usernameSignature, senderSockAddr)) {
verifiedUsername = true;
qDebug() << "Above maximum capacity -" << connectedUsers << "/" << maximumUserCapacity <<
"but user" << username << "is in allowed editors list so will be allowed to connect.";
return true;
}
}

View file

@ -574,7 +574,7 @@ void DomainServer::populateDefaultStaticAssignmentsExcludingTypes(const QSet<Ass
void DomainServer::processListRequestPacket(QSharedPointer<NLPacket> packet, SharedNodePointer sendingNode) {
QDataStream packetStream(packet.data());
NodeConnectionData nodeRequestData = NodeConnectionData::fromDataStream(packetStream, packet->getSenderSockAddr());
NodeConnectionData nodeRequestData = NodeConnectionData::fromDataStream(packetStream, packet->getSenderSockAddr(), false);
// update this node's sockets in case they have changed
sendingNode->setPublicSocket(nodeRequestData.publicSockAddr);
@ -675,6 +675,7 @@ void DomainServer::sendDomainListToNode(const SharedNodePointer& node, const Hif
// if this authenticated node has any interest types, send back those nodes as well
limitedNodeList->eachNode([&](const SharedNodePointer& otherNode){
if (otherNode->getUUID() != node->getUUID() && nodeInterestSet.contains(otherNode->getType())) {
// since we're about to add a node to the packet we start a segment
domainListPackets.startSegment();

View file

@ -11,10 +11,15 @@
#include "NodeConnectionData.h"
NodeConnectionData NodeConnectionData::fromDataStream(QDataStream& dataStream, const HifiSockAddr& senderSockAddr) {
NodeConnectionData NodeConnectionData::fromDataStream(QDataStream& dataStream, const HifiSockAddr& senderSockAddr,
bool isConnectRequest) {
NodeConnectionData newHeader;
dataStream >> newHeader.connectUUID >> newHeader.nodeType
if (isConnectRequest) {
dataStream >> newHeader.connectUUID;
}
dataStream >> newHeader.nodeType
>> newHeader.publicSockAddr >> newHeader.localSockAddr
>> newHeader.interestList;

View file

@ -18,7 +18,8 @@
class NodeConnectionData {
public:
static NodeConnectionData fromDataStream(QDataStream& dataStream, const HifiSockAddr& senderSockAddr);
static NodeConnectionData fromDataStream(QDataStream& dataStream, const HifiSockAddr& senderSockAddr,
bool isConnectRequest = true);
QUuid connectUUID;
NodeType_t nodeType;