summaryrefslogtreecommitdiff
path: root/src/mir_app
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2023-11-13 18:42:14 +0300
committerGeorge Hazan <george.hazan@gmail.com>2023-11-13 18:42:14 +0300
commit2f8ead5c2de8b30272f6d47b4402957a97f3c106 (patch)
tree7c64a78d1c834f691b66eed3e9699aeb2d9fbb6c /src/mir_app
parent30e12f4262ffd8e7c359d0b327d9c286f6492f7a (diff)
fixes #3835 (Шифрование базы: разрешить показ вводимых символов)
Diffstat (limited to 'src/mir_app')
-rw-r--r--src/mir_app/res/eye.icobin0 -> 894 bytes
-rw-r--r--src/mir_app/res/resource.rc41
-rw-r--r--src/mir_app/src/MDatabaseCommonCrypt.cpp191
-rw-r--r--src/mir_app/src/resource.h7
4 files changed, 149 insertions, 90 deletions
diff --git a/src/mir_app/res/eye.ico b/src/mir_app/res/eye.ico
new file mode 100644
index 0000000000..c996bb179f
--- /dev/null
+++ b/src/mir_app/res/eye.ico
Binary files 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 <windows.h>
#include <winres.h>
#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 <windows.h>\r\n"
"#include <winres.h>\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