diff options
-rw-r--r-- | protocols/VKontakte/src/misc.cpp | 3 | ||||
-rw-r--r-- | protocols/VKontakte/src/version.h | 2 | ||||
-rw-r--r-- | protocols/VKontakte/src/vk_dialogs.cpp | 2 | ||||
-rw-r--r-- | protocols/VKontakte/src/vk_dialogs.h | 2 | ||||
-rw-r--r-- | protocols/VKontakte/src/vk_struct.cpp | 7 | ||||
-rw-r--r-- | 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 <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/");
|