From de218850223808a480c092ced92e3097ae553728 Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Tue, 17 Aug 2010 18:58:54 +0300 Subject: modified: init.cpp modified: main.cpp modified: messages.cpp modified: new_gpg.rc modified: resource.h --- messages.cpp | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 96 insertions(+), 2 deletions(-) (limited to 'messages.cpp') diff --git a/messages.cpp b/messages.cpp index 5c1159a..5208ffb 100644 --- a/messages.cpp +++ b/messages.cpp @@ -102,9 +102,11 @@ int RecvMsgSvc(WPARAM w, LPARAM l) mir_free(tmp); f.close(); { + extern TCHAR *password; string out; DWORD code; wstring cmd; + cmd += _T("--batch "); { TCHAR *tmp = UniGetContactSettingUtf(NULL, szGPGModuleName, "szKeyPassword", _T("")); if(_tcslen(tmp) > 0) @@ -113,6 +115,12 @@ int RecvMsgSvc(WPARAM w, LPARAM l) cmd += tmp; cmd += _T("\" "); } + else if(password) + { + cmd += _T("--passphrase \""); + cmd += password; + cmd += _T("\" "); + } mir_free(tmp); } cmd += _T("--output \""); @@ -128,7 +136,25 @@ int RecvMsgSvc(WPARAM w, LPARAM l) DeleteFile(path.c_str()); return CallService(MS_PROTO_CHAINRECV, w, l); } - //MessageBoxA(0, out.c_str(), "out", MB_OK); + if(out.find("public key decryption failed: bad passphrase") != string::npos) + { + void ShowLoadKeyPasswordWindow(); + ShowLoadKeyPasswordWindow(); + if(password) + { + wstring tmp = _T("--passphrase \""); + tmp += password; + tmp += _T("\" "); + cmd.insert(0, tmp); + } + } + out.clear(); + if(pxExecute(&cmd, "", &out, &code) == pxNotFound) + { + MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK); + DeleteFile(path.c_str()); + return CallService(MS_PROTO_CHAINRECV, w, l); + } { wstring tmp = tmp2; tmp += _T("\\decrypted_data"); @@ -333,4 +359,72 @@ int HookSendMsg(WPARAM w, LPARAM l) int TestHook(WPARAM w, LPARAM l) { return 0; -} \ No newline at end of file +} + + +static BOOL CALLBACK DlgProcKeyPassword(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + TCHAR *tmp = NULL; + switch (msg) + { + case WM_INITDIALOG: + { + TranslateDialogDefault(hwndDlg); + return TRUE; + } + + + case WM_COMMAND: + { + switch (LOWORD(wParam)) + { + case IDOK: + { + TCHAR tmp[64]; + GetDlgItemText(hwndDlg, IDC_KEY_PASSWORD, tmp, 64); + if(_tcslen(tmp) > 0) + { + extern TCHAR *password; + if(IsDlgButtonChecked(hwndDlg, IDC_SAVE_PASSWORD)) + DBWriteContactSettingTString(NULL, szGPGModuleName, "szKeyPassword", tmp); + if(password) + delete [] password; + password = new TCHAR [_tcslen(tmp)+1]; + _tcscpy(password, tmp); + } + mir_free(tmp); + DestroyWindow(hwndDlg); + break; + } + case IDCANCEL: + DestroyWindow(hwndDlg); + break; + default: + break; + } + + break; + } + + case WM_NOTIFY: + { + switch (((LPNMHDR)lParam)->code) + { + } + } + break; + case WM_CLOSE: + DestroyWindow(hwndDlg); + break; + case WM_DESTROY: + break; + + } + return FALSE; +} + +void ShowLoadKeyPasswordWindow() +{ + extern HINSTANCE hInst; + DialogBox(hInst, MAKEINTRESOURCE(IDD_KEY_PASSWD), NULL, DlgProcKeyPassword); +} -- cgit v1.2.3