Stub out basics for displaying the domain login dialog

This commit is contained in:
David Rowe 2020-07-25 15:31:17 +12:00
parent 111afc8c69
commit 9bb913983d
7 changed files with 117 additions and 2 deletions

View file

@ -65,6 +65,7 @@
#include <Trace.h> #include <Trace.h>
#include <ResourceScriptingInterface.h> #include <ResourceScriptingInterface.h>
#include <AccountManager.h> #include <AccountManager.h>
#include <DomainAccountManager.h>
#include <AddressManager.h> #include <AddressManager.h>
#include <AnimDebugDraw.h> #include <AnimDebugDraw.h>
#include <BuildInfo.h> #include <BuildInfo.h>
@ -852,6 +853,7 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) {
#else #else
DependencyManager::set<AccountManager>(true, std::bind(&Application::getUserAgent, qApp)); DependencyManager::set<AccountManager>(true, std::bind(&Application::getUserAgent, qApp));
#endif #endif
DependencyManager::set<DomainAccountManager>();
DependencyManager::set<StatTracker>(); DependencyManager::set<StatTracker>();
DependencyManager::set<ScriptEngines>(ScriptEngine::CLIENT_SCRIPT, defaultScriptsOverrideOption); DependencyManager::set<ScriptEngines>(ScriptEngine::CLIENT_SCRIPT, defaultScriptsOverrideOption);
DependencyManager::set<Preferences>(); DependencyManager::set<Preferences>();
@ -1348,6 +1350,14 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
#endif #endif
connect(accountManager.data(), &AccountManager::usernameChanged, this, &Application::updateWindowTitle); connect(accountManager.data(), &AccountManager::usernameChanged, this, &Application::updateWindowTitle);
auto domainAccountManager = DependencyManager::get<DomainAccountManager>();
connect(domainAccountManager.data(), &DomainAccountManager::authRequired, dialogsManager.data(),
&DialogsManager::showDomainLoginDialog);
// ####### TODO
// use our MyAvatar position and quat for address manager path // use our MyAvatar position and quat for address manager path
addressManager->setPositionGetter([] { addressManager->setPositionGetter([] {
auto avatarManager = DependencyManager::get<AvatarManager>(); auto avatarManager = DependencyManager::get<AvatarManager>();
@ -2801,6 +2811,7 @@ void Application::cleanupBeforeQuit() {
if (!keepMeLoggedIn) { if (!keepMeLoggedIn) {
DependencyManager::get<AccountManager>()->removeAccountFromFile(); DependencyManager::get<AccountManager>()->removeAccountFromFile();
} }
// ####### TODO
_displayPlugin.reset(); _displayPlugin.reset();
PluginManager::getInstance()->shutdown(); PluginManager::getInstance()->shutdown();
@ -3150,6 +3161,7 @@ extern void setupPreferences();
static void addDisplayPluginToMenu(const DisplayPluginPointer& displayPlugin, int index, bool active = false); static void addDisplayPluginToMenu(const DisplayPluginPointer& displayPlugin, int index, bool active = false);
#endif #endif
// ####### TODO
void Application::showLoginScreen() { void Application::showLoginScreen() {
#if !defined(DISABLE_QML) #if !defined(DISABLE_QML)
auto accountManager = DependencyManager::get<AccountManager>(); auto accountManager = DependencyManager::get<AccountManager>();
@ -7072,6 +7084,7 @@ void Application::updateWindowTitle() const {
+ (BuildInfo::BUILD_TYPE == BuildInfo::BuildType::Stable ? QString("Version") : QString("Build")) + (BuildInfo::BUILD_TYPE == BuildInfo::BuildType::Stable ? QString("Version") : QString("Build"))
+ " " + applicationVersion(); + " " + applicationVersion();
// ####### TODO
QString loginStatus = accountManager->isLoggedIn() ? "" : " (NOT LOGGED IN)"; QString loginStatus = accountManager->isLoggedIn() ? "" : " (NOT LOGGED IN)";
QString connectionStatus = isInErrorState ? " (ERROR CONNECTING)" : QString connectionStatus = isInErrorState ? " (ERROR CONNECTING)" :
@ -9430,6 +9443,7 @@ void Application::forceDisplayName(const QString& displayName) {
getMyAvatar()->setDisplayName(displayName); getMyAvatar()->setDisplayName(displayName);
} }
void Application::forceLoginWithTokens(const QString& tokens) { void Application::forceLoginWithTokens(const QString& tokens) {
// ####### TODO
DependencyManager::get<AccountManager>()->setAccessTokens(tokens); DependencyManager::get<AccountManager>()->setAccessTokens(tokens);
Setting::Handle<bool>(KEEP_ME_LOGGED_IN_SETTING_NAME, true).set(true); Setting::Handle<bool>(KEEP_ME_LOGGED_IN_SETTING_NAME, true).set(true);
} }

View file

@ -121,10 +121,23 @@ void DialogsManager::hideLoginDialog() {
LoginDialog::hide(); LoginDialog::hide();
} }
void DialogsManager::showDomainLoginDialog() {
// #######: TODO
qDebug() << "#######: showDomainLoginDialog()";
}
// #######: TODO
void DialogsManager::showUpdateDialog() { void DialogsManager::showUpdateDialog() {
UpdateDialog::show(); UpdateDialog::show();
} }
void DialogsManager::octreeStatsDetails() { void DialogsManager::octreeStatsDetails() {
if (!_octreeStatsDialog) { if (!_octreeStatsDialog) {
_octreeStatsDialog = new OctreeStatsDialog(qApp->getWindow(), qApp->getOcteeSceneStats()); _octreeStatsDialog = new OctreeStatsDialog(qApp->getWindow(), qApp->getOcteeSceneStats());

View file

@ -49,6 +49,7 @@ public slots:
void toggleLoginDialog(); void toggleLoginDialog();
void showLoginDialog(); void showLoginDialog();
void hideLoginDialog(); void hideLoginDialog();
void showDomainLoginDialog();
void octreeStatsDetails(); void octreeStatsDetails();
void lodTools(); void lodTools();
void hmdTools(bool showTools); void hmdTools(bool showTools);

View file

@ -0,0 +1,35 @@
//
// DomainAccountManager.cpp
// libraries/networking/src
//
// Created by David Rowe on 23 Jul 2020.
// Copyright 2020 Vircadia contributors.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#include "DomainAccountManager.h"
DomainAccountManager::DomainAccountManager() {
}
bool DomainAccountManager::hasValidAccessToken() {
// #######: TODO
return false;
}
bool DomainAccountManager::checkAndSignalForAccessToken() {
bool hasToken = hasValidAccessToken();
if (!hasToken) {
// Emit a signal so somebody can call back to us and request an access token given a user name and password.
emit authRequired();
}
return hasToken;
}

View file

@ -0,0 +1,39 @@
//
// DomainAccountManager.h
// libraries/networking/src
//
// Created by David Rowe on 23 Jul 2020.
// Copyright 2020 Vircadia contributors.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#ifndef hifi_DomainAccountManager_h
#define hifi_DomainAccountManager_h
#include <QtCore/QObject>
#include <DependencyManager.h>
class DomainAccountManager : public QObject, public Dependency {
Q_OBJECT
public:
DomainAccountManager();
Q_INVOKABLE bool checkAndSignalForAccessToken();
public slots:
signals:
void authRequired();
private slots:
private:
bool hasValidAccessToken();
};
#endif // hifi_DomainAccountManager_h

View file

@ -24,6 +24,7 @@
#include "AddressManager.h" #include "AddressManager.h"
#include "Assignment.h" #include "Assignment.h"
#include "DomainAccountManager.h"
#include "HifiSockAddr.h" #include "HifiSockAddr.h"
#include "NodeList.h" #include "NodeList.h"
#include "udt/Packet.h" #include "udt/Packet.h"
@ -500,6 +501,7 @@ bool DomainHandler::reasonSuggestsMetaverseLogin(ConnectionRefusedReason reasonC
case ConnectionRefusedReason::Unknown: case ConnectionRefusedReason::Unknown:
case ConnectionRefusedReason::ProtocolMismatch: case ConnectionRefusedReason::ProtocolMismatch:
case ConnectionRefusedReason::TooManyUsers: case ConnectionRefusedReason::TooManyUsers:
case ConnectionRefusedReason::NotAuthorizedDomain:
return false; return false;
} }
return false; return false;
@ -515,6 +517,7 @@ bool DomainHandler::reasonSuggestsDomainLogin(ConnectionRefusedReason reasonCode
case ConnectionRefusedReason::Unknown: case ConnectionRefusedReason::Unknown:
case ConnectionRefusedReason::ProtocolMismatch: case ConnectionRefusedReason::ProtocolMismatch:
case ConnectionRefusedReason::TooManyUsers: case ConnectionRefusedReason::TooManyUsers:
case ConnectionRefusedReason::NotAuthorizedMetaverse:
return false; return false;
} }
return false; return false;
@ -557,12 +560,13 @@ void DomainHandler::processDomainServerConnectionDeniedPacket(QSharedPointer<Rec
#endif #endif
} }
auto accountManager = DependencyManager::get<AccountManager>();
// Some connection refusal reasons imply that a login is required. If so, suggest a new login. // Some connection refusal reasons imply that a login is required. If so, suggest a new login.
if (reasonSuggestsMetaverseLogin(reasonCode)) { if (reasonSuggestsMetaverseLogin(reasonCode)) {
qCWarning(networking) << "Make sure you are logged in to the metaverse."; qCWarning(networking) << "Make sure you are logged in to the metaverse.";
auto accountManager = DependencyManager::get<AccountManager>();
if (!_hasCheckedForAccessToken) { if (!_hasCheckedForAccessToken) {
accountManager->checkAndSignalForAccessToken(); accountManager->checkAndSignalForAccessToken();
_hasCheckedForAccessToken = true; _hasCheckedForAccessToken = true;
@ -578,7 +582,15 @@ void DomainHandler::processDomainServerConnectionDeniedPacket(QSharedPointer<Rec
} else if (reasonSuggestsDomainLogin(reasonCode)) { } else if (reasonSuggestsDomainLogin(reasonCode)) {
qCWarning(networking) << "Make sure you are logged in to the domain."; qCWarning(networking) << "Make sure you are logged in to the domain.";
auto accountManager = DependencyManager::get<DomainAccountManager>();
if (!_hasCheckedForDomainAccessToken) {
accountManager->checkAndSignalForAccessToken();
_hasCheckedForDomainAccessToken = true;
}
// ####### TODO: regenerate key-pair after several failed connection attempts, similar to metaverse login code?
} }
} }

View file

@ -291,6 +291,7 @@ private:
QSet<QString> _domainConnectionRefusals; QSet<QString> _domainConnectionRefusals;
bool _hasCheckedForAccessToken { false }; bool _hasCheckedForAccessToken { false };
bool _hasCheckedForDomainAccessToken { false };
int _connectionDenialsSinceKeypairRegen { 0 }; int _connectionDenialsSinceKeypairRegen { 0 };
int _checkInPacketsSinceLastReply { 0 }; int _checkInPacketsSinceLastReply { 0 };