summaryrefslogtreecommitdiff
path: root/GnuPG/userinfo.cpp
blob: badda803730486a29f54c5c25a0cfde3603ec054 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include "gnupgplugin.h"

int UserInfoInit(WPARAM wparam, LPARAM lparam)
{
	OPTIONSDIALOGPAGE odp;
	
	ZeroMemory(&odp,sizeof(odp));
	odp.cbSize=sizeof(odp);
	odp.hInstance=dllinstance;
	odp.pszTemplate=(char*)MAKEINTRESOURCE(IDD_USERINFO_DLG);
	odp.pfnDlgProc=UserInfoDialogProcedure;
	odp.pszTitle=Translate(txtgnupgplugin);
	CallService(MS_USERINFO_ADDPAGE,wparam,(LPARAM)&odp);
	
	return 0;
}

BOOL CALLBACK UserInfoDialogProcedure(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam)
{
	char *pos;
	HANDLE hcontact;
	char buffer[keybuffersize];
	char keyuserid[keyuseridsize];
	gpgResult gpgresult;
	DBVARIANT dbv;
	int error;
	
	switch (msg)
	{
    case WM_INITDIALOG:
		TranslateDialogDefault(hdlg);
		
		hcontact=(HANDLE)lparam;
		if (hcontact==NULL)
		{
			ShowWindow(GetDlgItem(hdlg,IDC_KEYRECEIVED_STATIC),SW_HIDE);
			ShowWindow(GetDlgItem(hdlg,IDC_KEYRECEIVED_EDIT),SW_HIDE);
			ShowWindow(GetDlgItem(hdlg,IDC_KEY_EDIT),SW_HIDE);
			ShowWindow(GetDlgItem(hdlg,IDC_IMPORT_BTN),SW_HIDE);
		}
		break;
    case WM_NOTIFY:
		switch (((LPNMHDR)lparam)->code)
		{
        case PSN_INFOCHANGED:
			hcontact=(HANDLE)((PSHNOTIFY *)lparam)->lParam;
			
			error=DBGetContactSetting(hcontact,pluginid,dbkeyuserid,&dbv);
			if (!error) strcpy(keyuserid,dbv.pszVal);
			else strcpy(keyuserid,"");
			DBFreeVariant(&dbv);
			
			if (strlen(keyuserid)!=0)
			{
				pos=getNextPart(buffer,keyuserid,txtidseparator);
				SetDlgItemText(hdlg,IDC_KEYID_EDIT,(LPCTSTR)buffer);
				getLastPart(buffer,pos);
				SetDlgItemText(hdlg,IDC_USERID_EDIT,(LPCTSTR)buffer);
			}
			else
			{
				SetDlgItemText(hdlg,IDC_KEYID_EDIT,(LPCTSTR)Translate(txtnone));
				EnableWindow(GetDlgItem(hdlg,IDC_KEYID_EDIT),FALSE);
				SetDlgItemText(hdlg,IDC_USERID_EDIT,(LPCTSTR)Translate(txtnone));
				EnableWindow(GetDlgItem(hdlg,IDC_USERID_EDIT),FALSE);
			}
			
			error=DBGetContactSetting(hcontact,pluginid,dbkeymodified,&dbv);
			if (!error) strcpy(buffer,dbv.pszVal);
			else strcpy(buffer,"");
			DBFreeVariant(&dbv);
			if (strlen(buffer)==0)
			{
				SetDlgItemText(hdlg,IDC_KEYRECEIVED_EDIT,(LPCTSTR)Translate(txtnone));
				EnableWindow(GetDlgItem(hdlg,IDC_KEYRECEIVED_EDIT),FALSE);
			}
			else SetDlgItemText(hdlg,IDC_KEYRECEIVED_EDIT,(LPCTSTR)buffer);
			
			error=DBGetContactSetting(hcontact,pluginid,dbkey,&dbv);
			if (!error) strcpy(buffer,dbv.pszVal);
			else strcpy(buffer,"");
			DBFreeVariant(&dbv);
			
			SetDlgItemText(hdlg,IDC_KEY_EDIT,(LPCTSTR)buffer);
			if (strlen(buffer)==0)
				EnableWindow(GetDlgItem(hdlg,IDC_IMPORT_BTN),FALSE);
			break;
		}
		break;
		case WM_COMMAND:
			switch (LOWORD(wparam))
			{
			case IDC_IMPORT_BTN:
				GetDlgItemText(hdlg,IDC_KEY_EDIT,(LPTSTR)buffer,sizeof(buffer));
				gpgresult=gpgImportPublicKey(buffer);
				
				if (gpgresult!=gpgSuccess)
					ErrorMessage(txterror,txtimportpublickeyfailed,txtverifyoptions);
				break;
			}
			break;
	}
	return 0;
}