From 2f8ead5c2de8b30272f6d47b4402957a97f3c106 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Mon, 13 Nov 2023 18:42:14 +0300 Subject: =?UTF-8?q?fixes=20#3835=20(=D0=A8=D0=B8=D1=84=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B1=D0=B0=D0=B7=D1=8B:=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B7=D1=80=D0=B5=D1=88=D0=B8=D1=82=D1=8C=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BA=D0=B0=D0=B7=20=D0=B2=D0=B2=D0=BE=D0=B4=D0=B8=D0=BC=D1=8B?= =?UTF-8?q?=D1=85=20=D1=81=D0=B8=D0=BC=D0=B2=D0=BE=D0=BB=D0=BE=D0=B2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mir_app/res/eye.ico | Bin 0 -> 894 bytes src/mir_app/res/resource.rc | 41 +++++-- src/mir_app/src/MDatabaseCommonCrypt.cpp | 191 ++++++++++++++++++------------- src/mir_app/src/resource.h | 7 +- 4 files changed, 149 insertions(+), 90 deletions(-) create mode 100644 src/mir_app/res/eye.ico (limited to 'src/mir_app') diff --git a/src/mir_app/res/eye.ico b/src/mir_app/res/eye.ico new file mode 100644 index 0000000000..c996bb179f Binary files /dev/null and b/src/mir_app/res/eye.ico differ diff --git a/src/mir_app/res/resource.rc b/src/mir_app/res/resource.rc index 574a132eb3..60737ba47c 100644 --- a/src/mir_app/res/resource.rc +++ b/src/mir_app/res/resource.rc @@ -7,7 +7,6 @@ // // Generated from the TEXTINCLUDE 2 resource. // -#include #include #include "../../include/statusmodes.h" @@ -752,7 +751,7 @@ BEGIN CONTROL "User &details",IDC_DETAILS,"MButtonClass",WS_TABSTOP,248,29,16,14,WS_EX_NOACTIVATE | 0x10000000L LTEXT "Reason:",IDC_STATIC,7,39,101,10,SS_CENTERIMAGE EDITTEXT IDC_REASON,7,50,257,54,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | WS_VSCROLL | WS_HSCROLL,WS_EX_STATICEDGE - LTEXT "Denial reason:",IDC_STATIC,7,111,89,10,SS_CENTERIMAGE | SS_REALSIZECONTROL + LTEXT "Denial reason:",IDC_STATIC,7,111,89,10,SS_CENTERIMAGE | 0x40 EDITTEXT IDC_DENYREASON,7,124,257,32,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | NOT WS_BORDER,WS_EX_STATICEDGE CONTROL "Add to contact list if authorized",IDC_ADDCHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,162,239,10 END @@ -937,12 +936,13 @@ FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN CONTROL "Please enter your new password",IDC_HEADERBAR, "MHeaderbarCtrl",0x0,0,0,190,26 - CTEXT "",IDC_LANG,158,34,13,13,SS_CENTERIMAGE | NOT WS_GROUP - EDITTEXT IDC_USERPASS1,21,34,128,14,ES_PASSWORD | ES_AUTOHSCROLL - EDITTEXT IDC_USERPASS2,21,54,128,14,ES_PASSWORD | ES_AUTOHSCROLL + CTEXT "",IDC_LANG,144,34,13,13,SS_CENTERIMAGE | NOT WS_GROUP + EDITTEXT IDC_USERPASS1,10,34,128,14,ES_PASSWORD | ES_AUTOHSCROLL + EDITTEXT IDC_USERPASS2,10,54,128,14,ES_PASSWORD | ES_AUTOHSCROLL DEFPUSHBUTTON "OK",IDOK,36,84,50,14 PUSHBUTTON "Cancel",IDCANCEL,100,84,50,14 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,0,77,190,1 + CONTROL "",IDC_SHOWPASSWORD,"MButtonClass",0x0,163,34,16,14 END IDD_CHANGEPASS DIALOGEX 0, 0, 190, 148 @@ -962,6 +962,7 @@ BEGIN LTEXT "New password",IDC_STATIC,11,66,163,10,0,WS_EX_TRANSPARENT CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,0,119,190,1 LTEXT "Old password",IDC_STATIC,11,31,140,10,0,WS_EX_TRANSPARENT + CTEXT "",IDC_LANG2,155,78,13,13,SS_CENTERIMAGE | NOT WS_GROUP END IDD_OPT_DATABASE DIALOGEX 0, 0, 318, 176 @@ -1344,6 +1345,10 @@ BEGIN BOTTOMMARGIN, 63 END + IDD_OPT_ERRORS, DIALOG + BEGIN + END + IDD_CHOOSE_FONT_EFFECT, DIALOG BEGIN END @@ -1415,6 +1420,18 @@ BEGIN BOTTOMMARGIN, 194 END + IDD_NEWPASS, DIALOG + BEGIN + END + + IDD_CHANGEPASS, DIALOG + BEGIN + END + + IDD_OPT_DATABASE, DIALOG + BEGIN + END + IDD_OPT_FILEGENERAL, DIALOG BEGIN END @@ -1439,7 +1456,6 @@ END 2 TEXTINCLUDE BEGIN - "#include \r\n" "#include \r\n" "#include ""../../include/statusmodes.h""\r\n" "\0" @@ -1589,6 +1605,8 @@ IDI_EXIT ICON "Icon_exit.ico" IDI_MOVETOGROUP ICON "contact_groups.ico" +IDI_EYE ICON "eye.ico" + IDI_ON ICON "On.ico" IDI_OFF ICON "Off.ico" @@ -1651,7 +1669,6 @@ IDI_STATUS4 ICON "chat/5.ico" IDI_STATUS5 ICON "chat/6.ico" - ///////////////////////////////////////////////////////////////////////////// // // Cursor @@ -1846,6 +1863,16 @@ BEGIN 0 END +IDD_NEWPASS AFX_DIALOG_LAYOUT +BEGIN + 0 +END + +IDD_CHANGEPASS AFX_DIALOG_LAYOUT +BEGIN + 0 +END + #endif // English (United States) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/src/mir_app/src/MDatabaseCommonCrypt.cpp b/src/mir_app/src/MDatabaseCommonCrypt.cpp index 88ec00a1cd..50e518010e 100644 --- a/src/mir_app/src/MDatabaseCommonCrypt.cpp +++ b/src/mir_app/src/MDatabaseCommonCrypt.cpp @@ -130,20 +130,6 @@ void MDatabaseCommon::SetPassword(const wchar_t *ptszPassword) Menu_ModifyItem(hSetPwdMenu, GetMenuTitle(m_bUsesPassword), Skin_GetIconHandle(SKINICON_OTHER_KEYS)); } -static UINT oldLangID; -void LanguageChanged(HWND hwndDlg) -{ - UINT_PTR LangID = (UINT_PTR)GetKeyboardLayout(0); - char Lang[3] = { 0 }; - if (LangID != oldLangID) { - oldLangID = LangID; - GetLocaleInfoA(MAKELCID((LangID & 0xffffffff), SORT_DEFAULT), LOCALE_SABBREVLANGNAME, Lang, 2); - Lang[0] = toupper(Lang[0]); - Lang[1] = tolower(Lang[1]); - SetDlgItemTextA(hwndDlg, IDC_LANG, Lang); - } -} - ///////////////////////////////////////////////////////////////////////////////////////// static bool CheckOldPassword(HWND hwndDlg, MDatabaseCommon *db) @@ -160,91 +146,134 @@ static bool CheckOldPassword(HWND hwndDlg, MDatabaseCommon *db) return true; } -static INT_PTR CALLBACK sttChangePassword(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +class CChangePasswordDlg : public CDlgBase { - MDatabaseCommon *db = (MDatabaseCommon *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + UINT oldLangID = 0; + wchar_t oldPasswordChar = 0; + MDatabaseCommon *m_db; + + CTimer m_timer; + CCtrlEdit edtPass1, edtPass2; + CCtrlButton btnRemove; + CCtrlMButton btnShowPass; + +public: + CChangePasswordDlg(MDatabaseCommon *pDB) : + CDlgBase(g_plugin, pDB->usesPassword() ? IDD_CHANGEPASS : IDD_NEWPASS), + m_db(pDB), + m_timer(this, 1), + edtPass1(this, IDC_USERPASS1), + edtPass2(this, IDC_USERPASS2), + btnRemove(this, IDREMOVE), + btnShowPass(this, IDC_SHOWPASSWORD, g_plugin.getIcon(IDI_EYE), LPGEN("Show password")) + { + btnRemove.OnClick = Callback(this, &CChangePasswordDlg::onClick_Remove); + btnShowPass.OnClick = Callback(this, &CChangePasswordDlg::onClick_ShowPass); + + m_timer.OnEvent = Callback(this, &CChangePasswordDlg::onTimer); + } + + bool OnInitDialog() override + { + SendDlgItemMessage(m_hwnd, IDC_HEADERBAR, WM_SETICON, ICON_SMALL, (LPARAM)g_plugin.getIcon(IDI_DATABASE, true)); + oldPasswordChar = edtPass1.SendMsg(EM_GETPASSWORDCHAR, 0, 0); + m_timer.Start(200); + return true; + } + + bool OnApply() override + { + wchar_t buf2[100]; + edtPass1.GetText(buf2, _countof(buf2)); + if (wcslen(buf2) < 3) { + SetDlgItemText(m_hwnd, IDC_HEADERBAR, TranslateT("Password is too short!")); + LBL_Error: + SendDlgItemMessage(m_hwnd, IDC_HEADERBAR, WM_NCPAINT, 0, 0); + edtPass1.SetTextA(""); + edtPass2.SetTextA(""); + } + + wchar_t buf[100]; + GetDlgItemText(m_hwnd, IDC_USERPASS2, buf, _countof(buf)); + if (wcscmp(buf2, buf)) { + SetDlgItemText(m_hwnd, IDC_HEADERBAR, TranslateT("Passwords do not match!")); + goto LBL_Error; + } + + if (!CheckOldPassword(m_hwnd, m_db)) + goto LBL_Error; - switch (uMsg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - SendDlgItemMessage(hwndDlg, IDC_HEADERBAR, WM_SETICON, ICON_SMALL, (LPARAM)g_plugin.getIcon(IDI_DATABASE, true)); - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, lParam); + m_db->SetPassword(buf2); + m_db->StoreCryptoKey(); + SecureZeroMemory(buf, sizeof(buf)); + SecureZeroMemory(buf2, sizeof(buf2)); + return true; + } - oldLangID = 0; - SetTimer(hwndDlg, 1, 200, nullptr); - LanguageChanged(hwndDlg); - return TRUE; + void OnDestroy() override + { + m_timer.Stop(); + Window_FreeIcon_IcoLib(GetDlgItem(m_hwnd, IDC_HEADERBAR)); + } - case WM_CTLCOLORSTATIC: - if ((HWND)lParam == GetDlgItem(hwndDlg, IDC_LANG)) { + LRESULT DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override + { + if (msg == WM_CTLCOLORSTATIC && (HWND)lParam == GetDlgItem(m_hwnd, IDC_LANG)) { SetTextColor((HDC)wParam, GetSysColor(COLOR_HIGHLIGHTTEXT)); SetBkMode((HDC)wParam, TRANSPARENT); return (INT_PTR)GetSysColorBrush(COLOR_HIGHLIGHT); } - return FALSE; - - case WM_COMMAND: - switch (LOWORD(wParam)) { - case IDCANCEL: - EndDialog(hwndDlg, IDCANCEL); - break; - - case IDREMOVE: - if (!CheckOldPassword(hwndDlg, db)) { -LBL_Error: - SendDlgItemMessage(hwndDlg, IDC_HEADERBAR, WM_NCPAINT, 0, 0); - SetDlgItemTextA(hwndDlg, IDC_USERPASS1, ""); - SetDlgItemTextA(hwndDlg, IDC_USERPASS2, ""); - } - else { - db->SetPassword(nullptr); - db->StoreCryptoKey(); - EndDialog(hwndDlg, IDREMOVE); - } - break; - - case IDOK: - wchar_t buf2[100]; - GetDlgItemText(hwndDlg, IDC_USERPASS1, buf2, _countof(buf2)); - if (wcslen(buf2) < 3) { - SetDlgItemText(hwndDlg, IDC_HEADERBAR, TranslateT("Password is too short!")); - goto LBL_Error; - } - wchar_t buf[100]; - GetDlgItemText(hwndDlg, IDC_USERPASS2, buf, _countof(buf)); - if (wcscmp(buf2, buf)) { - SetDlgItemText(hwndDlg, IDC_HEADERBAR, TranslateT("Passwords do not match!")); - goto LBL_Error; - } + return CDlgBase::DlgProc(msg, wParam, lParam); + } - if (!CheckOldPassword(hwndDlg, db)) - goto LBL_Error; + void onTimer(CTimer *) + { + UINT_PTR LangID = (UINT_PTR)GetKeyboardLayout(0); + char Lang[3] = { 0 }; + if (LangID != oldLangID) { + oldLangID = LangID; + GetLocaleInfoA(MAKELCID((LangID & 0xffffffff), SORT_DEFAULT), LOCALE_SABBREVLANGNAME, Lang, 2); + Lang[0] = toupper(Lang[0]); + Lang[1] = tolower(Lang[1]); + SetDlgItemTextA(m_hwnd, IDC_LANG, Lang); + } + } - db->SetPassword(buf2); - db->StoreCryptoKey(); - SecureZeroMemory(buf, sizeof(buf)); - SecureZeroMemory(buf2, sizeof(buf2)); - EndDialog(hwndDlg, IDOK); + void onClick_Remove(CCtrlButton *) + { + if (!CheckOldPassword(m_hwnd, m_db)) { + SendDlgItemMessage(m_hwnd, IDC_HEADERBAR, WM_NCPAINT, 0, 0); + edtPass1.SetTextA(""); + edtPass2.SetTextA(""); + } + else { + m_db->SetPassword(nullptr); + m_db->StoreCryptoKey(); + EndDialog(m_hwnd, IDREMOVE); } - break; + } - case WM_TIMER: - LanguageChanged(hwndDlg); - return FALSE; + void onClick_ShowPass(CCtrlMButton *) + { + DWORD dwStyle = GetWindowLong(edtPass1.GetHwnd(), GWL_STYLE); + if (dwStyle & ES_PASSWORD) { + edtPass1.SendMsg(EM_SETPASSWORDCHAR, 0, 0); + edtPass2.SendMsg(EM_SETPASSWORDCHAR, 0, 0); + } + else { + edtPass1.SendMsg(EM_SETPASSWORDCHAR, oldPasswordChar, 0); + edtPass2.SendMsg(EM_SETPASSWORDCHAR, oldPasswordChar, 0); + } - case WM_DESTROY: - KillTimer(hwndDlg, 1); - Window_FreeIcon_IcoLib(GetDlgItem(hwndDlg, IDC_HEADERBAR)); + InvalidateRect(edtPass1.GetHwnd(), 0, TRUE); + InvalidateRect(edtPass2.GetHwnd(), 0, TRUE); } - - return FALSE; -} +}; static INT_PTR ChangePassword(void* obj, WPARAM, LPARAM) { - MDatabaseCommon *db = (MDatabaseCommon*)obj; - DialogBoxParam(g_plugin.getInst(), MAKEINTRESOURCE(db->usesPassword() ? IDD_CHANGEPASS : IDD_NEWPASS), nullptr, sttChangePassword, (LPARAM)db); + CChangePasswordDlg((MDatabaseCommon *)obj).DoModal(); return 0; } diff --git a/src/mir_app/src/resource.h b/src/mir_app/src/resource.h index f089400e66..fc3489b180 100644 --- a/src/mir_app/src/resource.h +++ b/src/mir_app/src/resource.h @@ -56,6 +56,7 @@ #define IDD_METASELECT 151 #define IDD_METAEDIT 152 #define IDD_METAOPTIONS 153 +#define IDI_EYE 154 #define IDI_DND 158 #define IDI_OCCUPIED 159 #define IDI_USERDETAILS 160 @@ -367,6 +368,7 @@ #define IDC_TRANSFERCOMPLETED 1214 #define IDC_LANG 1215 #define IDC_USERPASS 1216 +#define IDC_LANG2 1216 #define IDC_ALLFILESPROGRESS 1217 #define IDC_WHITERECT 1220 #define IDC_ALLSPEED 1221 @@ -598,6 +600,7 @@ #define IDC_OFFLINE_AUTO 1756 #define IDC_OFFLINE_AUTOSIZE 1757 #define IDC_OFFLINE_AUTOSIZE_SPIN 1758 +#define IDC_SHOWPASSWORD 1760 #define IDC_EFFECT_COLOUR_TEXT1 1853 #define IDC_EFFECT_COLOUR_SPIN1 1854 #define IDC_EXTRAORDER 1889 @@ -702,9 +705,9 @@ // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 336 +#define _APS_NEXT_RESOURCE_VALUE 338 #define _APS_NEXT_COMMAND_VALUE 40018 -#define _APS_NEXT_CONTROL_VALUE 1759 +#define _APS_NEXT_CONTROL_VALUE 1761 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif -- cgit v1.2.3