diff options
Diffstat (limited to 'protocols/VKontakte/src/vk_thread.cpp')
-rw-r--r-- | protocols/VKontakte/src/vk_thread.cpp | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/protocols/VKontakte/src/vk_thread.cpp b/protocols/VKontakte/src/vk_thread.cpp index 3c90ec5872..013fadba8b 100644 --- a/protocols/VKontakte/src/vk_thread.cpp +++ b/protocols/VKontakte/src/vk_thread.cpp @@ -247,11 +247,35 @@ void CVkProto::OnOAuthAuthorize(NETLIBHTTPREQUEST *reply, AsyncHttpRequest*) return;
}
- if (reply->resultCode != 200 || !reply->pData || !strstr(reply->pData, "form method=\"post\"")) { // something went wrong
+ if (reply->resultCode != 200 || !reply->pData || (!strstr(reply->pData, "form method=\"post\"") && !strstr(reply->pData, "meta http-equiv=\"refresh\""))) { // something went wrong
ConnectionFailed(LOGINERR_NOSERVER);
return;
}
+ LPCSTR pBlankUrl = strstr(reply->pData, szBlankUrl);
+ if (pBlankUrl) {
+ debugLogA("CVkProto::OnOAuthAuthorize blank ulr found");
+ m_szAccessToken = nullptr;
+ LPCSTR p = strstr(pBlankUrl, VK_TOKEN_BEG);
+ if (p) {
+ p += sizeof(VK_TOKEN_BEG) - 1;
+ for (LPCSTR q = p + 1; *q; q++) {
+ if (*q == '&' || *q == '=' || *q == '\"') {
+ m_szAccessToken = mir_strndup(p, q - p);
+ break;
+ }
+ }
+ setString("AccessToken", m_szAccessToken);
+ RetrieveMyInfo();
+ }
+ else {
+ debugLogA("CVkProto::OnOAuthAuthorize blank ulr found, access_token not found");
+ delSetting("AccessToken");
+ ConnectionFailed(LOGINERR_NOSERVER);
+ }
+ return;
+ }
+
char *pMsgWarning = strstr(reply->pData, "service_msg_warning");
if (pMsgWarning) {
char *p1 = strchr(pMsgWarning, '>');
|