1 /***************************************************************************
2 begin : Tue Jun 03 2018
3 copyright : (C) 2018 by Martin Preuss
4 email : martin@libchipcard.de
5
6 ***************************************************************************
7 * Please see toplevel file COPYING for license details *
8 ***************************************************************************/
9
10 #ifdef HAVE_CONFIG_H
11 # include <config.h>
12 #endif
13
14 #include "provider_dialogs.h"
15 #include "aqhbci/banking/provider.h"
16 #include "aqhbci/banking/user.h"
17
18
19 #include "dlg_edituserpintan_l.h"
20 #include "dlg_edituserddv_l.h"
21 #include "dlg_edituserrdh_l.h"
22 #include "dlg_editaccount_l.h"
23 #include "dlg_newuser_l.h"
24 #include "dlg_ddvcard_l.h"
25 #include "dlg_zkacard_l.h"
26 #include "dlg_pintan_l.h"
27 #include "dlg_newkeyfile_l.h"
28 #include "dlg_importkeyfile_l.h"
29 #include "dlg_choose_usertype_l.h"
30
31 #include <aqbanking/banking_be.h>
32 #include <aqbanking/i18n_l.h>
33
34 #include <gwenhywfar/gui.h>
35
36
37
38
AH_Provider_GetNewCardUserDialog(AB_PROVIDER * pro)39 GWEN_DIALOG *AH_Provider_GetNewCardUserDialog(AB_PROVIDER *pro)
40 {
41 int rv;
42 GWEN_BUFFER *mtypeName;
43 GWEN_BUFFER *mediumName;
44 GWEN_CRYPT_TOKEN *ct;
45 AB_BANKING *ab;
46
47 assert(pro);
48 ab=AB_Provider_GetBanking(pro);
49 assert(ab);
50
51 mtypeName=GWEN_Buffer_new(0, 64, 0, 1);
52 mediumName=GWEN_Buffer_new(0, 64, 0, 1);
53
54 rv=AB_Banking_CheckCryptToken(ab,
55 GWEN_Crypt_Token_Device_Card,
56 mtypeName,
57 mediumName);
58 if (rv<0) {
59 DBG_ERROR(AQHBCI_LOGDOMAIN, "here (%d)", rv);
60 GWEN_Gui_ShowError(I18N("Chipcard Error"),
61 I18N("Error checking chip card (%d).\n"
62 "Maybe libchipcard or its plugins are not installed?"));
63 GWEN_Buffer_free(mediumName);
64 GWEN_Buffer_free(mtypeName);
65 return NULL;
66 }
67
68 rv=AB_Banking_GetCryptToken(AB_Provider_GetBanking(pro),
69 GWEN_Buffer_GetStart(mtypeName),
70 GWEN_Buffer_GetStart(mediumName),
71 &ct);
72 if (rv<0) {
73 DBG_ERROR(AQHBCI_LOGDOMAIN, "here (%d)", rv);
74 GWEN_Buffer_free(mediumName);
75 GWEN_Buffer_free(mtypeName);
76 return NULL;
77 }
78
79 if (strcasecmp(GWEN_Buffer_GetStart(mtypeName), "ddvcard")==0) {
80 GWEN_DIALOG *dlg2;
81
82 DBG_WARN(0, "DDV card");
83 dlg2=AH_DdvCardDialog_new(pro, ct);
84 if (dlg2==NULL) {
85 DBG_INFO(AQHBCI_LOGDOMAIN, "here (no dialog)");
86 GWEN_Buffer_free(mediumName);
87 GWEN_Buffer_free(mtypeName);
88 return NULL;
89 }
90
91 GWEN_Dialog_SetWidgetText(dlg2, "", I18N("Create HBCI/FinTS DDV User"));
92 GWEN_Buffer_free(mediumName);
93 GWEN_Buffer_free(mtypeName);
94 return dlg2;
95 }
96 else if (strcasecmp(GWEN_Buffer_GetStart(mtypeName), "starcoscard")==0) {
97 DBG_ERROR(AQHBCI_LOGDOMAIN, "STARCOS RSA card currently not supported by this dialog");
98 // TODO
99 }
100 else if (strcasecmp(GWEN_Buffer_GetStart(mtypeName), "zkacard")==0) {
101 GWEN_DIALOG *dlg2;
102
103 DBG_WARN(0, "ZKA RSA card");
104 dlg2=AH_ZkaCardDialog_new(pro, ct);
105 if (dlg2==NULL) {
106 DBG_INFO(AQHBCI_LOGDOMAIN, "here (no dialog)");
107 GWEN_Buffer_free(mediumName);
108 GWEN_Buffer_free(mtypeName);
109 return NULL;
110 }
111
112 GWEN_Dialog_SetWidgetText(dlg2, "", I18N("Create HBCI/FinTS ZKA RSA User"));
113 GWEN_Buffer_free(mediumName);
114 GWEN_Buffer_free(mtypeName);
115 return dlg2;
116 }
117 else {
118 DBG_ERROR(AQHBCI_LOGDOMAIN, "Card type \"%s\" not yet supported",
119 GWEN_Buffer_GetStart(mtypeName));
120 }
121 GWEN_Buffer_free(mediumName);
122 GWEN_Buffer_free(mtypeName);
123 AB_Banking_ClearCryptTokenList(AB_Provider_GetBanking(pro));
124 return NULL;
125 }
126
127
128
AH_Provider_GetEditUserDialog(AB_PROVIDER * pro,AB_USER * u)129 GWEN_DIALOG *AH_Provider_GetEditUserDialog(AB_PROVIDER *pro, AB_USER *u)
130 {
131 GWEN_DIALOG *dlg;
132
133 DBG_ERROR(AQBANKING_LOGDOMAIN, "GetEditUserDialog");
134
135 assert(pro);
136
137 switch (AH_User_GetCryptMode(u)) {
138 case AH_CryptMode_Pintan:
139 dlg=AH_EditUserPinTanDialog_new(pro, u, 1);
140 break;
141 case AH_CryptMode_Ddv:
142 dlg=AH_EditUserDdvDialog_new(pro, u, 1);
143 break;
144 case AH_CryptMode_Rdh:
145 dlg=AH_EditUserRdhDialog_new(pro, u, 1);
146 break;
147 case AH_CryptMode_Rah:
148 dlg=AH_EditUserRdhDialog_new(pro, u, 1);
149 break;
150 default:
151 DBG_ERROR(AQHBCI_LOGDOMAIN, "Unknown crypt mode %d)", AH_User_GetCryptMode(u));
152 dlg=NULL;
153 break;
154 }
155
156 if (dlg==NULL) {
157 DBG_INFO(AQHBCI_LOGDOMAIN, "here (no dialog)");
158 return NULL;
159 }
160
161 return dlg;
162 }
163
164
165
AH_Provider_GetNewUserDialog(AB_PROVIDER * pro,int i)166 GWEN_DIALOG *AH_Provider_GetNewUserDialog(AB_PROVIDER *pro, int i)
167 {
168 GWEN_DIALOG *dlg;
169
170 assert(pro);
171
172 DBG_INFO(AQHBCI_LOGDOMAIN, "Get user dialog %d", i);
173
174 switch (i) {
175 case AqHBCI_NewUserDialog_CodeExistingPinTan:
176 dlg=AH_PinTanDialog_new(pro);
177 break;
178
179 case AqHBCI_NewUserDialog_CodeExistingChipcard:
180 dlg=AH_Provider_GetNewCardUserDialog(pro);
181 break;
182
183 case AqHBCI_NewUserDialog_CodeCreateKeyFile:
184 dlg=AH_NewKeyFileDialog_new(pro);
185 break;
186
187 case AqHBCI_NewUserDialog_CodeExistingKeyFile:
188 dlg=AH_ImportKeyFileDialog_new(pro);
189 break;
190 case AqHBCI_NewUserDialog_CodeCreateChipcard:
191
192 case AqHBCI_NewUserDialog_CodeGeneric:
193 default:
194 dlg=AH_NewUserDialog_new(pro);
195 break;
196 }
197
198 if (dlg==NULL) {
199 DBG_INFO(AQHBCI_LOGDOMAIN, "here (no dialog)");
200 return NULL;
201 }
202
203 return dlg;
204 }
205
206
207
AH_Provider_GetEditAccountDialog(AB_PROVIDER * pro,AB_ACCOUNT * a)208 GWEN_DIALOG *AH_Provider_GetEditAccountDialog(AB_PROVIDER *pro, AB_ACCOUNT *a)
209 {
210 GWEN_DIALOG *dlg;
211
212 assert(pro);
213
214 dlg=AH_EditAccountDialog_new(pro, a, 1);
215 if (dlg==NULL) {
216 DBG_INFO(AQHBCI_LOGDOMAIN, "here (no dialog)");
217 return NULL;
218 }
219
220 return dlg;
221 }
222
223
224
AH_Provider_GetUserTypeDialog(AB_PROVIDER * pro)225 GWEN_DIALOG *AH_Provider_GetUserTypeDialog(AB_PROVIDER *pro)
226 {
227 GWEN_DIALOG *dlg;
228
229 DBG_INFO(AQHBCI_LOGDOMAIN, "AH_Provider_GetUserTypeDialog called");
230
231 assert(pro);
232
233 dlg=AH_ChooseUserTypeDialog_new(pro);
234 if (dlg==NULL) {
235 DBG_INFO(AQHBCI_LOGDOMAIN, "here (no dialog)");
236 return NULL;
237 }
238
239 return dlg;
240 }
241
242
243
244