diff options
author | George Hazan <ghazan@miranda.im> | 2019-07-17 18:57:23 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2019-07-17 18:57:23 +0300 |
commit | 900b9d84b4accb950d186a71185ff796ba98c165 (patch) | |
tree | 46f86f6b233bd362b53737b2d9fad3b6649c71f4 /protocols/ICQ-WIM/src | |
parent | 4de8269dcabbd57e506b85e8285b83229bc30158 (diff) |
fixes #1698 (ICQ10: add password enter prompt if no password found in db)
Diffstat (limited to 'protocols/ICQ-WIM/src')
-rw-r--r-- | protocols/ICQ-WIM/src/options.cpp | 63 | ||||
-rw-r--r-- | protocols/ICQ-WIM/src/proto.cpp | 5 | ||||
-rw-r--r-- | protocols/ICQ-WIM/src/proto.h | 6 | ||||
-rw-r--r-- | protocols/ICQ-WIM/src/resource.h | 2 | ||||
-rw-r--r-- | protocols/ICQ-WIM/src/server.cpp | 2 | ||||
-rw-r--r-- | protocols/ICQ-WIM/src/version.h | 2 |
6 files changed, 71 insertions, 9 deletions
diff --git a/protocols/ICQ-WIM/src/options.cpp b/protocols/ICQ-WIM/src/options.cpp index 18bb8531cc..55428358d7 100644 --- a/protocols/ICQ-WIM/src/options.cpp +++ b/protocols/ICQ-WIM/src/options.cpp @@ -20,6 +20,55 @@ #include "stdafx.h" +class CIcqEnterLoginDlg : public CProtoDlgBase<CIcqProto> +{ + CCtrlEdit edtPass; + CCtrlCheck chkSave; + +public: + CIcqEnterLoginDlg(CIcqProto *ppro) : + CProtoDlgBase<CIcqProto>(ppro, IDD_LOGINPW), + edtPass(this, IDC_PASSWORD), + chkSave(this, IDC_SAVEPASS) + { + } + + bool OnInitDialog() override + { + chkSave.SetState(m_proto->m_bRememberPwd); + Window_SetIcon_IcoLib(m_hwnd, m_proto->m_hProtoIcon); + return true; + } + + bool OnApply() override + { + m_proto->setByte("RememberPass", m_proto->m_bRememberPwd = chkSave.GetState()); + m_proto->m_szPassword = ptrA(edtPass.GetTextU()); + EndModal(true); + return true; + } +}; + +bool CIcqProto::RetrievePassword() +{ + // if we registered via phone (i.e., server holds the password), we don't need to enter it + if (getByte(DB_KEY_PHONEREG)) + return true; + + if (!m_szPassword.IsEmpty() && m_bRememberPwd) + return true; + + m_szPassword = getMStringA("Password"); + if (!m_szPassword.IsEmpty()) { + m_bRememberPwd = true; + return true; + } + + return CIcqEnterLoginDlg(this).DoModal() == IDOK; +} + +///////////////////////////////////////////////////////////////////////////////////////// + struct CIcqRegistrationDlg : public CProtoDlgBase<CIcqProto> { CMStringA szTrans, szMsisdn; @@ -160,7 +209,7 @@ class CIcqOptionsDlg : public CProtoDlgBase<CIcqProto> CCtrlEdit edtUin, edtPassword; CCtrlCheck chkHideChats, chkTrayIcon, chkLaunchMailbox, chkShowErrorPopups; CCtrlButton btnCreate; - CMStringW wszOldPass; + CMStringA wszOldPass; public: CIcqOptionsDlg(CIcqProto *ppro, int iDlgID, bool bFullDlg) : @@ -176,7 +225,6 @@ public: btnCreate.OnClick = Callback(this, &CIcqOptionsDlg::onClick_Register); CreateLink(edtUin, ppro->m_szOwnId); - CreateLink(edtPassword, ppro->m_szPassword); if (bFullDlg) { CreateLink(chkHideChats, ppro->m_bHideGroupchats); CreateLink(chkTrayIcon, ppro->m_bUseTrayIcon); @@ -186,6 +234,7 @@ public: chkTrayIcon.OnChange = Callback(this, &CIcqOptionsDlg::onChange_Tray); } + edtPassword.SetText(Utf2T(ppro->m_szPassword)); wszOldPass = ppro->m_szPassword; } @@ -197,11 +246,19 @@ public: bool OnApply() override { - if (wszOldPass != ptrW(edtPassword.GetText())) { + ptrW wszPass(edtPassword.GetText()); + if (wszOldPass != wszPass) { m_proto->delSetting(DB_KEY_ATOKEN); m_proto->delSetting(DB_KEY_SESSIONKEY); m_proto->delSetting(DB_KEY_PHONEREG); } + + if (mir_wstrlen(wszPass)) { + m_proto->m_szPassword = T2Utf(wszPass).get(); + m_proto->m_bRememberPwd = true; + } + else m_proto->m_bRememberPwd = m_proto->getByte("RememberPass"); + return true; } diff --git a/protocols/ICQ-WIM/src/proto.cpp b/protocols/ICQ-WIM/src/proto.cpp index 87dd35189a..15c4c6d4f1 100644 --- a/protocols/ICQ-WIM/src/proto.cpp +++ b/protocols/ICQ-WIM/src/proto.cpp @@ -38,7 +38,7 @@ static int CompareCache(const IcqCacheItem *p1, const IcqCacheItem *p2) return mir_wstrcmp(p1->m_aimid, p2->m_aimid); } -CIcqProto::CIcqProto(const char* aProtoName, const wchar_t* aUserName) : +CIcqProto::CIcqProto(const char *aProtoName, const wchar_t *aUserName) : PROTO<CIcqProto>(aProtoName, aUserName), m_arHttpQueue(10), m_arOwnIds(1, PtrKeySortT), @@ -50,7 +50,6 @@ CIcqProto::CIcqProto(const char* aProtoName, const wchar_t* aUserName) : m_iStatus2(this, "Status2", ID_STATUS_NA), m_iTimeDiff1(this, "TimeDiff1", 0), m_iTimeDiff2(this, "TimeDiff2", 0), - m_szPassword(this, "Password"), m_bHideGroupchats(this, "HideChats", true), m_bUseTrayIcon(this, "UseTrayIcon", false), m_bErrorPopups(this, "ShowErrorPopups", true), @@ -450,7 +449,7 @@ int CIcqProto::SetStatus(int iNewStatus) return 0; } - if (!getByte(DB_KEY_PHONEREG) && mir_wstrlen(m_szPassword) == 0) { + if (!RetrievePassword()) { debugLogA("Thread ended, password is not configured"); ConnectionFailed(LOGINERR_BADUSERID); return 0; diff --git a/protocols/ICQ-WIM/src/proto.h b/protocols/ICQ-WIM/src/proto.h index fcdded5f6c..15091e3fd3 100644 --- a/protocols/ICQ-WIM/src/proto.h +++ b/protocols/ICQ-WIM/src/proto.h @@ -157,6 +157,8 @@ class CIcqProto : public PROTO<CIcqProto> friend struct CIcqRegistrationDlg; friend class CGroupchatInviteDlg; friend class CEditIgnoreListDlg; + friend class CIcqEnterLoginDlg; + friend class CIcqOptionsDlg; friend AsyncHttpRequest* operator <<(AsyncHttpRequest*, const AIMSID&); @@ -170,6 +172,7 @@ class CIcqProto : public PROTO<CIcqProto> void GetPermitDeny(); wchar_t* GetUIN(MCONTACT hContact); void MoveContactToGroup(MCONTACT hContact, const wchar_t *pwszGroup, const wchar_t *pwszNewGroup); + bool RetrievePassword(); void RetrieveUserHistory(MCONTACT, __int64 startMsgId, __int64 endMsgId = -1); void RetrieveUserInfo(MCONTACT = INVALID_CONTACT_ID); void SetServerStatus(int iNewStatus); @@ -228,6 +231,7 @@ class CIcqProto : public PROTO<CIcqProto> void ProcessTyping(const JSONNode&); IcqConn m_ConnPool[CONN_LAST]; + CMStringA m_szPassword; CMStringA m_szSessionKey; CMStringA m_szAToken; CMStringA m_szRToken; @@ -246,6 +250,7 @@ class CIcqProto : public PROTO<CIcqProto> CMStringA m_szMailBox; bool m_bIgnoreListEmpty = true; + bool m_bRememberPwd = false; // store password in a database //////////////////////////////////////////////////////////////////////////////////////// // group chats @@ -349,7 +354,6 @@ public: ~CIcqProto(); CMOption<wchar_t*> m_szOwnId; // our own aim id - CMOption<wchar_t*> m_szPassword; // password, if present CMOption<BYTE> m_bHideGroupchats; // don't pop up group chat windows on startup CMOption<BYTE> m_bUseTrayIcon; // use tray icon notifications CMOption<BYTE> m_bErrorPopups; // display popups with errors diff --git a/protocols/ICQ-WIM/src/resource.h b/protocols/ICQ-WIM/src/resource.h index 72d0870920..9bdf21e844 100644 --- a/protocols/ICQ-WIM/src/resource.h +++ b/protocols/ICQ-WIM/src/resource.h @@ -11,6 +11,7 @@ #define IDI_INBOX 107 #define IDI_MAIL_NOTIFY 108 #define IDD_OPTIONS_ADV 109 +#define IDD_LOGINPW 110 #define IDC_PASSWORD 1001 #define IDC_UIN 1002 #define IDC_UIN2 1003 @@ -25,6 +26,7 @@ #define IDC_NICK 1012 #define IDC_MEMBERSINCE 1013 #define IDC_LASTSEEN 1014 +#define IDC_SAVEPASS 1015 #define IDC_LIST 1016 #define IDC_DIFF1 1017 #define IDC_SPIN1 1018 diff --git a/protocols/ICQ-WIM/src/server.cpp b/protocols/ICQ-WIM/src/server.cpp index 1672985dc0..d1600d79d2 100644 --- a/protocols/ICQ-WIM/src/server.cpp +++ b/protocols/ICQ-WIM/src/server.cpp @@ -91,7 +91,7 @@ void CIcqProto::CheckPassword() if (m_szAToken.IsEmpty() || m_szSessionKey.IsEmpty()) { auto *pReq = new AsyncHttpRequest(CONN_MAIN, REQUEST_POST, "https://api.login.icq.net/auth/clientLogin", &CIcqProto::OnCheckPassword); pReq << CHAR_PARAM("clientName", "Miranda NG") << CHAR_PARAM("clientVersion", mirVer) << CHAR_PARAM("devId", ICQ_APP_ID) - << CHAR_PARAM("f", "json") << CHAR_PARAM("tokenType", "longTerm") << WCHAR_PARAM("s", m_szOwnId) << WCHAR_PARAM("pwd", m_szPassword); + << CHAR_PARAM("f", "json") << CHAR_PARAM("tokenType", "longTerm") << WCHAR_PARAM("s", m_szOwnId) << CHAR_PARAM("pwd", m_szPassword); pReq->flags |= NLHRF_NODUMPSEND; Push(pReq); } diff --git a/protocols/ICQ-WIM/src/version.h b/protocols/ICQ-WIM/src/version.h index bb1e4cc050..a5f369d606 100644 --- a/protocols/ICQ-WIM/src/version.h +++ b/protocols/ICQ-WIM/src/version.h @@ -1,7 +1,7 @@ #define __MAJOR_VERSION 0 #define __MINOR_VERSION 95 #define __RELEASE_NUM 11 -#define __BUILD_NUM 4 +#define __BUILD_NUM 5 #include <stdver.h> |