require that client ID for authentication server be known to AccountManager

This commit is contained in:
Stephen Birarda 2014-02-18 14:34:32 -08:00
parent b57a5cea6a
commit ce3cc7e5c9
5 changed files with 30 additions and 23 deletions

View file

@ -33,8 +33,6 @@ const char* METAVOXEL_SERVER_CONFIG = "metavoxelServerConfig";
const quint16 DOMAIN_SERVER_HTTP_PORT = 8080;
const QUrl DEFAULT_NODE_AUTH_URL = QUrl("https://data.highfidelity.io");
DomainServer::DomainServer(int argc, char* argv[]) :
QCoreApplication(argc, argv),
_HTTPManager(DOMAIN_SERVER_HTTP_PORT, QString("%1/resources/web/").arg(QCoreApplication::applicationDirPath()), this),

View file

@ -13,6 +13,7 @@
#include <QtCore/QUrlQuery>
#include <QtNetwork/QNetworkRequest>
#include "NodeList.h"
#include "PacketHeaders.h"
#include "AccountManager.h"
@ -22,12 +23,16 @@ AccountManager& AccountManager::getInstance() {
return sharedInstance;
}
const QString DEFAULT_NODE_AUTH_OAUTH_CLIENT_ID = "12b7b18e7b8c118707b84ff0735e57a4473b5b0577c2af44734f02e08d02829c";
AccountManager::AccountManager() :
_username(),
_accessTokens(),
_clientIDs(),
_networkAccessManager(NULL)
{
_clientIDs.insert(DEFAULT_NODE_AUTH_URL, DEFAULT_NODE_AUTH_OAUTH_CLIENT_ID);
}
bool AccountManager::hasValidAccessTokenForRootURL(const QUrl &rootURL) {
@ -43,27 +48,29 @@ bool AccountManager::hasValidAccessTokenForRootURL(const QUrl &rootURL) {
}
}
const QString OAUTH_CLIENT_ID_FOR_DEFAULT_ROOT_URL = "12b7b18e7b8c118707b84ff0735e57a4473b5b0577c2af44734f02e08d02829c";
void AccountManager::requestAccessToken(const QUrl& rootURL, const QString& username, const QString& password) {
if (_networkAccessManager) {
QNetworkRequest request;
QUrl grantURL = rootURL;
grantURL.setPath("/oauth/token");
QByteArray postData;
postData.append("client_id=12b7b18e7b8c118707b84ff0735e57a4473b5b0577c2af44734f02e08d02829c &");
postData.append("grant_type=password&");
postData.append("username=" + username + "&");
postData.append("password=" + password);
request.setUrl(grantURL);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
QNetworkReply* requestReply = _networkAccessManager->post(request, postData);
connect(requestReply, &QNetworkReply::finished, this, &AccountManager::requestFinished);
connect(requestReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(requestError(QNetworkReply::NetworkError)));
if (_clientIDs.contains(rootURL)) {
QNetworkRequest request;
QUrl grantURL = rootURL;
grantURL.setPath("/oauth/token");
QByteArray postData;
postData.append("client_id=" + _clientIDs.value(rootURL) + "&");
postData.append("grant_type=password&");
postData.append("username=" + username + "&");
postData.append("password=" + password);
request.setUrl(grantURL);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
QNetworkReply* requestReply = _networkAccessManager->post(request, postData);
connect(requestReply, &QNetworkReply::finished, this, &AccountManager::requestFinished);
connect(requestReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(requestError(QNetworkReply::NetworkError)));
} else {
qDebug() << "Client ID for OAuth authorization at" << rootURL.toString() << "is unknown. Cannot authenticate.";
}
}
}

View file

@ -42,6 +42,7 @@ private:
QString _username;
QMap<QUrl, OAuthAccessToken> _accessTokens;
QMap<QUrl, QString> _clientIDs;
QNetworkAccessManager* _networkAccessManager;
};

View file

@ -29,6 +29,8 @@ const char SOLO_NODE_TYPES[2] = {
NodeType::AudioMixer
};
const QUrl DEFAULT_NODE_AUTH_URL = QUrl("https://data.highfidelity.io");
NodeList* NodeList::_sharedInstance = NULL;
NodeList* NodeList::createInstance(char ownerType, unsigned short int socketListenPort) {

View file

@ -37,8 +37,7 @@ const quint64 PING_INACTIVE_NODE_INTERVAL_USECS = 1 * 1000 * 1000;
extern const char SOLO_NODE_TYPES[2];
extern const QString DEFAULT_DOMAIN_HOSTNAME;
extern const unsigned short DEFAULT_DOMAIN_SERVER_PORT;
extern const QUrl DEFAULT_NODE_AUTH_URL;
const char DEFAULT_ASSIGNMENT_SERVER_HOSTNAME[] = "localhost";