From 7de78b6697b60ac20add32b5b9140b04da973be8 Mon Sep 17 00:00:00 2001 From: Silarn Date: Sun, 27 Jan 2019 03:43:18 -0600 Subject: Several Nexus API-related changes * Added 30-second ping so Nexus doesn't close our connection * Set an overall 5 minute timeout before we give up listening for auth * Fixed some old signal and slot connections * Added a button to revoke the current API authorization * Updated bulk endorsement function with new API changes --- src/settingsdialog.cpp | 48 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 13 deletions(-) (limited to 'src/settingsdialog.cpp') diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp index 4843dea5..f63b1a10 100644 --- a/src/settingsdialog.cpp +++ b/src/settingsdialog.cpp @@ -62,6 +62,7 @@ SettingsDialog::SettingsDialog(PluginContainer *pluginContainer, QWidget *parent connect(m_nexusLogin, SIGNAL(connected()), this, SLOT(dispatchLogin())); connect(m_nexusLogin, SIGNAL(textMessageReceived(const QString &)), this, SLOT(receiveApiKey(const QString &))); connect(m_nexusLogin, SIGNAL(disconnected()), this, SLOT(completeApiConnection())); + m_loginTimer.callOnTimeout(this, &SettingsDialog::loginPing); } SettingsDialog::~SettingsDialog() @@ -124,18 +125,18 @@ bool SettingsDialog::getResetGeometries() return ui->resetGeometryBtn->isChecked(); } -void SettingsDialog::on_loginCheckBox_toggled(bool checked) -{ - QLineEdit *usernameEdit = findChild("usernameEdit"); - QLineEdit *passwordEdit = findChild("passwordEdit"); - if (checked) { - passwordEdit->setEnabled(true); - usernameEdit->setEnabled(true); - } else { - passwordEdit->setEnabled(false); - usernameEdit->setEnabled(false); - } -} +//void SettingsDialog::on_loginCheckBox_toggled(bool checked) +//{ +// QLineEdit *usernameEdit = findChild("usernameEdit"); +// QLineEdit *passwordEdit = findChild("passwordEdit"); +// if (checked) { +// passwordEdit->setEnabled(true); +// usernameEdit->setEnabled(true); +// } else { +// passwordEdit->setEnabled(false); +// usernameEdit->setEnabled(false); +// } +//} void SettingsDialog::on_categoriesBtn_clicked() { @@ -337,7 +338,7 @@ void SettingsDialog::on_resetDialogsButton_clicked() void SettingsDialog::on_nexusConnect_clicked() { - ui->nexusConnect->setText("Connecting the API..."); + ui->nexusConnect->setText("Connecting the API. Please login within the browser and accept the request. This will time out after 5 minutes."); ui->nexusConnect->setDisabled(true); QUrl url = QUrl("wss://sso.nexusmods.com:8443"); m_nexusLogin->open(url); @@ -354,6 +355,20 @@ void SettingsDialog::dispatchLogin() QString finalMessage(loginDoc.toJson()); m_nexusLogin->sendTextMessage(finalMessage); QDesktopServices::openUrl(QUrl(QString("https://www.nexusmods.com/sso?id=") + QString(boost::uuids::to_string(sessionId).c_str()))); + m_loginTimer.start(30000); +} + +void SettingsDialog::loginPing() +{ + if (m_nexusLogin->isValid()) { + m_nexusLogin->ping(); + m_totalPings++; + } + if (m_totalPings >= 10) { + m_loginTimer.stop(); + m_totalPings = 0; + m_nexusLogin->close(QWebSocketProtocol::CloseCodeGoingAway, "Timeout: No response received after five minutes. Cancelling request."); + } } void SettingsDialog::receiveApiKey(const QString &apiKey) @@ -361,6 +376,8 @@ void SettingsDialog::receiveApiKey(const QString &apiKey) emit processApiKey(apiKey); m_nexusLogin->close(); ui->nexusConnect->setText("Nexus API Key Stored"); + m_loginTimer.stop(); + m_totalPings = 0; } void SettingsDialog::completeApiConnection() @@ -435,6 +452,11 @@ void SettingsDialog::on_clearCacheButton_clicked() NexusInterface::instance(m_PluginContainer)->clearCache(); } +void SettingsDialog::on_revokeNexusAuthButton_clicked() +{ + emit revokeApiKey(ui->nexusConnect); +} + void SettingsDialog::normalizePath(QLineEdit *lineEdit) { QString text = lineEdit->text(); -- cgit v1.3.1