From a237d7b332d0212ddd350c69488c93b846ff76d7 Mon Sep 17 00:00:00 2001 From: ElzorFox Date: Fri, 21 Feb 2025 18:02:27 +0500 Subject: VKontakte: remove old token (before 20/02) on update change UA to Chrome cleanup version bump --- protocols/VKontakte/src/misc.cpp | 3 +++ protocols/VKontakte/src/version.h | 2 +- protocols/VKontakte/src/vk_dialogs.cpp | 2 +- protocols/VKontakte/src/vk_dialogs.h | 2 +- protocols/VKontakte/src/vk_struct.cpp | 7 ++++--- protocols/VKontakte/src/vk_thread.cpp | 24 ++++++++++++++++-------- 6 files changed, 26 insertions(+), 14 deletions(-) diff --git a/protocols/VKontakte/src/misc.cpp b/protocols/VKontakte/src/misc.cpp index 9c1d86ed89..2f669795fe 100644 --- a/protocols/VKontakte/src/misc.cpp +++ b/protocols/VKontakte/src/misc.cpp @@ -146,6 +146,9 @@ void CVkProto::CheckUpdate() bIint64IDCompatibility = true; } + if (getDword("LastAccessTokenTime", 0) < 1740009600) + ClearAccessToken(); + } //////////////////////// bIint64IDCompatibility ///////////////////////////////////////// diff --git a/protocols/VKontakte/src/version.h b/protocols/VKontakte/src/version.h index d1a08f58e6..9739601f53 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 18 -#define __BUILD_NUM 0 +#define __BUILD_NUM 1 #include diff --git a/protocols/VKontakte/src/vk_dialogs.cpp b/protocols/VKontakte/src/vk_dialogs.cpp index 3ca08ae035..2f6a991d0d 100644 --- a/protocols/VKontakte/src/vk_dialogs.cpp +++ b/protocols/VKontakte/src/vk_dialogs.cpp @@ -102,7 +102,7 @@ void CVkCaptchaForm::On_edtValue_Change(CCtrlEdit*) } ////////////////////////////////// IDD_TOKENFORM ////////////////////////////////////////// -CVkTokenForm::CVkTokenForm(CVkProto* proto, CMStringA& _szTokenReq) : +CVkTokenForm::CVkTokenForm(CVkProto* proto, const char* _szTokenReq) : CVkDlgBase(proto, IDD_TOKENFORM), m_instruction(this, IDC_INSTRUCTION), m_edtValue(this, IDC_TOKENVAL), diff --git a/protocols/VKontakte/src/vk_dialogs.h b/protocols/VKontakte/src/vk_dialogs.h index 139a33c5e5..9a333ec430 100644 --- a/protocols/VKontakte/src/vk_dialogs.h +++ b/protocols/VKontakte/src/vk_dialogs.h @@ -63,7 +63,7 @@ class CVkTokenForm : public CVkDlgBase CMStringA m_szAccName; public: - CVkTokenForm(CVkProto* proto, CMStringA& _szTokenReq); + CVkTokenForm(CVkProto* proto, const char* _szTokenReq); bool OnInitDialog() override; bool OnApply() override; diff --git a/protocols/VKontakte/src/vk_struct.cpp b/protocols/VKontakte/src/vk_struct.cpp index 7e23482d02..f7a3343f95 100644 --- a/protocols/VKontakte/src/vk_struct.cpp +++ b/protocols/VKontakte/src/vk_struct.cpp @@ -20,11 +20,11 @@ along with this program. If not, see . ///////////////////////////////////////////////////////////////////////////////////////// ULONG AsyncHttpRequest::m_uReqCount = 0; +char szVKUserAgent[] = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36"; AsyncHttpRequest::AsyncHttpRequest() { m_bApiReq = true; - AddHeader("Connection", "close"); pUserInfo = nullptr; m_iRetry = MAX_RETRIES; @@ -40,7 +40,8 @@ AsyncHttpRequest::AsyncHttpRequest(CVkProto *ppro, int iRequestType, LPCSTR _url { m_bApiReq = true; bIsMainConn = false; - AddHeader("Connection", "close"); + AddHeader("User-Agent", szVKUserAgent); + AddHeader("Accept-Encoding", "none"); if (ppro->bIint64IDCompatibility) AddHeader("X-Owner", "long"); @@ -54,7 +55,7 @@ AsyncHttpRequest::AsyncHttpRequest(CVkProto *ppro, int iRequestType, LPCSTR _url else m_szUrl = _url; - flags = VK_NODUMPHEADERS | NLHRF_DUMPASTEXT | NLHRF_HTTP11 | NLHRF_REDIRECT; + flags = NLHRF_DUMPASTEXT | NLHRF_HTTP11 | NLHRF_REDIRECT; if (bSecure) { flags |= NLHRF_SSL; this << CHAR_PARAM("access_token", ppro->m_szAccessToken); diff --git a/protocols/VKontakte/src/vk_thread.cpp b/protocols/VKontakte/src/vk_thread.cpp index c527e5d472..d17f542d4f 100644 --- a/protocols/VKontakte/src/vk_thread.cpp +++ b/protocols/VKontakte/src/vk_thread.cpp @@ -23,11 +23,11 @@ mir_cs CVkProto::m_csTimer; char szBlankUrl[] = "https://oauth.vk.com/blank.html"; char szChallengekUrl[] = "/challenge.html"; char szScore[] = "friends,photos,audio,docs,video,wall,messages,offline,status,notifications,groups"; -char szVKUserAgent[] = "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko"; char szVKTokenBeg[] = "access_token="; +char szVKCookieDomain[] = ".vk.com"; static char szVKLoginDomain[] = "https://m.vk.com"; -static char szVKCookieDomain[] = ".vk.com"; + static char szFieldsName[] = "id, first_name, last_name, photo_100, bdate, sex, timezone, " "contacts, last_seen, online, status, country, city, relation, interests, activities, " "music, movies, tv, books, games, quotes, about, domain, can_write_private_message"; @@ -206,7 +206,6 @@ void CVkProto::OnLoggedOut() bool CVkProto::LoadToken(LPCSTR pszUrlSring) { - m_szAccessToken = nullptr; LPCSTR p = strstr(pszUrlSring, szVKTokenBeg); if (!p) return false; @@ -221,7 +220,7 @@ bool CVkProto::LoadToken(LPCSTR pszUrlSring) if (m_szAccessToken == nullptr) m_szAccessToken = mir_strdup(p); setString("AccessToken", m_szAccessToken); - + setDword("LastAccessTokenTime", time(0)); return true; } @@ -244,7 +243,6 @@ void CVkProto::OnOAuthAuthorize(MHttpResponse *reply, AsyncHttpRequest*) pReq->m_bApiReq = false; pReq->bIsMainConn = true; ApplyCookies(pReq); - pReq->AddHeader("User-Agent", szVKUserAgent); Push(pReq); return; } @@ -271,7 +269,7 @@ void CVkProto::OnOAuthAuthorize(MHttpResponse *reply, AsyncHttpRequest*) VER_API ); - CVkTokenForm dlg(this, szTokenReq); + CVkTokenForm dlg(this, szTokenReq.c_str()); if (dlg.DoModal() && LoadToken(dlg.Result)) RetrieveMyInfo(); else @@ -296,7 +294,6 @@ void CVkProto::OnOAuthAuthorize(MHttpResponse *reply, AsyncHttpRequest*) pRedirectReq->m_bApiReq = false; pRedirectReq->bIsMainConn = true; // Headers - pRedirectReq->AddHeader("User-Agent", szVKUserAgent); pRedirectReq->AddHeader("dht", "1"); pRedirectReq->AddHeader("sec-ch-ua-platform", "Windows"); pRedirectReq->AddHeader("sec-fetch-dest", "document"); @@ -314,6 +311,17 @@ void CVkProto::OnOAuthAuthorize(MHttpResponse *reply, AsyncHttpRequest*) return; } + if (reply->resultCode == 200 && !IsEmpty(reply->szUrl) && strstr(reply->szUrl, szChallengekUrl)) { + debugLogA("CVkProto::OnOAuthAuthorize szChallengekUrl"); + CVkTokenForm dlg(this, reply->szUrl); + if (dlg.DoModal() && LoadToken(dlg.Result)) + RetrieveMyInfo(); + else + ConnectionFailed(LOGINERR_NOSERVER); + + return; + } + if (reply->resultCode != 200 || reply->body.IsEmpty() || (!(strstr(reply->body, "method=\"post\"") || strstr(reply->body, "method=\"POST\"")) && !strstr(reply->body, "meta http-equiv=\"refresh\""))) { // something went wrong ConnectionFailed(LOGINERR_NOSERVER); return; @@ -367,7 +375,7 @@ void CVkProto::OnOAuthAuthorize(MHttpResponse *reply, AsyncHttpRequest*) pReq->Redirect(reply); ApplyCookies(pReq); // Headers - pReq->AddHeader("User-Agent", szVKUserAgent); + pReq->AddHeader("dht", "1"); pReq->AddHeader("origin", "https://oauth.vk.com"); pReq->AddHeader("referer", "https://oauth.vk.com/"); -- cgit v1.2.3