summaryrefslogtreecommitdiff
path: root/messages.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'messages.cpp')
-rw-r--r--messages.cpp98
1 files changed, 96 insertions, 2 deletions
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);
+}