43 |
#define WINDOWCLASS_SEPARATOR_CHILD "WINPT_SEP_CHILD" |
#define WINDOWCLASS_SEPARATOR_CHILD "WINPT_SEP_CHILD" |
44 |
#define SEPARATOR_HEIGHT 5 |
#define SEPARATOR_HEIGHT 5 |
45 |
|
|
46 |
int treeview_add_item (HWND tree, HTREEITEM parent, const char * text); |
void km_dump_key (gpgme_key_t key); |
47 |
|
|
48 |
|
//int treeview_add_item (HWND tree, HTREEITEM parent, const char * text); |
49 |
|
|
50 |
static subclass_s keylist_proc; |
static subclass_s keylist_proc; |
51 |
static int km_index = -1; |
static int km_index = -1; |
|
static int km_def_pos = 0; |
|
52 |
|
|
53 |
HIMAGELIST glob_imagelist; |
HIMAGELIST glob_imagelist; |
54 |
|
|
81 |
}; |
}; |
82 |
|
|
83 |
|
|
84 |
|
#ifndef VK_F |
85 |
|
#define VK_F 70 |
86 |
|
#endif |
87 |
|
#ifndef VK_A |
88 |
|
#define VK_A 65 |
89 |
|
#endif |
90 |
|
#ifndef VK_C |
91 |
|
#define VK_C 67 |
92 |
|
#endif |
93 |
|
#ifndef VK_P |
94 |
|
#define VK_P 80 |
95 |
|
#endif |
96 |
|
|
97 |
static BOOL CALLBACK |
static BOOL CALLBACK |
98 |
keylist_subclass_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam) |
keylist_subclass_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam) |
99 |
{ |
{ |
100 |
switch (msg) |
struct listview_ctrl_s lv; |
101 |
{ |
|
102 |
|
switch (msg) { |
103 |
case WM_LBUTTONDBLCLK: |
case WM_LBUTTONDBLCLK: |
104 |
send_cmd_id( keylist_proc.dlg, ID_KEYMISC_PROPS ); |
send_cmd_id (keylist_proc.dlg, ID_KEYMISC_PROPS); |
105 |
break; |
break; |
106 |
|
|
107 |
case WM_KEYUP: |
case WM_KEYUP: |
108 |
int virt_key = (int)wparam; |
int virt_key = (int)wparam; |
109 |
if (virt_key == VK_SPACE) |
switch (virt_key) { |
110 |
{ |
case VK_SPACE: |
111 |
send_cmd_id( keylist_proc.dlg, ID_KEYMISC_PROPS ); |
send_cmd_id( keylist_proc.dlg, ID_KEYMISC_PROPS ); |
112 |
break; |
break; |
113 |
} |
|
114 |
if (virt_key == VK_DELETE) |
case VK_DELETE: |
|
{ |
|
115 |
send_cmd_id( keylist_proc.dlg, ID_KEYMISC_DELETE ); |
send_cmd_id( keylist_proc.dlg, ID_KEYMISC_DELETE ); |
116 |
break; |
break; |
117 |
} |
|
118 |
if (virt_key == VK_INSERT) |
case VK_INSERT: |
|
{ |
|
119 |
send_cmd_id (keylist_proc.dlg, ID_KEYMISC_PASTE); |
send_cmd_id (keylist_proc.dlg, ID_KEYMISC_PASTE); |
120 |
break; |
break; |
121 |
|
|
122 |
|
case VK_A: |
123 |
|
if (GetAsyncKeyState (VK_CONTROL)) { |
124 |
|
lv.ctrl = GetDlgItem (keylist_proc.dlg, IDC_KEYMISC_KEYLIST); |
125 |
|
listview_select_all (&lv); |
126 |
|
} |
127 |
|
break; |
128 |
|
|
129 |
|
case VK_C: |
130 |
|
if (GetAsyncKeyState (VK_CONTROL)) { |
131 |
|
lv.ctrl = GetDlgItem (keylist_proc.dlg, IDC_KEYMISC_KEYLIST); |
132 |
|
km_index = listview_get_curr_pos (&lv); |
133 |
|
km_clip_export (keylist_proc.dlg, &lv); |
134 |
|
} |
135 |
|
break; |
136 |
|
|
137 |
|
case VK_P: |
138 |
|
if (GetAsyncKeyState (VK_CONTROL)) { |
139 |
|
km_index = -1; |
140 |
|
km_clip_import (keylist_proc.dlg); |
141 |
|
} |
142 |
|
break; |
143 |
|
|
144 |
|
case VK_F: |
145 |
|
if (GetAsyncKeyState (VK_CONTROL)) { |
146 |
|
lv.ctrl = GetDlgItem (keylist_proc.dlg, IDC_KEYMISC_KEYLIST); |
147 |
|
km_find_key (dlg, &lv); |
148 |
|
} |
149 |
|
break; |
150 |
} |
} |
151 |
break; |
break; |
152 |
} |
} |
206 |
p = get_reg_entry( HKEY_CURRENT_USER, "Software\\WinPT", "KM_Pos_X" ); |
p = get_reg_entry( HKEY_CURRENT_USER, "Software\\WinPT", "KM_Pos_X" ); |
207 |
if( p && !strcmp( p, " " ) ) { |
if( p && !strcmp( p, " " ) ) { |
208 |
free_if_alloc( p ); |
free_if_alloc( p ); |
209 |
center_window( dlg ); |
center_window( dlg, NULL ); |
210 |
return; |
return; |
211 |
} |
} |
212 |
else if( p ) |
else if( p ) |
215 |
p = get_reg_entry( HKEY_CURRENT_USER, "Software\\WinPT", "KM_Pos_Y" ); |
p = get_reg_entry( HKEY_CURRENT_USER, "Software\\WinPT", "KM_Pos_Y" ); |
216 |
if( p && !strcmp( p, " " ) ) { |
if( p && !strcmp( p, " " ) ) { |
217 |
free_if_alloc( p ); |
free_if_alloc( p ); |
218 |
center_window( dlg ); |
center_window( dlg, NULL ); |
219 |
return; |
return; |
220 |
} |
} |
221 |
else if( p ) |
else if( p ) |
222 |
pos_y = atol( p ); |
pos_y = atol( p ); |
223 |
|
|
224 |
if( !pos_y && !pos_x ) { |
if( !pos_y && !pos_x ) { |
225 |
center_window( dlg ); |
center_window( dlg, NULL ); |
226 |
return; |
return; |
227 |
} |
} |
228 |
|
|
339 |
cache = keycache_get_ctx( 1 ); |
cache = keycache_get_ctx( 1 ); |
340 |
if( !cache ) |
if( !cache ) |
341 |
BUG( dlg ); |
BUG( dlg ); |
342 |
keylist_reload( lv, cache, KEYLIST_LIST, GPGME_ATTR_USERID ); |
keylist_reload( lv, cache, KEYLIST_LIST, KEY_SORT_USERID ); |
343 |
km_complete_status_bar (sb, lv, km_def_pos); |
km_complete_status_bar (sb, lv); |
344 |
} |
} |
345 |
} /* do_check_cache */ |
} /* do_check_cache */ |
346 |
|
|
573 |
} |
} |
574 |
|
|
575 |
|
|
576 |
|
static char* |
577 |
|
gen_export_filename (const char *keyid) |
578 |
|
{ |
579 |
|
gpgme_key_t key; |
580 |
|
const char *s; |
581 |
|
char *p; |
582 |
|
|
583 |
|
if (get_pubkey (keyid, &key)) |
584 |
|
return m_strdup (keyid); |
585 |
|
s = key->uids->name; |
586 |
|
if (!s) |
587 |
|
return m_strdup (keyid); |
588 |
|
p = new char[strlen (s) + 8]; |
589 |
|
if (!p) |
590 |
|
BUG (0); |
591 |
|
sprintf (p, "%s.asc", s); |
592 |
|
for (size_t i=0; i < strlen (p); i++) { |
593 |
|
if (p[i] == ' ' || p[i] == ':' || p[i] == '?' || p[i] == '|') |
594 |
|
p[i] = '_'; |
595 |
|
} |
596 |
|
return p; |
597 |
|
} |
598 |
|
|
599 |
|
|
600 |
|
static void |
601 |
|
update_key (listview_ctrl_t lv, int pos, const char *keyid, int keypair) |
602 |
|
{ |
603 |
|
gpgme_key_t key; |
604 |
|
|
605 |
|
keycache_update (0, keyid); |
606 |
|
if (keypair) |
607 |
|
keycache_update (1, keyid); |
608 |
|
|
609 |
|
/* because we replaced the key item, we need to update the |
610 |
|
address of the pointer in the ListView control. */ |
611 |
|
get_pubkey (keyid, &key); |
612 |
|
keylist_upd_key (lv, pos, key); |
613 |
|
} |
614 |
|
|
615 |
|
|
616 |
|
|
617 |
BOOL CALLBACK |
BOOL CALLBACK |
618 |
keymanager_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam) |
keymanager_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam) |
619 |
{ |
{ |
625 |
HWND kl; |
HWND kl; |
626 |
HMENU hm; |
HMENU hm; |
627 |
gpgme_keycache_t c; |
gpgme_keycache_t c; |
628 |
gpgme_key_t pk; |
gpgme_key_t key; |
629 |
km_group_cb_s gcb; |
/*km_group_cb_s gcb; XXX */ |
630 |
struct genkey_s genkey; |
struct genkey_s genkey; |
631 |
struct winpt_key_s k = {0}; |
struct winpt_key_s k = {0}; |
632 |
struct URL_ctx_s *url; |
struct URL_ctx_s *url; |
633 |
refresh_cache_s rcs = {0}; |
refresh_cache_s rcs = {0}; |
634 |
char keyid[48], uid[128], type[32], * q; |
char keyid[48], uid[128], type[32], * name; |
635 |
const char *t, * host; |
const char *t, * host; |
636 |
u16 port = 0; |
u16 port = 0; |
637 |
int idx = 0, i=0, rc; |
int idx = 0, i=0, rc; |
683 |
c = keycache_get_ctx( KEYCACHE_PUB ); |
c = keycache_get_ctx( KEYCACHE_PUB ); |
684 |
if( !c ) |
if( !c ) |
685 |
BUG( NULL ); |
BUG( NULL ); |
686 |
kmi->keylist_sortby = GPGME_ATTR_USERID; |
kmi->keylist_sortby = KEY_SORT_USERID; |
687 |
Header_SetImageList(ListView_GetHeader(GetDlgItem( dlg, IDC_KEYMISC_KEYLIST )), |
Header_SetImageList(ListView_GetHeader(GetDlgItem( dlg, IDC_KEYMISC_KEYLIST )), |
688 |
glob_imagelist); |
glob_imagelist); |
689 |
kmi->lv = keylist_load( GetDlgItem( dlg, IDC_KEYMISC_KEYLIST ), c, |
kmi->lv = keylist_load( GetDlgItem( dlg, IDC_KEYMISC_KEYLIST ), c, |
699 |
BUG( NULL ); |
BUG( NULL ); |
700 |
} |
} |
701 |
} |
} |
702 |
|
#if 0 |
703 |
km_groups_new( &gc, GetDlgItem( dlg, IDC_KEYMISC_GROUP ) ); |
km_groups_new( &gc, GetDlgItem( dlg, IDC_KEYMISC_GROUP ) ); |
704 |
km_groups_load( gc ); |
km_groups_load( gc ); |
705 |
|
#endif |
706 |
SetForegroundWindow( dlg ); |
SetForegroundWindow( dlg ); |
707 |
|
|
708 |
|
int partpos[3]; |
709 |
|
RECT r; |
710 |
|
|
711 |
kmi->statbar = CreateStatusWindow( WS_CHILD | WS_VISIBLE | CCS_BOTTOM, "status bar", dlg, 100000 ); |
GetClientRect (dlg, &r); |
712 |
ShowWindow( kmi->statbar, SW_SHOW ); |
for (i=1; i <= 3; i++) |
713 |
km_update_default_key_str (kmi->statbar, &km_def_pos); |
partpos[i-1] = r.right/3*i; |
714 |
km_complete_status_bar( kmi->statbar, kmi->lv, km_def_pos ); |
kmi->statbar = CreateStatusWindow (WS_CHILD | WS_VISIBLE | CCS_BOTTOM, |
715 |
|
"status bar", dlg, 100000); |
716 |
|
ShowWindow (kmi->statbar, SW_SHOW); |
717 |
|
SendMessage (kmi->statbar, SB_SETPARTS, (WPARAM)3, (LPARAM)partpos); |
718 |
|
|
719 |
|
km_update_default_key_str (kmi->statbar); |
720 |
|
km_complete_status_bar( kmi->statbar, kmi->lv); |
721 |
|
|
722 |
SetWindowLong (dlg, GWL_USERDATA, (LONG)kmi); |
SetWindowLong (dlg, GWL_USERDATA, (LONG)kmi); |
723 |
kmi->toolbar = load_toolbar (dlg, kmi); |
kmi->toolbar = load_toolbar (dlg, kmi); |
731 |
if (kmi->lv) { |
if (kmi->lv) { |
732 |
keylist_delete (kmi->lv); |
keylist_delete (kmi->lv); |
733 |
kmi->lv = NULL; |
kmi->lv = NULL; |
734 |
|
|
735 |
|
/* |
736 |
if (gc) { |
if (gc) { |
737 |
km_groups_release (gc); |
km_groups_release (gc); |
738 |
gc = NULL; |
gc = NULL; |
739 |
} |
}*/ |
740 |
imagelist_destroy (); |
imagelist_destroy (); |
741 |
|
|
742 |
char buf[32]; |
char buf[32]; |
856 |
break; |
break; |
857 |
|
|
858 |
case NM_RCLICK: |
case NM_RCLICK: |
859 |
if (notify->idFrom == IDC_KEYMISC_KEYLIST) |
if (notify->idFrom == IDC_KEYMISC_KEYLIST) { |
|
{ |
|
860 |
if (listview_get_curr_pos (kmi->lv) == -1) |
if (listview_get_curr_pos (kmi->lv) == -1) |
861 |
return TRUE; /* Popup only when a item was selected */ |
return TRUE; /* Popup only when a item was selected */ |
862 |
do_check_cache (kmi->lv, dlg, kmi->statbar); |
do_check_cache (kmi->lv, dlg, kmi->statbar); |
870 |
set_menu_text( popup, ID_KEYCTX_RECVFROM, _("Refresh from Keyserver") ); |
set_menu_text( popup, ID_KEYCTX_RECVFROM, _("Refresh from Keyserver") ); |
871 |
#endif |
#endif |
872 |
idx = listview_get_curr_pos (kmi->lv); |
idx = listview_get_curr_pos (kmi->lv); |
873 |
if (km_check_for_seckey (kmi->lv, idx, &i) && i == 0) { |
if (km_check_for_seckey (kmi->lv, idx, &i)) |
874 |
set_menu_state (popup, ID_KEYCTX_SETDEFKEY, MF_ENABLED); |
set_menu_state (popup, ID_KEYCTX_SETDEFKEY, MF_ENABLED); |
875 |
|
if (i == 0) |
876 |
set_menu_state (popup, ID_KEYCTX_MAXTRUST, MF_ENABLED); |
set_menu_state (popup, ID_KEYCTX_MAXTRUST, MF_ENABLED); |
|
} |
|
877 |
if (!km_check_for_seckey (kmi->lv, idx, NULL)) { |
if (!km_check_for_seckey (kmi->lv, idx, NULL)) { |
878 |
set_menu_state( popup, ID_KEYCTX_REV, MF_DISABLED|MF_GRAYED ); |
set_menu_state( popup, ID_KEYCTX_REV, MF_DISABLED|MF_GRAYED ); |
879 |
set_menu_state( popup, ID_KEYCTX_ADDKEY, MF_DISABLED|MF_GRAYED ); |
set_menu_state( popup, ID_KEYCTX_ADDKEY, MF_DISABLED|MF_GRAYED ); |
897 |
set_menu_state( popup, ID_KEYCTX_ENABLE, MF_DISABLED|MF_GRAYED ); |
set_menu_state( popup, ID_KEYCTX_ENABLE, MF_DISABLED|MF_GRAYED ); |
898 |
if (km_get_key_status (kmi->lv, idx) & KM_FLAG_REVOKED) |
if (km_get_key_status (kmi->lv, idx) & KM_FLAG_REVOKED) |
899 |
set_menu_state (popup, ID_KEYCTX_SIGN, MF_DISABLED|MF_GRAYED); |
set_menu_state (popup, ID_KEYCTX_SIGN, MF_DISABLED|MF_GRAYED); |
900 |
if( mapi_init() ) |
if (mapi_init()) |
901 |
set_menu_state( popup, ID_KEYCTX_SENDMAIL, MF_DISABLED|MF_GRAYED ); |
set_menu_state (popup, ID_KEYCTX_SENDMAIL, MF_DISABLED|MF_GRAYED); |
902 |
|
/* Override 'Default Keyserver' with the actual name. */ |
903 |
|
host = kserver_get_hostname (0, -1, &port); |
904 |
|
set_menu_text (popup, ID_KEYCTX_KS_DEFAULT, host); |
905 |
popup_gpg_readonly (dlg, popup); |
popup_gpg_readonly (dlg, popup); |
906 |
TrackPopupMenu( popup, TPM_RIGHTALIGN, p.x, p.y, 0, dlg, NULL ); |
TrackPopupMenu (popup, TPM_RIGHTALIGN, p.x, p.y, 0, dlg, NULL); |
907 |
DestroyMenu( popup ); |
DestroyMenu (popup); |
908 |
DestroyMenu( hm ); |
DestroyMenu (hm); |
909 |
return TRUE; |
return TRUE; |
910 |
} |
} |
911 |
|
#if 0 /* XXX */ |
912 |
if( notify->idFrom == IDC_KEYMISC_GROUP ) { |
if( notify->idFrom == IDC_KEYMISC_GROUP ) { |
913 |
HWND tree = GetDlgItem( dlg, IDC_KEYMISC_GROUP ); |
HWND tree = GetDlgItem( dlg, IDC_KEYMISC_GROUP ); |
914 |
if( TreeView_GetSelection( tree ) ) { |
if( TreeView_GetSelection( tree ) ) { |
925 |
return TRUE; |
return TRUE; |
926 |
} |
} |
927 |
} |
} |
928 |
|
#endif |
929 |
break; |
break; |
930 |
|
|
931 |
case LVN_COLUMNCLICK: |
case LVN_COLUMNCLICK: |
933 |
NMLISTVIEW * p = (LPNMLISTVIEW) lparam; |
NMLISTVIEW * p = (LPNMLISTVIEW) lparam; |
934 |
int sortby = 0; |
int sortby = 0; |
935 |
switch (p->iSubItem) { |
switch (p->iSubItem) { |
936 |
case 0: sortby = GPGME_ATTR_USERID; break; |
case 0: sortby = KEY_SORT_USERID; break; |
937 |
case 1: sortby = GPGME_ATTR_KEYID; break; |
case 1: sortby = KEY_SORT_KEYID; break; |
938 |
case 2: sortby = GPGME_ATTR_IS_SECRET; break; |
case 2: sortby = KEY_SORT_IS_SECRET; break; |
939 |
case 3: sortby = GPGME_ATTR_LEN; break; |
case 3: sortby = KEY_SORT_LEN; break; |
940 |
case 5: sortby = GPGME_ATTR_VALIDITY; break; |
case 5: sortby = KEY_SORT_VALIDITY; break; |
941 |
case 6: sortby = GPGME_ATTR_OTRUST; break; |
case 6: sortby = KEY_SORT_OTRUST; break; |
942 |
case 7: sortby = GPGME_ATTR_CREATED; break; |
case 7: sortby = KEY_SORT_CREATED; break; |
943 |
case 8: sortby = GPGME_ATTR_ALGO; break; |
case 8: sortby = KEY_SORT_ALGO; break; |
944 |
default: return TRUE; //sortby = GPGME_ATTR_USERID; break; |
default: return TRUE; //sortby = KEY_SORT_USERID; break; |
945 |
} |
} |
946 |
|
|
947 |
if ((kmi->keylist_sortby & ~KEYLIST_SORT_DESC) == sortby) |
if ((kmi->keylist_sortby & ~KEYLIST_SORT_DESC) == sortby) |
991 |
DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_MAIL, GetDesktopWindow (), |
DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_MAIL, GetDesktopWindow (), |
992 |
winpt_mail_proc, NULL); |
winpt_mail_proc, NULL); |
993 |
break; |
break; |
994 |
|
|
995 |
|
case ID_KEYMISC_FIND: |
996 |
|
km_find_key (dlg, kmi->lv); |
997 |
|
break; |
998 |
|
|
999 |
case ID_KEYMISC_DELETE: |
case ID_KEYMISC_DELETE: |
1000 |
if (km_delete_keys (kmi->lv, dlg)) |
if (km_delete_keys (kmi->lv, dlg)) |
1001 |
return FALSE; |
return FALSE; |
|
refresh_keys = 1; |
|
1002 |
return TRUE; |
return TRUE; |
1003 |
|
|
1004 |
case ID_KEYMISC_SIGN: |
case ID_KEYMISC_SIGN: |
|
gpgme_key_t key; |
|
|
|
|
1005 |
if ( (idx = listview_get_curr_pos( kmi->lv )) == -1 ) { |
if ( (idx = listview_get_curr_pos( kmi->lv )) == -1 ) { |
1006 |
msg_box( dlg, _("Please select a key."), _("Key Manager"), |
msg_box( dlg, _("Please select a key."), _("Key Manager"), |
1007 |
MB_ERR ); |
MB_ERR ); |
1008 |
return FALSE; |
return FALSE; |
1009 |
} |
} |
1010 |
if( !km_check_key_status( kmi->lv, idx ) ) |
if (km_check_key_status (kmi->lv, idx)) |
1011 |
return FALSE; |
return FALSE; |
1012 |
listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid ); |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, idx); |
1013 |
listview_get_item_text( kmi->lv, idx, 2, type, sizeof type -1 ); |
listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1); |
1014 |
rc = get_pubkey( keyid, &key ); |
memset (&k, 0, sizeof (k)); |
1015 |
if( rc ) |
k.ctx = key; |
1016 |
BUG( dlg ); |
k.keyid = keyid; |
1017 |
if( key ) |
dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYSIGN, dlg, |
1018 |
dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYSIGN, dlg, |
keysign_dlg_proc, (LPARAM)&k, |
1019 |
keysign_dlg_proc, (LPARAM)key, |
_("Key Signing"), IDS_WINPT_KEYSIGN); |
1020 |
_("Key Signing"), IDS_WINPT_KEYSIGN); |
if (k.update) |
1021 |
|
update_key (kmi->lv, idx, k.keyid, 0); |
1022 |
return TRUE; |
return TRUE; |
1023 |
|
|
1024 |
case ID_KEYMISC_REVCERT: |
case ID_KEYMISC_REVCERT: |
1043 |
} |
} |
1044 |
} |
} |
1045 |
|
|
1046 |
q = km_quote_uid (uid); |
name = km_quote_uid (uid); |
1047 |
memset (&k, 0, sizeof (k)); |
memset (&k, 0, sizeof (k)); |
1048 |
k.key_pair = 1; |
k.key_pair = 1; |
1049 |
k.keyid = keyid; |
k.keyid = keyid; |
1050 |
k.uid = q; |
k.uid = name; |
1051 |
k.is_protected = km_check_if_protected( kmi->lv, idx ); |
k.is_protected = km_check_if_protected( kmi->lv, idx ); |
1052 |
dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYREVOKE, dlg, |
dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYREVOKE, dlg, |
1053 |
key_revoke_dlg_proc, (LPARAM)&k, |
key_revoke_dlg_proc, (LPARAM)&k, |
1054 |
_("Key Revocation"), IDS_WINPT_KEYREVOKE ); |
_("Key Revocation"), IDS_WINPT_KEYREVOKE ); |
1055 |
free_if_alloc( q ); |
free_if_alloc (name); |
1056 |
return TRUE; |
return TRUE; |
1057 |
|
|
1058 |
case ID_KEYMISC_TRUSTPATH: |
case ID_KEYMISC_TRUSTPATH: |
1076 |
return TRUE; |
return TRUE; |
1077 |
|
|
1078 |
case ID_KEYMISC_CHECKSIGS: |
case ID_KEYMISC_CHECKSIGS: |
1079 |
idx = listview_get_curr_pos( kmi->lv ); |
idx = listview_get_curr_pos (kmi->lv); |
1080 |
if( idx == -1 ) { |
if( idx == -1 ) { |
1081 |
msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR ); |
msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR ); |
1082 |
return FALSE; |
return FALSE; |
1086 |
memset (&k, 0, sizeof (k)); |
memset (&k, 0, sizeof (k)); |
1087 |
k.keyid = keyid; |
k.keyid = keyid; |
1088 |
k.uid = uid; |
k.uid = uid; |
1089 |
|
k.ctx = (gpgme_key_t)listview_get_item2 (kmi->lv, idx); |
1090 |
dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYSIG, dlg, |
dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYSIG, dlg, |
1091 |
keysig_dlg_proc, (LPARAM)&k, |
keysig_dlg_proc, (LPARAM)&k, |
1092 |
_("Key Signature List" ), IDS_WINPT_KEYSIG); |
_("Key Signature List" ), IDS_WINPT_KEYSIG); |
1098 |
msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR ); |
msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR ); |
1099 |
return FALSE; |
return FALSE; |
1100 |
} |
} |
1101 |
listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid -1 ); |
listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1); |
1102 |
listview_get_item_text( kmi->lv, idx, 2, type, sizeof type -1 ); |
listview_get_item_text (kmi->lv, idx, 2, type, DIM (type)-1); |
1103 |
memset (&k, 0, sizeof (k)); |
memset (&k, 0, sizeof (k)); |
1104 |
k.key_pair = 0; |
k.key_pair = 0; |
1105 |
k.keyid = keyid; |
k.keyid = keyid; |
1107 |
k.key_pair = 1; |
k.key_pair = 1; |
1108 |
k.callback.ctl = kmi->lv; |
k.callback.ctl = kmi->lv; |
1109 |
k.callback.idx = idx; |
k.callback.idx = idx; |
1110 |
|
k.is_v3 = km_key_is_v3 (kmi->lv, idx); |
1111 |
dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYPROPS, dlg, |
dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYPROPS, dlg, |
1112 |
keyprops_dlg_proc, (LPARAM)&k, |
keyprops_dlg_proc, (LPARAM)&k, |
1113 |
_("Key Properties"), IDS_WINPT_KEYPROPS ); |
_("Key Properties"), IDS_WINPT_KEYPROPS ); |
1114 |
if (k.callback.new_val != 0) |
if (k.callback.new_val != 0) { |
|
{ |
|
1115 |
t = get_key_trust_str (k.callback.new_val); |
t = get_key_trust_str (k.callback.new_val); |
1116 |
listview_add_sub_item (kmi->lv, idx, 6, t); |
listview_add_sub_item (kmi->lv, idx, 6, t); |
1117 |
} |
} |
1137 |
c = keycache_get_ctx( 1 ); |
c = keycache_get_ctx( 1 ); |
1138 |
if( !c ) |
if( !c ) |
1139 |
BUG( dlg ); |
BUG( dlg ); |
1140 |
keylist_reload( kmi->lv, c, KEYLIST_LIST, GPGME_ATTR_USERID ); |
keylist_reload( kmi->lv, c, KEYLIST_LIST, KEY_SORT_USERID ); |
1141 |
refresh_keys = 0; |
refresh_keys = 0; |
1142 |
} |
} |
1143 |
return TRUE; |
return TRUE; |
1144 |
|
|
1145 |
case ID_KEYMISC_REBUILD: |
case ID_KEYMISC_REBUILD: |
1146 |
rcs.kr_reload = rcs.kr_update = 1; |
rcs.kr_reload = rcs.kr_update = 0; |
1147 |
rcs.tr_update = 1; |
rcs.tr_update = 1; |
1148 |
DialogBoxParam( glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, dlg, |
DialogBoxParam( glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, dlg, |
1149 |
keycache_dlg_proc, (LPARAM)&rcs ); |
keycache_dlg_proc, (LPARAM)&rcs ); |
1150 |
c = keycache_get_ctx( 1 ); |
c = keycache_get_ctx( 1 ); |
1151 |
if( !c ) |
if( !c ) |
1152 |
BUG( dlg ); |
BUG( dlg ); |
1153 |
keylist_reload( kmi->lv, c, KEYLIST_LIST, GPGME_ATTR_USERID ); |
keylist_reload( kmi->lv, c, KEYLIST_LIST, KEY_SORT_USERID ); |
1154 |
return TRUE; |
return TRUE; |
1155 |
|
|
1156 |
case ID_KEYMISC_NEWKEY: |
case ID_KEYMISC_NEWKEY: |
1158 |
dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYGEN, dlg, |
dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYGEN, dlg, |
1159 |
keygen_dlg_proc, (LPARAM)&genkey, _("Key Generation"), |
keygen_dlg_proc, (LPARAM)&genkey, _("Key Generation"), |
1160 |
IDS_WINPT_KEYGEN); |
IDS_WINPT_KEYGEN); |
1161 |
if (genkey.newkey) |
if (genkey.newkey != NULL) |
1162 |
keylist_add_key (kmi->lv, KEYLIST_LIST, genkey.newkey); |
keylist_add_key (kmi->lv, KEYLIST_LIST, genkey.newkey); |
1163 |
return TRUE; |
return TRUE; |
1164 |
|
|
1170 |
dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_CARD_KEYGEN, dlg, |
dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_CARD_KEYGEN, dlg, |
1171 |
card_keygen_dlg_proc, NULL, _("Card Key Generation"), |
card_keygen_dlg_proc, NULL, _("Card Key Generation"), |
1172 |
IDS_WINPT_CARD_KEYGEN ); |
IDS_WINPT_CARD_KEYGEN ); |
1173 |
|
/* XXX: use new code */ |
1174 |
if( keycache_get_reload() ) |
if( keycache_get_reload() ) |
1175 |
send_cmd_id( dlg, ID_KEYMISC_RECACHE ); |
send_cmd_id( dlg, ID_KEYMISC_RECACHE ); |
1176 |
return TRUE; |
return TRUE; |
1180 |
dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYWIZARD, dlg, |
dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYWIZARD, dlg, |
1181 |
keygen_wizard_dlg_proc, (LPARAM)&genkey, _("Key Generation Wizard"), |
keygen_wizard_dlg_proc, (LPARAM)&genkey, _("Key Generation Wizard"), |
1182 |
IDS_WINPT_KEYWIZARD); |
IDS_WINPT_KEYWIZARD); |
1183 |
if (genkey.newkey) |
if (genkey.newkey != NULL) |
1184 |
keylist_add_key (kmi->lv, KEYLIST_LIST, genkey.newkey); |
keylist_add_key (kmi->lv, KEYLIST_LIST, genkey.newkey); |
1185 |
return TRUE; |
return TRUE; |
1186 |
|
|
1203 |
return TRUE; |
return TRUE; |
1204 |
|
|
1205 |
case ID_KEYMISC_IMPORT: |
case ID_KEYMISC_IMPORT: |
1206 |
t = get_filename_dlg( dlg, FILE_OPEN, _("Choose Name of the Key File"), NULL, NULL ); |
t = get_filename_dlg (dlg, FILE_OPEN, _("Choose Name of the Key File"), NULL, NULL); |
1207 |
if( t ) |
if (t) |
1208 |
km_file_import( dlg, t ); |
km_file_import (dlg, t); |
1209 |
return TRUE; |
return TRUE; |
1210 |
|
|
1211 |
case ID_KEYMISC_IMPORT_HTTP: |
case ID_KEYMISC_IMPORT_HTTP: |
1216 |
break; |
break; |
1217 |
|
|
1218 |
case ID_KEYMISC_EXPORT: |
case ID_KEYMISC_EXPORT: |
1219 |
idx = listview_get_curr_pos( kmi->lv ); |
idx = listview_get_curr_pos (kmi->lv); |
1220 |
if( idx == -1 ) { |
if (idx == -1) { |
1221 |
msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR ); |
msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR ); |
1222 |
return FALSE; |
return FALSE; |
1223 |
} |
} |
1224 |
if( listview_count_items( kmi->lv, 1 ) > 1 ) |
if (listview_count_items (kmi->lv, 1) > 1) |
1225 |
strcpy( keyid, _("Exported_GPG_Keys.asc") ); |
name = m_strdup ("Exported_GPG_Keys.asc"); |
1226 |
else { |
else { |
1227 |
listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid-1 ); |
listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1); |
1228 |
strcat( keyid, ".asc" ); |
name = gen_export_filename (keyid); |
1229 |
} |
} |
1230 |
t = get_filename_dlg( dlg, FILE_SAVE, _("Choose Name for Key File"), NULL, keyid ); |
t = get_filename_dlg (dlg, FILE_SAVE, _("Choose Name for Key File"), NULL, name); |
1231 |
if( !t || overwrite_file( t ) == 0 ) |
free_if_alloc (name); |
1232 |
|
if (t != NULL) |
1233 |
return FALSE; |
return FALSE; |
1234 |
km_file_export( dlg, kmi->lv, t ); |
km_file_export (dlg, kmi->lv, t); |
1235 |
return TRUE; |
return TRUE; |
1236 |
|
|
1237 |
case ID_KEYMISC_EXPORT_PRIVKEY: |
case ID_KEYMISC_EXPORT_PRIVKEY: |
1259 |
if( idx == IDYES ) { |
if( idx == IDYES ) { |
1260 |
idx = listview_get_curr_pos( kmi->lv ); |
idx = listview_get_curr_pos( kmi->lv ); |
1261 |
listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof (keyid)-8 ); |
listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof (keyid)-8 ); |
1262 |
strcat( keyid, ".sec.asc" ); |
name = gen_export_filename (keyid); |
1263 |
t = get_filename_dlg( dlg, 1, _("Choose Name for Key File"), NULL, keyid ); |
t = get_filename_dlg (dlg, FILE_SAVE, _("Choose Name for Key File"), NULL, name); |
1264 |
if( t && !file_exist_check( t ) ) { |
if (t != NULL) |
1265 |
idx = log_box( _("Key Manager"), MB_INFO|MB_YESNO, |
km_privkey_export (dlg, kmi->lv, t); |
|
_("File %s already exists.\nOverwrite?"), t ); |
|
|
if( idx == IDNO ) |
|
|
return FALSE; |
|
|
} |
|
|
if( t ) |
|
|
km_privkey_export( dlg, kmi->lv, t ); |
|
1266 |
} |
} |
1267 |
break; |
break; |
1268 |
|
|
1297 |
dialog_box_param (glob_hinst, (LPCTSTR)IDD_WINPT_KEYEDIT, dlg, |
dialog_box_param (glob_hinst, (LPCTSTR)IDD_WINPT_KEYEDIT, dlg, |
1298 |
keyedit_main_dlg_proc, (LPARAM)&k, |
keyedit_main_dlg_proc, (LPARAM)&k, |
1299 |
_("Key Edit"), IDS_KEYCTX_EDIT); |
_("Key Edit"), IDS_KEYCTX_EDIT); |
1300 |
|
if (k.update) |
1301 |
|
update_key (kmi->lv, idx, keyid, 1); |
1302 |
break; |
break; |
1303 |
|
|
|
case ID_GROUP_NEW: |
|
|
memset (&gcb, 0, sizeof (gcb)); |
|
|
gcb.gc = gc; |
|
|
dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_GROUP, glob_hwnd, |
|
|
group_manager_dlg_proc, (LPARAM)&gcb, _("New Group"), |
|
|
IDS_WINPT_GROUP); |
|
|
if( gcb.use_name ) |
|
|
treeview_add_item( GetDlgItem(dlg, IDC_KEYMISC_GROUP), NULL, gcb.name ); |
|
|
return TRUE; |
|
|
|
|
1304 |
case ID_KEYMISC_COPY: |
case ID_KEYMISC_COPY: |
1305 |
km_index = listview_get_curr_pos( kmi->lv ); |
km_index = listview_get_curr_pos (kmi->lv); |
1306 |
km_clip_export( dlg, kmi->lv ); |
km_clip_export (dlg, kmi->lv); |
1307 |
break; |
break; |
1308 |
|
|
1309 |
case ID_KEYMISC_SELALL: |
case ID_KEYMISC_SELALL: |
1356 |
break; |
break; |
1357 |
|
|
1358 |
case ID_KEYCTX_SENDMAIL: |
case ID_KEYCTX_SENDMAIL: |
1359 |
km_send_to_mail_recipient( kmi->lv, dlg ); |
km_send_to_mail_recipient (kmi->lv, dlg); |
1360 |
break; |
break; |
1361 |
|
|
1362 |
case ID_KEYCTX_KS_DEFAULT: |
case ID_KEYCTX_KS_DEFAULT: |
1365 |
break; |
break; |
1366 |
|
|
1367 |
case ID_KEYCTX_ADDKEY: |
case ID_KEYCTX_ADDKEY: |
1368 |
idx = listview_get_curr_pos( kmi->lv ); |
idx = listview_get_curr_pos (kmi->lv); |
1369 |
listview_get_item_text( kmi->lv, idx, 1, keyid, DIM (keyid)-1); |
listview_get_item_text( kmi->lv, idx, 1, keyid, DIM (keyid)-1); |
1370 |
memset (&k, 0, sizeof (k)); |
memset (&k, 0, sizeof (k)); |
1371 |
k.key_pair = km_check_for_seckey( kmi->lv, idx, NULL ); |
k.key_pair = km_check_for_seckey (kmi->lv, idx, NULL); |
1372 |
k.is_protected = km_check_if_protected( kmi->lv, idx ); |
k.is_protected = km_check_if_protected (kmi->lv, idx); |
1373 |
k.keyid = keyid; |
k.keyid = keyid; |
1374 |
keyedit_add_subkey( &k, dlg, NULL ); |
keyedit_add_subkey (&k, dlg, NULL); |
1375 |
|
if (k.update) |
1376 |
|
update_key (kmi->lv, idx, keyid, 1); |
1377 |
break; |
break; |
1378 |
|
|
1379 |
case ID_KEYCTX_ADDUID: |
case ID_KEYCTX_ADDUID: |
1380 |
idx = listview_get_curr_pos( kmi->lv ); |
idx = listview_get_curr_pos (kmi->lv); |
1381 |
listview_get_item_text( kmi->lv, idx, 1, keyid, DIM (keyid)-1); |
listview_get_item_text( kmi->lv, idx, 1, keyid, DIM (keyid)-1); |
1382 |
memset (&k, 0, sizeof (k)); |
memset (&k, 0, sizeof (k)); |
1383 |
k.key_pair = km_check_for_seckey( kmi->lv, idx, NULL ); |
k.key_pair = km_check_for_seckey (kmi->lv, idx, NULL); |
1384 |
k.is_protected = km_check_if_protected( kmi->lv, idx ); |
k.is_protected = km_check_if_protected (kmi->lv, idx); |
1385 |
k.keyid = keyid; |
k.keyid = keyid; |
1386 |
keyedit_add_userid( &k, dlg, NULL ); |
keyedit_add_userid (&k, dlg, NULL); |
1387 |
|
if (k.update) |
1388 |
|
update_key (kmi->lv, idx, keyid, 1); |
1389 |
break; |
break; |
1390 |
|
|
1391 |
case ID_KEYCTX_ADDREV: |
case ID_KEYCTX_ADDREV: |
1393 |
listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1); |
listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1); |
1394 |
memset (&k, 0, sizeof (k)); |
memset (&k, 0, sizeof (k)); |
1395 |
k.keyid = keyid; |
k.keyid = keyid; |
1396 |
k.is_protected = km_check_if_protected( kmi->lv, idx ); |
k.is_protected = km_check_if_protected (kmi->lv, idx); |
1397 |
k.key_pair = km_check_for_seckey( kmi->lv, idx, NULL ); |
k.key_pair = km_check_for_seckey( kmi->lv, idx, NULL ); |
1398 |
keyedit_add_revoker( &k, dlg ); |
keyedit_add_revoker (&k, dlg); |
1399 |
|
if (k.update) |
1400 |
|
update_key (kmi->lv, idx, keyid, 1); |
1401 |
break; |
break; |
1402 |
|
|
1403 |
case ID_KEYCTX_ADDPHOTO: |
case ID_KEYCTX_ADDPHOTO: |
1408 |
k.is_protected = km_check_if_protected (kmi->lv, idx); |
k.is_protected = km_check_if_protected (kmi->lv, idx); |
1409 |
k.key_pair = km_check_for_seckey (kmi->lv, idx, NULL); |
k.key_pair = km_check_for_seckey (kmi->lv, idx, NULL); |
1410 |
keyedit_add_photo (&k, dlg); |
keyedit_add_photo (&k, dlg); |
1411 |
|
if (k.update) |
1412 |
|
update_key (kmi->lv, idx, keyid, 1); |
1413 |
break; |
break; |
1414 |
|
|
1415 |
case ID_KEYCTX_KS_NL: |
case ID_KEYCTX_KS_NL: |
1444 |
|
|
1445 |
case ID_KEYCTX_FPR_COPY: |
case ID_KEYCTX_FPR_COPY: |
1446 |
idx = listview_get_curr_pos( kmi->lv ); |
idx = listview_get_curr_pos( kmi->lv ); |
1447 |
listview_get_item_text( kmi->lv, idx, 1, uid, sizeof uid-1 ); |
key = (gpgme_key_t) listview_get_item2 (kmi->lv, idx); |
1448 |
get_pubkey( uid, &pk ); |
if (key) { |
1449 |
if( pk ) { |
const char * s = get_key_fpr (key); |
1450 |
const char * s = get_key_fpr( pk ); |
set_clip_text (NULL, s? s : "", s? strlen (s): 0); |
|
set_clip_text( NULL, s? s : "", s? strlen( s ): 0 ); |
|
1451 |
} |
} |
1452 |
break; |
break; |
1453 |
|
|
1483 |
|
|
1484 |
case ID_KEYCTX_MAXTRUST: |
case ID_KEYCTX_MAXTRUST: |
1485 |
idx = listview_get_curr_pos (kmi->lv); |
idx = listview_get_curr_pos (kmi->lv); |
1486 |
km_set_implicit_trust (dlg, kmi->lv, idx); |
listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1); |
1487 |
|
rc = km_set_implicit_trust (dlg, kmi->lv, idx); |
1488 |
|
if (!rc) |
1489 |
|
update_key (kmi->lv, idx, keyid, 0); |
1490 |
break; |
break; |
1491 |
|
|
1492 |
case ID_KEYCTX_SETDEFKEY: |
case ID_KEYCTX_SETDEFKEY: |
1493 |
idx = listview_get_curr_pos (kmi->lv); |
idx = listview_get_curr_pos (kmi->lv); |
1494 |
if (km_check_key_status (kmi->lv, idx)) |
if (!km_check_key_status (kmi->lv, idx)) { |
1495 |
{ |
listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1); |
|
listview_get_item_text (kmi->lv, idx, 1, keyid, sizeof keyid -1); |
|
1496 |
rc = set_gnupg_default_key (keyid); |
rc = set_gnupg_default_key (keyid); |
1497 |
if (rc) |
if (rc) |
1498 |
msg_box( dlg, winpt_strerror (rc), _("Key Manager"), MB_ERR); |
msg_box( dlg, winpt_strerror (rc), _("Key Manager"), MB_ERR); |
1499 |
km_update_default_key_str (kmi->statbar, &km_def_pos); |
km_update_default_key_str (kmi->statbar); |
1500 |
} |
} |
1501 |
break; |
break; |
1502 |
|
|
1503 |
|
#if 0 /* XXX */ |
1504 |
|
case ID_GROUP_NEW: |
1505 |
|
memset (&gcb, 0, sizeof (gcb)); |
1506 |
|
gcb.gc = gc; |
1507 |
|
dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_GROUP, glob_hwnd, |
1508 |
|
group_manager_dlg_proc, (LPARAM)&gcb, _("New Group"), |
1509 |
|
IDS_WINPT_GROUP); |
1510 |
|
if( gcb.use_name ) |
1511 |
|
treeview_add_item( GetDlgItem(dlg, IDC_KEYMISC_GROUP), NULL, gcb.name ); |
1512 |
|
return TRUE; |
1513 |
|
|
1514 |
case ID_GROUP_PASTE: |
case ID_GROUP_PASTE: |
1515 |
km_groups_add (gc, kmi->lv, km_index); |
km_groups_add (gc, kmi->lv, km_index); |
1518 |
case ID_GROUP_DELETE: |
case ID_GROUP_DELETE: |
1519 |
km_groups_del (gc); |
km_groups_del (gc); |
1520 |
break; |
break; |
1521 |
} |
#endif |
1522 |
|
} |
1523 |
|
|
1524 |
break; |
break; |
1525 |
} |
} |
1526 |
|
|