summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--protocols/VKontakte/src/misc.cpp3
-rw-r--r--protocols/VKontakte/src/version.h2
-rw-r--r--protocols/VKontakte/src/vk_dialogs.cpp2
-rw-r--r--protocols/VKontakte/src/vk_dialogs.h2
-rw-r--r--protocols/VKontakte/src/vk_struct.cpp7
-rw-r--r--protocols/VKontakte/src/vk_thread.cpp24
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 <stdver.h>
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 <http://www.gnu.org/licenses/>.
/////////////////////////////////////////////////////////////////////////////////////////
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/");