1 /* ****************************************************************************
2
3 * eID Middleware Project.
4 * Copyright (C) 2008-2010 FedICT.
5 *
6 * This is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU Lesser General Public License version
8 * 3.0 as published by the Free Software Foundation.
9 *
10 * This software is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this software; if not, see
17 * http://www.gnu.org/licenses/.
18
19 **************************************************************************** */
20 #include "globmdrv.h"
21
22 #include "log.h"
23 #include "smartcard.h"
24 #include "externalpinui.h"
25 #include <commctrl.h>
26
27 // Callback function used by taskdialog
TaskDialogCallbackProcPinEntry(HWND hwnd,UINT uNotification,WPARAM wParam,LPARAM lParam,LONG_PTR dwRefData)28 HRESULT CALLBACK TaskDialogCallbackProcPinEntry( HWND hwnd, UINT uNotification, WPARAM wParam, LPARAM lParam, LONG_PTR dwRefData)
29 {
30 #ifndef NO_DIALOGS
31 PEXTERNAL_PIN_INFORMATION pExternalPinInfo;
32 LRESULT lResult;
33
34 if (dwRefData != 0)
35 {
36 pExternalPinInfo = (PEXTERNAL_PIN_INFORMATION)dwRefData;
37 if (pExternalPinInfo->cardState != CS_PINENTRY)
38 {
39 // Dialog should close when pin entry stopped.
40 SendMessage(hwnd, WM_CLOSE, 0, 0);
41 return S_OK;
42 }
43 switch (uNotification)
44 {
45 case (TDN_TIMER) :
46 // progress bar 30 seconds.
47 SendMessage(hwnd, TDM_SET_PROGRESS_BAR_POS, wParam / 300, 0L);
48 break;
49 case (TDN_BUTTON_CLICKED) :
50 if ((int)wParam == IDCANCEL) {
51 if (pExternalPinInfo->cardState == CS_PINENTRY && pExternalPinInfo->uiState == US_PINENTRY) {
52 lResult = SendMessage(hwnd, TDM_SET_ELEMENT_TEXT, TDE_CONTENT, (LPARAM)t[CANCEL_CONTENT][getLanguage()]);
53 lResult = SendMessage(hwnd, TDM_SET_ELEMENT_TEXT, TDE_MAIN_INSTRUCTION, (LPARAM)t[CANCEL_MAININSTRUCTIONS][getLanguage()]);
54 lResult = SendMessage(hwnd, TDM_UPDATE_ICON, TDIE_ICON_MAIN, (LPARAM)MAKEINTRESOURCE(TD_WARNING_ICON));
55 pExternalPinInfo->uiState = US_PINCANCEL;
56 }
57 return S_FALSE;
58 }
59 break;
60 default:
61 break;
62 }
63 }
64 #endif
65 return S_OK;
66 }
67
68 // thread function called to show External PIN entry dialog box
DialogThreadPinEntry(LPVOID lpParam)69 DWORD WINAPI DialogThreadPinEntry(LPVOID lpParam)
70 {
71 #ifndef NO_DIALOGS
72 TASKDIALOGCONFIG tc = { 0 };
73
74 int nButtonPressed = 0;
75 HRESULT hr;
76
77 PEXTERNAL_PIN_INFORMATION pExternalPinInfo = (PEXTERNAL_PIN_INFORMATION) lpParam;
78
79 tc.hwndParent = pExternalPinInfo->hwndParentWindow;
80 tc.hInstance = GetModuleHandle(NULL);
81 tc.dwFlags = TDF_ALLOW_DIALOG_CANCELLATION | TDF_SHOW_PROGRESS_BAR | TDF_CALLBACK_TIMER;
82 tc.dwCommonButtons = TDCBF_CANCEL_BUTTON;
83 tc.pszWindowTitle = t[WINDOW_TITLE][getLanguage()];
84 tc.pszMainInstruction = t[ENTER_PIN_MAININSTRUCTIONS][getLanguage()];
85 tc.pszContent = t[ENTER_PIN_CONTENT][getLanguage()];
86 tc.pszVerificationText = NULL;
87 tc.pszFooter = NULL;
88 tc.pszMainIcon = MAKEINTRESOURCE(TD_INFORMATION_ICON);
89 tc.cButtons = 0;
90 tc.pButtons = NULL;
91 tc.cRadioButtons = 0;
92 tc.pRadioButtons = NULL;
93 tc.pfCallback = TaskDialogCallbackProcPinEntry;
94 tc.lpCallbackData = (LONG_PTR)pExternalPinInfo;
95 tc.cbSize = sizeof(tc);
96 //pExternalPinInfo->uiState = US_PINENTRY;
97 hr = TaskDialogIndirect(&tc, &nButtonPressed, NULL, NULL);
98 #endif
99 return 0;
100 }
101
getLanguage()102 LANGUAGES getLanguage() {
103 if ((GetUserDefaultUILanguage() & LANG_ENGLISH) == LANG_ENGLISH)
104 return en;
105 if ((GetUserDefaultUILanguage() & LANG_DUTCH) == LANG_DUTCH)
106 return nl;
107 if ((GetUserDefaultUILanguage() & LANG_FRENCH) == LANG_FRENCH)
108 return fr;
109 if ((GetUserDefaultUILanguage() & LANG_GERMAN) == LANG_GERMAN)
110 return de;
111
112 //default language
113 return en;
114 }
115
getLangID()116 USHORT getLangID() {
117 if ((GetUserDefaultUILanguage() & LANG_ENGLISH) == LANG_ENGLISH)
118 return 0x0809;
119 if ((GetUserDefaultUILanguage() & LANG_DUTCH) == LANG_DUTCH)
120 return 0x0813;
121 if ((GetUserDefaultUILanguage() & LANG_FRENCH) == LANG_FRENCH)
122 return 0x080c;
123 if ((GetUserDefaultUILanguage() & LANG_GERMAN) == LANG_GERMAN)
124 return 0x0407;
125
126 //default language
127 return 0x0809;
128 }
129