mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 22:51:20 +02:00
Stub out basics for displaying the domain login dialog
This commit is contained in:
parent
111afc8c69
commit
9bb913983d
7 changed files with 117 additions and 2 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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);
|
||||||
|
|
35
libraries/networking/src/DomainAccountManager.cpp
Normal file
35
libraries/networking/src/DomainAccountManager.cpp
Normal 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;
|
||||||
|
}
|
39
libraries/networking/src/DomainAccountManager.h
Normal file
39
libraries/networking/src/DomainAccountManager.h
Normal 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
|
|
@ -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,6 +582,14 @@ 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?
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 };
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue