From dd0d066e1f2223e96d8555f567763a75c73e8b14 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Mon, 6 May 2024 13:54:22 +0300 Subject: =?UTF-8?q?fixes=20#4405=20(Discord:=20=D0=BB=D0=BE=D0=B3=D0=B8?= =?UTF-8?q?=D0=BD=20=D0=BF=D0=BE=20=D0=BD=D0=BE=D0=BC=D0=B5=D1=80=D1=83=20?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D0=B5=D1=84=D0=BE=D0=BD=D0=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- protocols/Discord/src/http.cpp | 12 ++++++++++-- protocols/Discord/src/options.cpp | 20 +++++++++++++++++++- protocols/Discord/src/server.cpp | 10 ---------- 3 files changed, 29 insertions(+), 13 deletions(-) (limited to 'protocols/Discord/src') diff --git a/protocols/Discord/src/http.cpp b/protocols/Discord/src/http.cpp index b8e71aa09a..b349eac36b 100644 --- a/protocols/Discord/src/http.cpp +++ b/protocols/Discord/src/http.cpp @@ -107,7 +107,8 @@ void CDiscordProto::ServerThread(void*) if (m_szAccessToken != nullptr) RetrieveMyInfo(); // try to receive a response from server else { - if (mir_wstrlen(m_wszEmail) == 0) { + CMStringW wszEmail(m_wszEmail); + if (wszEmail.IsEmpty()) { ConnectionFailed(LOGINERR_BADUSERID); return; } @@ -118,7 +119,14 @@ void CDiscordProto::ServerThread(void*) return; } - JSONNode root; root << WCHAR_PARAM("email", m_wszEmail) << WCHAR_PARAM("password", wszPassword); + JSONNode root; root << WCHAR_PARAM("password", wszPassword); + if (wszEmail.Find('@') == -1) { + if (wszEmail[0] != '+') + wszEmail.Insert(0, L"+"); + root << WCHAR_PARAM("login", wszEmail) ; + } + else root << WCHAR_PARAM("email", wszEmail); + Push(new AsyncHttpRequest(this, REQUEST_POST, "/auth/login", &CDiscordProto::OnReceiveToken, &root)); } diff --git a/protocols/Discord/src/options.cpp b/protocols/Discord/src/options.cpp index 3262b37671..dc1c6eafa8 100644 --- a/protocols/Discord/src/options.cpp +++ b/protocols/Discord/src/options.cpp @@ -81,7 +81,15 @@ public: void onClick_Logout(CCtrlButton *) { - m_proto->Push(new AsyncHttpRequest(m_proto, REQUEST_POST, "/auth/logout", &CDiscordProto::OnReceiveLogout)); + auto *pReq = new AsyncHttpRequest(m_proto, REQUEST_POST, "/auth/logout", &CDiscordProto::OnReceiveLogout); + pReq->pUserInfo = this; + m_proto->Push(pReq); + } + + void onLogout() + { + m_edUserName.Enable(); + m_edPassword.Enable(); } void onChange_GroupChats(CCtrlCheck*) @@ -92,6 +100,16 @@ public: } }; +void CDiscordProto::OnReceiveLogout(MHttpResponse *, AsyncHttpRequest *pReq) +{ + delSetting(DB_KEY_TOKEN); + m_szAccessToken = 0; + ShutdownSession(); + + auto *pDlg = (CDiscardAccountOptions *)pReq->pUserInfo; + pDlg->onLogout(); +} + ///////////////////////////////////////////////////////////////////////////////////////// MWindow CDiscordProto::OnCreateAccMgrUI(MWindow hwndParent) diff --git a/protocols/Discord/src/server.cpp b/protocols/Discord/src/server.cpp index 54d41ede49..728a56da7d 100644 --- a/protocols/Discord/src/server.cpp +++ b/protocols/Discord/src/server.cpp @@ -165,7 +165,6 @@ void CDiscordProto::OnReceiveMyInfo(MHttpResponse *pReply, AsyncHttpRequest*) setByte(0, DB_KEY_MFA, data["mfa_enabled"].as_bool()); setDword(0, DB_KEY_DISCR, _wtoi(data["discriminator"].as_mstring())); setWString(0, DB_KEY_NICK, data["username"].as_mstring()); - m_wszEmail = data["email"].as_mstring(); m_ownId = id; m_szCookie = pReply->GetCookies(); @@ -217,15 +216,6 @@ void CDiscordProto::OnReceiveCreateChannel(MHttpResponse *pReply, AsyncHttpReque ///////////////////////////////////////////////////////////////////////////////////////// -void CDiscordProto::OnReceiveLogout(MHttpResponse *, AsyncHttpRequest *) -{ - delSetting(DB_KEY_TOKEN); - m_szAccessToken = 0; - ShutdownSession(); -} - -///////////////////////////////////////////////////////////////////////////////////////// - void CDiscordProto::OnReceiveMessageAck(MHttpResponse *pReply, AsyncHttpRequest*) { JsonReply root(pReply); -- cgit v1.2.3