From e6ed67b1a263c4cce903733c8443fca6db13f785 Mon Sep 17 00:00:00 2001 From: Carl Schwan Date: Thu, 19 Nov 2020 15:52:04 +0000 Subject: [PATCH] Support wellknow for autentification Now kde.org is an alias to kde.modular.im --- src/controller.cpp | 56 +++++++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 21 deletions(-) diff --git a/src/controller.cpp b/src/controller.cpp index 98a469293..775b308b6 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -37,6 +37,7 @@ #include "csapi/joining.h" #include "csapi/logout.h" #include "csapi/profile.h" +#include "csapi/wellknown.h" #include "csapi/registration.h" #include "events/eventcontent.h" #include "events/roommessageevent.h" @@ -92,30 +93,43 @@ void Controller::loginWithCredentials(QString serverAddr, QString user, QString QUrl serverUrl(serverAddr); auto conn = new Connection(this); + if (serverUrl.isValid()) { conn->setHomeserver(serverUrl); + auto *job = conn->callApi(); + connect(job, &BaseJob::finished, this, [=]() { + if (job->status() == BaseJob::Success) { + QUrl url(job->data().homeserver.baseUrl); + auto finalConn = new Connection(this); + finalConn->setHomeserver(url); + finalConn->connectToServer(user, pass, deviceName, ""); + connect(finalConn, &Connection::connected, this, [=] { + AccountSettings account(finalConn->userId()); + account.setKeepLoggedIn(true); + account.clearAccessToken(); // Drop the legacy - just in case + account.setHomeserver(finalConn->homeserver()); + account.setDeviceId(finalConn->deviceId()); + account.setDeviceName(deviceName); + if (!saveAccessTokenToKeyChain(account, finalConn->accessToken())) + qWarning() << "Couldn't save access token"; + account.sync(); + addConnection(finalConn); + setActiveConnection(finalConn); + }); + connect(finalConn, &Connection::networkError, [=](QString error, QString, int, int) { + Q_EMIT errorOccured(i18n("Network Error"), error); + }); + connect(finalConn, &Connection::loginError, [=](QString error, QString) { + Q_EMIT errorOccured(i18n("Login Failed"), error); + }); + } else { + Q_EMIT errorOccured(i18n("Error connecting to server"), ""); + } + }); + connect(conn, &Connection::networkError, this, [=](QString error, QString, int, int) { + Q_EMIT errorOccured(i18n("Network Error"), error); + }); } - conn->connectToServer(user, pass, deviceName, ""); - - connect(conn, &Connection::connected, this, [=] { - AccountSettings account(conn->userId()); - account.setKeepLoggedIn(true); - account.clearAccessToken(); // Drop the legacy - just in case - account.setHomeserver(conn->homeserver()); - account.setDeviceId(conn->deviceId()); - account.setDeviceName(deviceName); - if (!saveAccessTokenToKeyChain(account, conn->accessToken())) - qWarning() << "Couldn't save access token"; - account.sync(); - addConnection(conn); - setActiveConnection(conn); - }); - connect(conn, &Connection::networkError, [=](QString error, QString, int, int) { - Q_EMIT errorOccured("Network Error", error); - }); - connect(conn, &Connection::loginError, [=](QString error, QString) { - Q_EMIT errorOccured("Login Failed", error); - }); } void Controller::loginWithAccessToken(QString serverAddr, QString user, QString token, QString deviceName)