1 /***************************************************************************
2
3 ***************************************************************************
4 * Please see toplevel file COPYING for license details *
5 ***************************************************************************/
6
7 #ifdef HAVE_CONFIG_H
8 # include <config.h>
9 #endif
10
11
12 #include "globals_l.h"
13 #include "aqhbci/banking/user.h"
14
15 #include <gwenhywfar/gui.h>
16 #include <gwenhywfar/text.h>
17 #include <gwenhywfar/ctplugin.h>
18
19 #include <stdarg.h>
20 #include <unistd.h>
21
22
AH_Control_ChangeKeys(AB_PROVIDER * pro,GWEN_DB_NODE * dbArgs,int argc,char ** argv)23 int AH_Control_ChangeKeys(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv)
24 {
25 GWEN_DB_NODE *db = NULL;
26 int res = 0;
27 uint32_t uid = 0;
28 AB_USER *u = NULL;
29
30 // flags, type, name, minnum, maxnum, short option, long option, short description , long description
31 const GWEN_ARGS args[] = {
32 {
33 GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Int, "userId", 1, 1,
34 "u", "user", "user id", "user id"
35 },
36 {
37 GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Char, "tokenType", 0, 1,
38 "t", "tokentype", "token type", "type of new crypt token (file, card)"
39 },
40 {
41 GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Char, "tokenName", 0, 1,
42 "n", "tokenname", "token name", "name of new crypt token (filename, card-nr)"
43 },
44 {
45 GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Int, "context", 0, 1,
46 "c", "context", "token context", "context on new token"
47 },
48 {
49 GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Char, "cryptMode", 0, 1,
50 "m", "cryptmode", "crypt mode", "crypt mode of new token (RDH, RAH)"
51 },
52 {
53 GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Int, "cryptType", 0, 1,
54 "T", "crypttype", "crypt type", "crypt type of new token (1 - 10, depends on crypt mode)"
55 },
56 {
57 GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, GWEN_ArgsType_Int, "help", 0, 0,
58 "h", "help", "Show this help screen", "Show this help screen"
59 }
60 };
61
62 db = GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local");
63 if (!db || ((res = GWEN_Args_Check(argc, argv, 1, 0, args, db)) == GWEN_ARGS_RESULT_ERROR)) {
64 fprintf(stderr, "ERROR: Could not parse arguments\n");
65 return 1;
66 }
67
68 if (res == GWEN_ARGS_RESULT_HELP) {
69 GWEN_BUFFER *b = GWEN_Buffer_new(0, 1024, 0, 1);
70 if (GWEN_Args_Usage(args, b, GWEN_ArgsOutType_Txt)) {
71 fprintf(stderr, "ERROR: Could not create help string\n");
72 return 1;
73 }
74 // TODO: help text default args
75 fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(b));
76 GWEN_Buffer_free(b);
77 return 0;
78 }
79
80 if ((uid = (uint32_t)GWEN_DB_GetIntValue(db, "userId", 0, 0)) == 0) {
81 fprintf(stderr, "ERROR: Invalid or missing unique user id\n");
82 return 1;
83 }
84
85 if ((AB_Provider_HasUser(pro, uid) < 0) || (AB_Provider_GetUser(pro, uid, 1, 1, &u) < 0) || !u) {
86 fprintf(stderr, "ERROR: could not find user with id %ld.", (long)uid);
87 return -1;
88 }
89
90 res = AH_Provider_ChangeUserKeys(pro, u, db, 1, 0, 0);
91
92 AB_User_free(u);
93 return res;
94 }
95