mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 16:38:27 +02:00
Pass tokens as params for automatic login
This commit is contained in:
parent
38a379cb38
commit
206e353264
3 changed files with 85 additions and 1 deletions
|
@ -83,6 +83,7 @@ int main(int argc, const char* argv[]) {
|
||||||
QCommandLineOption allowMultipleInstancesOption("allowMultipleInstances", "Allow multiple instances to run");
|
QCommandLineOption allowMultipleInstancesOption("allowMultipleInstances", "Allow multiple instances to run");
|
||||||
QCommandLineOption overrideAppLocalDataPathOption("cache", "set test cache <dir>", "dir");
|
QCommandLineOption overrideAppLocalDataPathOption("cache", "set test cache <dir>", "dir");
|
||||||
QCommandLineOption overrideScriptsPathOption(SCRIPTS_SWITCH, "set scripts <path>", "path");
|
QCommandLineOption overrideScriptsPathOption(SCRIPTS_SWITCH, "set scripts <path>", "path");
|
||||||
|
QCommandLineOption responseTokensOption("tokens", "set response tokens <json>", "json");
|
||||||
|
|
||||||
parser.addOption(urlOption);
|
parser.addOption(urlOption);
|
||||||
parser.addOption(noLauncherOption);
|
parser.addOption(noLauncherOption);
|
||||||
|
@ -93,6 +94,7 @@ int main(int argc, const char* argv[]) {
|
||||||
parser.addOption(overrideAppLocalDataPathOption);
|
parser.addOption(overrideAppLocalDataPathOption);
|
||||||
parser.addOption(overrideScriptsPathOption);
|
parser.addOption(overrideScriptsPathOption);
|
||||||
parser.addOption(allowMultipleInstancesOption);
|
parser.addOption(allowMultipleInstancesOption);
|
||||||
|
parser.addOption(responseTokensOption);
|
||||||
|
|
||||||
if (!parser.parse(arguments)) {
|
if (!parser.parse(arguments)) {
|
||||||
std::cout << parser.errorText().toStdString() << std::endl; // Avoid Qt log spam
|
std::cout << parser.errorText().toStdString() << std::endl; // Avoid Qt log spam
|
||||||
|
@ -121,7 +123,7 @@ int main(int argc, const char* argv[]) {
|
||||||
static const QString APPLICATION_CONFIG_FILENAME = "config.json";
|
static const QString APPLICATION_CONFIG_FILENAME = "config.json";
|
||||||
QDir applicationDir(applicationPath);
|
QDir applicationDir(applicationPath);
|
||||||
QFile configFile(applicationDir.filePath(APPLICATION_CONFIG_FILENAME));
|
QFile configFile(applicationDir.filePath(APPLICATION_CONFIG_FILENAME));
|
||||||
|
bool isConfigFileValid = false;
|
||||||
if (configFile.exists()) {
|
if (configFile.exists()) {
|
||||||
if (!configFile.open(QIODevice::ReadOnly)) {
|
if (!configFile.open(QIODevice::ReadOnly)) {
|
||||||
qWarning() << "Found application config, but could not open it";
|
qWarning() << "Found application config, but could not open it";
|
||||||
|
@ -136,6 +138,7 @@ int main(int argc, const char* argv[]) {
|
||||||
static const QString LAUNCHER_PATH_KEY = "launcherPath";
|
static const QString LAUNCHER_PATH_KEY = "launcherPath";
|
||||||
QString launcherPath = doc.object()[LAUNCHER_PATH_KEY].toString();
|
QString launcherPath = doc.object()[LAUNCHER_PATH_KEY].toString();
|
||||||
if (!launcherPath.isEmpty()) {
|
if (!launcherPath.isEmpty()) {
|
||||||
|
isConfigFileValid = true;
|
||||||
if (!parser.isSet(noLauncherOption)) {
|
if (!parser.isSet(noLauncherOption)) {
|
||||||
qDebug() << "Found a launcherPath in application config. Starting launcher.";
|
qDebug() << "Found a launcherPath in application config. Starting launcher.";
|
||||||
QProcess launcher;
|
QProcess launcher;
|
||||||
|
@ -146,6 +149,7 @@ int main(int argc, const char* argv[]) {
|
||||||
qDebug() << "Found a launcherPath in application config, but the launcher"
|
qDebug() << "Found a launcherPath in application config, but the launcher"
|
||||||
" has been suppressed. Continuing normal execution.";
|
" has been suppressed. Continuing normal execution.";
|
||||||
}
|
}
|
||||||
|
configFile.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -398,6 +402,18 @@ int main(int argc, const char* argv[]) {
|
||||||
|
|
||||||
printSystemInformation();
|
printSystemInformation();
|
||||||
|
|
||||||
|
if (isConfigFileValid || parser.isSet(responseTokensOption)) {
|
||||||
|
auto accountManager = DependencyManager::get<AccountManager>();
|
||||||
|
if (!accountManager.isNull()) {
|
||||||
|
if (parser.isSet(responseTokensOption)) {
|
||||||
|
QString tokens = QString(parser.value(responseTokensOption));
|
||||||
|
accountManager->setAccessTokens(tokens);
|
||||||
|
} else if (isConfigFileValid) {
|
||||||
|
accountManager->setConfigFileURL(configFile.fileName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QTranslator translator;
|
QTranslator translator;
|
||||||
translator.load("i18n/interface_en");
|
translator.load("i18n/interface_en");
|
||||||
app.installTranslator(&translator);
|
app.installTranslator(&translator);
|
||||||
|
|
|
@ -97,6 +97,7 @@ void AccountManager::logout() {
|
||||||
|
|
||||||
// remove this account from the account settings file
|
// remove this account from the account settings file
|
||||||
removeAccountFromFile();
|
removeAccountFromFile();
|
||||||
|
saveLoginStatus(false);
|
||||||
|
|
||||||
emit logoutComplete();
|
emit logoutComplete();
|
||||||
// the username has changed to blank
|
// the username has changed to blank
|
||||||
|
@ -650,6 +651,39 @@ void AccountManager::refreshAccessToken() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AccountManager::setAccessTokens(const QString& response) {
|
||||||
|
QJsonDocument jsonResponse = QJsonDocument::fromJson(response.toUtf8());
|
||||||
|
const QJsonObject& rootObject = jsonResponse.object();
|
||||||
|
|
||||||
|
if (!rootObject.contains("error")) {
|
||||||
|
// construct an OAuthAccessToken from the json object
|
||||||
|
|
||||||
|
if (!rootObject.contains("access_token") || !rootObject.contains("expires_in")
|
||||||
|
|| !rootObject.contains("token_type")) {
|
||||||
|
// TODO: error handling - malformed token response
|
||||||
|
qCDebug(networking) << "Received a response for password grant that is missing one or more expected values.";
|
||||||
|
} else {
|
||||||
|
// clear the path from the response URL so we have the right root URL for this access token
|
||||||
|
QUrl rootURL = rootObject.contains("url") ? rootObject["url"].toString() : _authURL;
|
||||||
|
rootURL.setPath("");
|
||||||
|
|
||||||
|
qCDebug(networking) << "Storing an account with access-token for" << qPrintable(rootURL.toString());
|
||||||
|
|
||||||
|
_accountInfo = DataServerAccountInfo();
|
||||||
|
_accountInfo.setAccessTokenFromJSON(rootObject);
|
||||||
|
emit loginComplete(rootURL);
|
||||||
|
|
||||||
|
persistAccountToFile();
|
||||||
|
|
||||||
|
requestProfile();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// TODO: error handling
|
||||||
|
qCDebug(networking) << "Error in response for password grant -" << rootObject["error_description"].toString();
|
||||||
|
emit loginFailed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void AccountManager::requestAccessTokenFinished() {
|
void AccountManager::requestAccessTokenFinished() {
|
||||||
QNetworkReply* requestReply = reinterpret_cast<QNetworkReply*>(sender());
|
QNetworkReply* requestReply = reinterpret_cast<QNetworkReply*>(sender());
|
||||||
|
|
||||||
|
@ -895,3 +929,32 @@ void AccountManager::handleKeypairGenerationError() {
|
||||||
void AccountManager::setLimitedCommerce(bool isLimited) {
|
void AccountManager::setLimitedCommerce(bool isLimited) {
|
||||||
_limitedCommerce = isLimited;
|
_limitedCommerce = isLimited;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AccountManager::saveLoginStatus(bool isLoggedIn) {
|
||||||
|
if (_configFileURL.isValid()) {
|
||||||
|
QFile configFile(_configFileURL.toString());
|
||||||
|
configFile.open(QIODevice::ReadOnly | QIODevice::Text);
|
||||||
|
QJsonParseError error;
|
||||||
|
QJsonDocument jsonDocument = QJsonDocument::fromJson(configFile.readAll(), &error);
|
||||||
|
configFile.close();
|
||||||
|
QString launcherPath;
|
||||||
|
if (error.error == QJsonParseError::NoError) {
|
||||||
|
QJsonObject rootObject = jsonDocument.object();
|
||||||
|
if (rootObject.contains("loggedIn")) {
|
||||||
|
rootObject["loggedIn"] = isLoggedIn;
|
||||||
|
}
|
||||||
|
if (rootObject.contains("laucherPath")) {
|
||||||
|
launcherPath = rootObject["launcherPath"].isString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
configFile.open(QFile::WriteOnly | QFile::Text | QFile::Truncate);
|
||||||
|
configFile.write(jsonDocument.toJson());
|
||||||
|
configFile.close();
|
||||||
|
if (!isLoggedIn && !launcherPath.isEmpty()) {
|
||||||
|
QProcess launcher;
|
||||||
|
launcher.setProgram(launcherPath);
|
||||||
|
launcher.startDetached();
|
||||||
|
qApp->quit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -102,6 +102,10 @@ public:
|
||||||
bool getLimitedCommerce() { return _limitedCommerce; }
|
bool getLimitedCommerce() { return _limitedCommerce; }
|
||||||
void setLimitedCommerce(bool isLimited);
|
void setLimitedCommerce(bool isLimited);
|
||||||
|
|
||||||
|
void setAccessTokens(const QString& response);
|
||||||
|
void setConfigFileURL(const QUrl& fileURL) { _configFileURL = fileURL; }
|
||||||
|
void saveLoginStatus(bool isLoggedIn);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void requestAccessToken(const QString& login, const QString& password);
|
void requestAccessToken(const QString& login, const QString& password);
|
||||||
void requestAccessTokenWithSteam(QByteArray authSessionTicket);
|
void requestAccessTokenWithSteam(QByteArray authSessionTicket);
|
||||||
|
@ -162,6 +166,7 @@ private:
|
||||||
QUuid _sessionID { QUuid::createUuid() };
|
QUuid _sessionID { QUuid::createUuid() };
|
||||||
|
|
||||||
bool _limitedCommerce { false };
|
bool _limitedCommerce { false };
|
||||||
|
QUrl _configFileURL;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_AccountManager_h
|
#endif // hifi_AccountManager_h
|
||||||
|
|
Loading…
Reference in a new issue