use constants rather than bare strings for standard psuedo-account-names

This commit is contained in:
Seth Alves 2016-06-04 09:07:34 -07:00
parent 4cad94216c
commit 09b0e3eaaf
4 changed files with 31 additions and 21 deletions

View file

@ -189,7 +189,7 @@ SharedNodePointer DomainGatekeeper::processAgentConnectRequest(const NodeConnect
bool isLocalUser = bool isLocalUser =
(senderHostAddress == limitedNodeList->getLocalSockAddr().getAddress() || senderHostAddress == QHostAddress::LocalHost); (senderHostAddress == limitedNodeList->getLocalSockAddr().getAddress() || senderHostAddress == QHostAddress::LocalHost);
if (isLocalUser) { if (isLocalUser) {
userPerms |= _server->_settingsManager.getPermissionsForName("localhost"); userPerms |= _server->_settingsManager.getPermissionsForName(AgentPermissions::standardNameLocalhost);
} }
if (!username.isEmpty() && usernameSignature.isEmpty()) { if (!username.isEmpty() && usernameSignature.isEmpty()) {
@ -204,7 +204,7 @@ SharedNodePointer DomainGatekeeper::processAgentConnectRequest(const NodeConnect
if (username.isEmpty()) { if (username.isEmpty()) {
// they didn't tell us who they are // they didn't tell us who they are
userPerms |= _server->_settingsManager.getPermissionsForName("anonymous"); userPerms |= _server->_settingsManager.getPermissionsForName(AgentPermissions::standardNameAnonymous);
} else if (verifyUserSignature(username, usernameSignature, nodeConnection.senderSockAddr)) { } else if (verifyUserSignature(username, usernameSignature, nodeConnection.senderSockAddr)) {
// they are sent us a username and the signature verifies it // they are sent us a username and the signature verifies it
if (_server->_settingsManager.havePermissionsForName(username)) { if (_server->_settingsManager.havePermissionsForName(username)) {
@ -212,7 +212,7 @@ SharedNodePointer DomainGatekeeper::processAgentConnectRequest(const NodeConnect
userPerms |= _server->_settingsManager.getPermissionsForName(username); userPerms |= _server->_settingsManager.getPermissionsForName(username);
} else { } else {
// they are logged into metaverse, but we don't have specific permissions for them. // they are logged into metaverse, but we don't have specific permissions for them.
userPerms |= _server->_settingsManager.getPermissionsForName("logged-in"); userPerms |= _server->_settingsManager.getPermissionsForName(AgentPermissions::standardNameLoggedIn);
} }
} else { } else {
// they sent us a username, but it didn't check out // they sent us a username, but it didn't check out

View file

@ -206,15 +206,18 @@ void DomainServerSettingsManager::setupConfigMap(const QStringList& argumentList
QStringList allowedEditors = valueOrDefaultValueForKeyPath(ALLOWED_EDITORS_SETTINGS_KEYPATH).toStringList(); QStringList allowedEditors = valueOrDefaultValueForKeyPath(ALLOWED_EDITORS_SETTINGS_KEYPATH).toStringList();
bool onlyEditorsAreRezzers = valueOrDefaultValueForKeyPath(EDITORS_ARE_REZZERS_KEYPATH).toBool(); bool onlyEditorsAreRezzers = valueOrDefaultValueForKeyPath(EDITORS_ARE_REZZERS_KEYPATH).toBool();
_agentPermissions["localhost"].reset(new AgentPermissions("localhost")); _agentPermissions[AgentPermissions::standardNameLocalhost].reset(
_agentPermissions["localhost"]->setAll(true); new AgentPermissions(AgentPermissions::standardNameLocalhost));
_agentPermissions["anonymous"].reset(new AgentPermissions("anonymous")); _agentPermissions[AgentPermissions::standardNameLocalhost]->setAll(true);
_agentPermissions["logged-in"].reset(new AgentPermissions("logged-in")); _agentPermissions[AgentPermissions::standardNameAnonymous].reset(
new AgentPermissions(AgentPermissions::standardNameAnonymous));
_agentPermissions[AgentPermissions::standardNameLoggedIn].reset(
new AgentPermissions(AgentPermissions::standardNameLoggedIn));
if (isRestrictedAccess) { if (isRestrictedAccess) {
// only users in allow-users list can connect // only users in allow-users list can connect
_agentPermissions["anonymous"]->canConnectToDomain = false; _agentPermissions[AgentPermissions::standardNameAnonymous]->canConnectToDomain = false;
_agentPermissions["logged-in"]->canConnectToDomain = false; _agentPermissions[AgentPermissions::standardNameLoggedIn]->canConnectToDomain = false;
} // else anonymous and logged-in retain default of canConnectToDomain = true } // else anonymous and logged-in retain default of canConnectToDomain = true
foreach (QString allowedUser, allowedUsers) { foreach (QString allowedUser, allowedUsers) {
@ -291,9 +294,9 @@ void DomainServerSettingsManager::unpackPermissions(const QStringList& argumentL
foreach (QVariant permsHash, permissionsList) { foreach (QVariant permsHash, permissionsList) {
AgentPermissionsPointer perms { new AgentPermissions(permsHash.toMap()) }; AgentPermissionsPointer perms { new AgentPermissions(permsHash.toMap()) };
QString id = perms->getID(); QString id = perms->getID();
foundLocalhost |= (id == "localhost"); foundLocalhost |= (id == AgentPermissions::standardNameLocalhost);
foundAnonymous |= (id == "anonymous"); foundAnonymous |= (id == AgentPermissions::standardNameAnonymous);
foundLoggedIn |= (id == "logged-in"); foundLoggedIn |= (id == AgentPermissions::standardNameLoggedIn);
if (_agentPermissions.contains(id)) { if (_agentPermissions.contains(id)) {
qDebug() << "duplicate name in permissions table: " << id; qDebug() << "duplicate name in permissions table: " << id;
_agentPermissions[id] |= perms; _agentPermissions[id] |= perms;
@ -304,20 +307,17 @@ void DomainServerSettingsManager::unpackPermissions(const QStringList& argumentL
// if any of the standard names are missing, add them // if any of the standard names are missing, add them
if (!foundLocalhost) { if (!foundLocalhost) {
AgentPermissionsPointer perms { new AgentPermissions("localhost") }; AgentPermissionsPointer perms { new AgentPermissions(AgentPermissions::standardNameLocalhost) };
perms->setAll(true); perms->setAll(true);
_agentPermissions["localhost"] = perms; _agentPermissions[perms->getID()] = perms;
// *permissionsList += perms->toVariant();
} }
if (!foundAnonymous) { if (!foundAnonymous) {
AgentPermissionsPointer perms { new AgentPermissions("anonymous") }; AgentPermissionsPointer perms { new AgentPermissions(AgentPermissions::standardNameAnonymous) };
_agentPermissions["anonymous"] = perms; _agentPermissions[perms->getID()] = perms;
// *permissionsList += perms->toVariant();
} }
if (!foundLoggedIn) { if (!foundLoggedIn) {
AgentPermissionsPointer perms { new AgentPermissions("logged-in") }; AgentPermissionsPointer perms { new AgentPermissions(AgentPermissions::standardNameLoggedIn) };
_agentPermissions["logged-in"] = perms; _agentPermissions[perms->getID()] = perms;
// *permissionsList += perms->toVariant();
} }
if (!foundLocalhost || !foundAnonymous || !foundLoggedIn) { if (!foundLocalhost || !foundAnonymous || !foundLoggedIn) {
packPermissions(argumentList); packPermissions(argumentList);

View file

@ -13,6 +13,11 @@
#include <QtCore/QDebug> #include <QtCore/QDebug>
#include "AgentPermissions.h" #include "AgentPermissions.h"
QString AgentPermissions::standardNameLocalhost = QString("localhost");
QString AgentPermissions::standardNameLoggedIn = QString("logged-in");
QString AgentPermissions::standardNameAnonymous = QString("anonymous");
AgentPermissions& AgentPermissions::operator|=(const AgentPermissions& rhs) { AgentPermissions& AgentPermissions::operator|=(const AgentPermissions& rhs) {
this->canConnectToDomain |= rhs.canConnectToDomain; this->canConnectToDomain |= rhs.canConnectToDomain;
this->canAdjustLocks |= rhs.canAdjustLocks; this->canAdjustLocks |= rhs.canAdjustLocks;

View file

@ -37,6 +37,11 @@ public:
QString getID() const { return _id; } QString getID() const { return _id; }
// these 3 names have special meaning.
static QString standardNameLocalhost;
static QString standardNameLoggedIn;
static QString standardNameAnonymous;
// the initializations here should match the defaults in describe-settings.json // the initializations here should match the defaults in describe-settings.json
bool canConnectToDomain { true }; bool canConnectToDomain { true };
bool canAdjustLocks { false }; bool canAdjustLocks { false };