1 /***************************************************************************
2  begin       : Tue May 03 2005
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 <gwenhywfar/gwenhywfar.h>
15 #include <gwenhywfar/db.h>
16 #include <gwenhywfar/debug.h>
17 
18 #include "globals_l.h"
19 
20 
21 
showVersions()22 static void showVersions()
23 {
24   int vmajor, vminor, vpatchLevel, vbuild;
25 
26   fprintf(stdout, "Versions:\n");
27   GWEN_Version(&vmajor,
28                &vminor,
29                &vpatchLevel,
30                &vbuild);
31   fprintf(stdout, " Gwenhywfar   : %d.%d.%d.%d\n",
32           vmajor, vminor, vpatchLevel, vbuild);
33 
34   AB_Banking_GetVersion(&vmajor,
35                         &vminor,
36                         &vpatchLevel,
37                         &vbuild);
38   fprintf(stdout, " AqBanking    : %d.%d.%d.%d\n",
39           vmajor, vminor, vpatchLevel, vbuild);
40 
41 }
42 
43 
44 
showUsage(const char * prgName)45 static void showUsage(const char *prgName)
46 {
47   GWEN_BUFFER *ubuf;
48 
49   ubuf=GWEN_Buffer_new(0, 1024, 0, 1);
50   GWEN_Buffer_AppendString(ubuf,
51                            I18N("Usage: "));
52   GWEN_Buffer_AppendString(ubuf, prgName);
53   GWEN_Buffer_AppendString(ubuf, I18N(" COMMAND [LOCAL OPTIONS]\n"));
54   GWEN_Buffer_AppendString(ubuf,
55                            I18N("\nCommands:\n\n"));
56   GWEN_Buffer_AppendString(ubuf,
57                            I18N("  mkpinlist:\n"
58                                 "    This command creates an empty PIN "
59                                 "file\n\n"));
60   GWEN_Buffer_AppendString(ubuf,
61                            I18N("  adduser:\n"
62                                 "    Adds a user "
63                                 "(-> setup HBCI for a bank)\n\n"));
64   GWEN_Buffer_AppendString(ubuf,
65                            I18N("  deluser:\n"
66                                 "    Deletes a user.\n\n"));
67   GWEN_Buffer_AppendString(ubuf,
68                            I18N("  getkeys:\n"
69                                 "    Requests the server's key\n\n"));
70   GWEN_Buffer_AppendString(ubuf,
71                            I18N("  getcert:\n"
72                                 "    Requests the server's SSL certificate\n\n"));
73   GWEN_Buffer_AppendString(ubuf,
74                            I18N("  createkeys:\n"
75                                 "    Create user keys.\n\n"));
76   GWEN_Buffer_AppendString(ubuf,
77                            I18N("  sendkeys:\n"
78                                 "    Send the user keys to the bank.\n\n"));
79   GWEN_Buffer_AppendString(ubuf,
80                            I18N("  changekeys:\n"
81                                 "    Change user keys (and media).\n\n"));
82   GWEN_Buffer_AppendString(ubuf,
83                            I18N("  getbankinfo:\n"
84                                 "    Request bank information\n\n"));
85   GWEN_Buffer_AppendString(ubuf,
86                            I18N("  getaccounts:\n"
87                                 "    Requests account list for a "
88                                 "user\n\n"));
89   GWEN_Buffer_AppendString(ubuf,
90                            I18N("  getaccsepa:\n"
91                                 "    Requests SEPA account list for a "
92                                 "user\n\n"));
93   GWEN_Buffer_AppendString(ubuf,
94                            I18N("  getsysid:\n"
95                                 "    Requests a system id for the given "
96                                 "user\n\n"));
97   GWEN_Buffer_AppendString(ubuf,
98                            I18N("  getitanmodes:\n"
99                                 "    Requests supported iTAN modes for the given "
100                                 "user\n\n"));
101   GWEN_Buffer_AppendString(ubuf,
102                            I18N("  listitanmodes:\n"
103                                 "    Show a list of supported iTAN modes for the given "
104                                 "user\n\n"));
105   GWEN_Buffer_AppendString(ubuf,
106                            I18N("  setitanmode:\n"
107                                 "    Select an iTAN mode for the given user\n\n"));
108   GWEN_Buffer_AppendString(ubuf,
109                            I18N("  listusers:\n"
110                                 "    List the users\n\n"));
111   GWEN_Buffer_AppendString(ubuf,
112                            I18N("  listaccounts:\n"
113                                 "    List the accounts\n\n"));
114   GWEN_Buffer_AppendString(ubuf,
115                            I18N("  changepin:\n"
116                                 "    Change the PIN of a key file\n\n"));
117   GWEN_Buffer_AppendString(ubuf,
118                            I18N("  unblockpin:\n"
119                                 "    Unblock the PIN in PIN TAN mode.\n\n"));
120   GWEN_Buffer_AppendString(ubuf,
121                            I18N("  iniletter:\n"
122                                 "    Print the INI letter for a given "
123                                 "user\n\n"));
124   GWEN_Buffer_AppendString(ubuf,
125                            I18N("  addaccount:\n"
126                                 "    Manually add account \n\n"));
127   GWEN_Buffer_AppendString(ubuf,
128                            I18N("  delaccount:\n"
129                                 "    Deletes account \n\n"));
130 
131   GWEN_Buffer_AppendString(ubuf,
132                            I18N("  sethbciversion:\n"
133                                 "    Set the HBCI protocol version to be used\n\n"));
134 
135   GWEN_Buffer_AppendString(ubuf,
136                            I18N("  setMaxTransfers:\n"
137                                 "    Set the maximum number of transfers/debit notes per job \n\n"));
138 
139   GWEN_Buffer_AppendString(ubuf,
140                            I18N("  setsepaprofile:\n"
141                                 "    Set the SEPA profile for transfers/debit notes\n\n"));
142 
143   GWEN_Buffer_AppendString(ubuf,
144                            I18N("  setTanMediumId:\n"
145                                 "    Set the medium id for some PIN/TAN methods (like mTAN) \n\n"));
146   GWEN_Buffer_AppendString(ubuf,
147                            I18N("  setTanMechanism:\n"
148                                 "    Overwrite TAN mechanism to use \n\n"));
149   GWEN_Buffer_AppendString(ubuf,
150                            I18N("  adduserflags:\n"
151                                 "    Set special flags for the given user\n\n"));
152   GWEN_Buffer_AppendString(ubuf,
153                            I18N("  subuserflags:\n"
154                                 "    Unset special flags for the given user\n\n"));
155   GWEN_Buffer_AppendString(ubuf,
156                            I18N("  addaccountflags:\n"
157                                 "    Set special flags for the given account\n\n"));
158   GWEN_Buffer_AppendString(ubuf,
159                            I18N("  subaccountflags:\n"
160                                 "    Reset special flags for the given account\n\n"));
161   GWEN_Buffer_AppendString(ubuf,
162                            I18N("  logfile:\n"
163                                 "    Make an AqBanking log file anonymous\n\n"));
164   GWEN_Buffer_AppendString(ubuf,
165                            I18N("  versions:\n"
166                                 "    Print the program and library versions"));
167 
168   fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf));
169   GWEN_Buffer_free(ubuf);
170 }
171 
172 
173 
AH_Control(AB_PROVIDER * pro,int argc,char ** argv)174 int AH_Control(AB_PROVIDER *pro, int argc, char **argv)
175 {
176   GWEN_DB_NODE *db;
177   const char *cmd;
178   int rv;
179 
180   db=GWEN_DB_Group_new("arguments");
181   if (argc<1) {
182     showUsage(argv[0]);
183     GWEN_DB_Group_free(db);
184     return 0;
185   } /* if too few args */
186 
187   cmd=argv[0];
188   if (!(cmd && *cmd)) {
189     fprintf(stderr, "ERROR: Command needed.\n");
190     GWEN_DB_Group_free(db);
191     return 1;
192   }
193 
194   if (strcasecmp(cmd, "help")==0) {
195     showUsage(argv[0]);
196     rv=0;
197   }
198   else if (strcasecmp(cmd, "mkpinlist")==0) {
199     rv=AH_Control_MkPinList(pro, db, argc, argv);
200   }
201   else if (strcasecmp(cmd, "adduser")==0) {
202     rv=AH_Control_AddUser(pro, db, argc, argv);
203   }
204   else if (strcasecmp(cmd, "deluser")==0) {
205     rv=AH_Control_DelUser(pro, db, argc, argv);
206   }
207   else if (strcasecmp(cmd, "getaccounts")==0) {
208     rv=AH_Control_GetAccounts(pro, db, argc, argv);
209   }
210   else if (strcasecmp(cmd, "addaccount")==0) {
211     rv=AH_Control_AddAccount(pro, db, argc, argv);
212   }
213   else if (strcasecmp(cmd, "delaccount")==0) {
214     rv=AH_Control_DelAccount(pro, db, argc, argv);
215   }
216   else if (strcasecmp(cmd, "getsysid")==0) {
217     rv=AH_Control_GetSysId(pro, db, argc, argv);
218   }
219   else if (strcasecmp(cmd, "getcert")==0) {
220     rv=AH_Control_GetCert(pro, db, argc, argv);
221   }
222   else if (strcasecmp(cmd, "getkeys")==0) {
223     rv=AH_Control_GetKeys(pro, db, argc, argv);
224   }
225   else if (strcasecmp(cmd, "createkeys")==0) {
226     rv=AH_Control_CreateKeys(pro, db, argc, argv);
227   }
228   else if (strcasecmp(cmd, "sendkeys")==0) {
229     rv=AH_Control_SendKeys(pro, db, argc, argv);
230   }
231   else if (strcasecmp(cmd, "changekeys")==0) {
232     rv=AH_Control_ChangeKeys(pro, db, argc, argv);
233   }
234   else if (strcasecmp(cmd, "listusers")==0) {
235     rv=AH_Control_ListUsers(pro, db, argc, argv);
236   }
237   else if (strcasecmp(cmd, "listaccounts")==0) {
238     rv=AH_Control_ListAccounts(pro, db, argc, argv);
239   }
240   else if (strcasecmp(cmd, "iniletter")==0) {
241     rv=AH_Control_IniLetter(pro, db, argc, argv);
242   }
243   else if (strcasecmp(cmd, "getitanmodes")==0) {
244     rv=AH_Control_GetItanModes(pro, db, argc, argv);
245   }
246   else if (strcasecmp(cmd, "listitanmodes")==0) {
247     rv=AH_Control_ListItanModes(pro, db, argc, argv);
248   }
249   else if (strcasecmp(cmd, "setitanmode")==0) {
250     rv=AH_Control_SetItanMode(pro, db, argc, argv);
251   }
252   else if (strcasecmp(cmd, "changepin")==0) {
253     rv=AH_Control_ChangePin(pro, db, argc, argv);
254   }
255   else if (strcasecmp(cmd, "unblockpin")==0) {
256     rv=AH_Control_UnblockPin(pro, db, argc, argv);
257   }
258   else if (strcasecmp(cmd, "sethbciversion")==0) {
259     rv=AH_Control_SetHbciVersion(pro, db, argc, argv);
260   }
261   else if (strcasecmp(cmd, "adduserflags")==0) {
262     rv=AH_Control_AddsubUserFlags(pro, db, argc, argv, 1);
263   }
264   else if (strcasecmp(cmd, "subuserflags")==0) {
265     rv=AH_Control_AddsubUserFlags(pro, db, argc, argv, 0);
266   }
267   else if (strcasecmp(cmd, "addaccountflags")==0) {
268     rv=AH_Control_AddsubAccountFlags(pro, db, argc, argv, 1);
269   }
270   else if (strcasecmp(cmd, "subaccountflags")==0) {
271     rv=AH_Control_AddsubAccountFlags(pro, db, argc, argv, 0);
272   }
273   else if (strcasecmp(cmd, "setmaxtransfers")==0) {
274     rv=AH_Control_SetMaxTransfers(pro, db, argc, argv);
275   }
276   else if (strcasecmp(cmd, "setTanMediumId")==0) {
277     rv=AH_Control_SetTanMediumId(pro, db, argc, argv);
278   }
279   else if (strcasecmp(cmd, "logfile")==0) {
280     rv=AH_Control_LogFile(pro, db, argc, argv);
281   }
282   else if (strcasecmp(cmd, "getaccsepa")==0) {
283     rv=AH_Control_GetAccSepa(pro, db, argc, argv);
284   }
285   else if (strcasecmp(cmd, "setsepaprofile")==0) {
286     rv=AH_Control_SetSepaProfile(pro, db, argc, argv);
287   }
288   else if (strcasecmp(cmd, "getbankinfo")==0) {
289     rv=AH_Control_GetBankInfo(pro, db, argc, argv);
290   }
291   else if (strcasecmp(cmd, "setTanMechanism")==0) {
292     rv=AH_Control_SetTanMechanism(pro, db, argc, argv);
293   }
294   else if (strcasecmp(cmd, "versions")==0) {
295     showVersions();
296     rv=0;
297   }
298   else if (strcasecmp(cmd, "test1")==0) {
299     rv=AH_Control_Test1(pro, db, argc, argv);
300   }
301   else {
302     fprintf(stderr, "ERROR: Unknown command \"%s\".\n", cmd);
303     rv=1;
304   }
305 
306   GWEN_DB_Group_free(db);
307   return rv;
308 }
309 
310 
311 
312