From eaa5f40645f0140f39c07b899e80cbd149d4c727 Mon Sep 17 00:00:00 2001 From: ElzorFox Date: Tue, 15 Jun 2021 11:00:08 +0500 Subject: VKontakte: crutch for login after entering confirmation code (VK returns 404 instead of token) update VK_API_VER to 5.131 version bump --- protocols/VKontakte/src/version.h | 2 +- protocols/VKontakte/src/vk.h | 2 +- protocols/VKontakte/src/vk_queue.cpp | 2 +- protocols/VKontakte/src/vk_thread.cpp | 26 ++++++++++++++++++++++---- 4 files changed, 25 insertions(+), 7 deletions(-) (limited to 'protocols/VKontakte') diff --git a/protocols/VKontakte/src/version.h b/protocols/VKontakte/src/version.h index fe73c99beb..3814afc121 100644 --- a/protocols/VKontakte/src/version.h +++ b/protocols/VKontakte/src/version.h @@ -1,7 +1,7 @@ #define __MAJOR_VERSION 0 #define __MINOR_VERSION 1 #define __RELEASE_NUM 12 -#define __BUILD_NUM 0 +#define __BUILD_NUM 1 #include diff --git a/protocols/VKontakte/src/vk.h b/protocols/VKontakte/src/vk.h index 75006c5dea..1cf50416c1 100644 --- a/protocols/VKontakte/src/vk.h +++ b/protocols/VKontakte/src/vk.h @@ -88,7 +88,7 @@ along with this program. If not, see . #define VK_USER_DEACTIVATE_ACTION 9321 -#define VK_API_VER "5.130" +#define VK_API_VER "5.131" #define VER_API CHAR_PARAM("v", VK_API_VER) #define VK_FEED_USER 2147483647L diff --git a/protocols/VKontakte/src/vk_queue.cpp b/protocols/VKontakte/src/vk_queue.cpp index 6b7604ab2c..5f44167637 100644 --- a/protocols/VKontakte/src/vk_queue.cpp +++ b/protocols/VKontakte/src/vk_queue.cpp @@ -136,7 +136,7 @@ void CVkProto::WorkerThread(void*) m_bTerminated = m_prevError = false; m_szAccessToken = getStringA("AccessToken"); - char Score[] = "friends,photos,audio,docs,video,wall,messages,offline,status,notifications,groups"; + extern char Score[]; CMStringA szAccessScore(ptrA(getStringA("AccessScore"))); if (szAccessScore != Score) { diff --git a/protocols/VKontakte/src/vk_thread.cpp b/protocols/VKontakte/src/vk_thread.cpp index 013fadba8b..1b906537bf 100644 --- a/protocols/VKontakte/src/vk_thread.cpp +++ b/protocols/VKontakte/src/vk_thread.cpp @@ -22,6 +22,7 @@ mir_cs CVkProto::m_csTimer; char szBlankUrl[] = "https://oauth.vk.com/blank.html"; char sz2FA[] = "https://m.vk.com/login?act=authcheck"; +char Score[] = "friends,photos,audio,docs,video,wall,messages,offline,status,notifications,groups"; static char VK_TOKEN_BEG[] = "access_token="; static char VK_LOGIN_DOMAIN[] = "https://m.vk.com"; static char fieldsName[] = "id, first_name, last_name, photo_100, bdate, sex, timezone, " @@ -73,6 +74,7 @@ void CVkProto::ShutdownSession() void CVkProto::ConnectionFailed(int iReason) { delSetting("AccessToken"); + delSetting("Err404Return"); ProtoBroadcastAck(0, ACKTYPE_LOGIN, ACKRESULT_FAILED, nullptr, iReason); debugLogA("CVkProto::ConnectionFailed ShutdownSession"); @@ -198,6 +200,24 @@ void CVkProto::OnOAuthAuthorize(NETLIBHTTPREQUEST *reply, AsyncHttpRequest*) debugLogA("CVkProto::OnOAuthAuthorize %d", reply->resultCode); GrabCookies(reply); + if (reply->resultCode == 404 && getBool("Err404Return") == false) { + setByte("Err404Return", 1); + setString("AccessScore", Score); + AsyncHttpRequest* pReq = new AsyncHttpRequest(this, REQUEST_GET, "https://oauth.vk.com/authorize", false, &CVkProto::OnOAuthAuthorize); + pReq + << INT_PARAM("client_id", VK_APP_ID) + << CHAR_PARAM("scope", Score) + << CHAR_PARAM("redirect_uri", szBlankUrl) + << CHAR_PARAM("display", "mobile") + << CHAR_PARAM("response_type", "token") + << VER_API; + pReq->m_bApiReq = false; + pReq->bIsMainConn = true; + ApplyCookies(pReq); + Push(pReq); + return; + } + if (reply->resultCode == 302) { // manual redirect LPCSTR pszLocation = Netlib_GetHeader(reply, "Location"); if (pszLocation) { @@ -217,10 +237,8 @@ void CVkProto::OnOAuthAuthorize(NETLIBHTTPREQUEST *reply, AsyncHttpRequest*) setString("AccessToken", m_szAccessToken); RetrieveMyInfo(); } - else { - delSetting("AccessToken"); + else ConnectionFailed(LOGINERR_NOSERVER); - } } else { AsyncHttpRequest *pRedirectReq = new AsyncHttpRequest(); @@ -270,7 +288,6 @@ void CVkProto::OnOAuthAuthorize(NETLIBHTTPREQUEST *reply, AsyncHttpRequest*) } else { debugLogA("CVkProto::OnOAuthAuthorize blank ulr found, access_token not found"); - delSetting("AccessToken"); ConnectionFailed(LOGINERR_NOSERVER); } return; @@ -327,6 +344,7 @@ void CVkProto::TrackVisitor() void CVkProto::RetrieveMyInfo() { debugLogA("CVkProto::RetrieveMyInfo"); + delSetting("Err404Return"); Push(new AsyncHttpRequest(this, REQUEST_GET, "/method/users.get.json", true, &CVkProto::OnReceiveMyInfo, AsyncHttpRequest::rpHigh)); } -- cgit v1.2.3