From 9fe2f6126dc7b9396d188b57ccb097f0035f57b7 Mon Sep 17 00:00:00 2001 From: Silarn Date: Mon, 20 Aug 2018 18:34:31 -0500 Subject: Initial Nexus API changes: - Switch to SSO with WebSocket - Update endpoints (all but version checking) --- src/settingsdialog.cpp | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'src/settingsdialog.cpp') diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp index 1bbc256f..4843dea5 100644 --- a/src/settingsdialog.cpp +++ b/src/settingsdialog.cpp @@ -29,12 +29,17 @@ along with Mod Organizer. If not, see . #include "nexusinterface.h" #include "plugincontainer.h" +#include +#include + #include #include #include #include #include #include +#include +#include #define WIN32_LEAN_AND_MEAN #include @@ -46,6 +51,7 @@ SettingsDialog::SettingsDialog(PluginContainer *pluginContainer, QWidget *parent : TutorableDialog("SettingsDialog", parent) , ui(new Ui::SettingsDialog) , m_PluginContainer(pluginContainer) + , m_nexusLogin(new QWebSocket) { ui->setupUi(this); ui->pluginSettingsList->setStyleSheet("QTreeWidget::item {padding-right: 10px;}"); @@ -53,6 +59,9 @@ SettingsDialog::SettingsDialog(PluginContainer *pluginContainer, QWidget *parent QShortcut *delShortcut = new QShortcut(QKeySequence(Qt::Key_Delete), ui->pluginBlacklist); connect(delShortcut, SIGNAL(activated()), this, SLOT(deleteBlacklistItem())); + 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())); } SettingsDialog::~SettingsDialog() @@ -326,6 +335,39 @@ void SettingsDialog::on_resetDialogsButton_clicked() } } +void SettingsDialog::on_nexusConnect_clicked() +{ + ui->nexusConnect->setText("Connecting the API..."); + ui->nexusConnect->setDisabled(true); + QUrl url = QUrl("wss://sso.nexusmods.com:8443"); + m_nexusLogin->open(url); +} + +void SettingsDialog::dispatchLogin() +{ + QJsonObject login; + boost::uuids::random_generator generator; + boost::uuids::uuid sessionId = generator(); + login.insert(QString("id"), QJsonValue(QString(boost::uuids::to_string(sessionId).c_str()))); + login.insert(QString("appid"), QJsonValue(QString("MO2"))); + QJsonDocument loginDoc(login); + 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()))); +} + +void SettingsDialog::receiveApiKey(const QString &apiKey) +{ + emit processApiKey(apiKey); + m_nexusLogin->close(); + ui->nexusConnect->setText("Nexus API Key Stored"); +} + +void SettingsDialog::completeApiConnection() +{ + emit closeApiConnection(ui->nexusConnect); +} + void SettingsDialog::storeSettings(QListWidgetItem *pluginItem) { if (pluginItem != nullptr) { -- cgit v1.3.1