AB_USER *AB_Banking_CreateUser(AB_BANKING *ab, const char *backendName) { AB_USER *u; AB_PROVIDER *pro; uint32_t uid; int rv; assert(ab); pro=AB_Banking_GetProvider(ab, backendName); if (!pro) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Backend \"%s\" not found", backendName); return 0; } u=AB_User_new(ab); AB_User_SetBackendName(u, AB_Provider_GetName(pro)); uid=AB_Banking_GetUniqueId(ab); assert(uid); AB_User_SetUniqueId(u, uid); rv=AB_Provider_ExtendUser(pro, u, AB_ProviderExtendMode_Create, NULL); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error extending user (%d)", rv); AB_User_free(u); return 0; } return u; }
int AB_Banking_DeleteUser(AB_BANKING *ab, AB_USER *u) { int rv; AB_ACCOUNT *acc_rv; const char *groupName; assert(ab); assert(u); acc_rv=AB_Banking_FindFirstAccountOfUser(ab, u); if (acc_rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error on removing user: Still belongs to an account (bankcode %s, accountnumber %s). Delete the account first.", AB_Account_GetBankCode(acc_rv), AB_Account_GetAccountNumber(acc_rv)); return GWEN_ERROR_INVALID; } rv=AB_User_List_Del(u); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error on removing user from list (%d)", rv); return rv; } rv=AB_Provider_ExtendUser(AB_User_GetProvider(u), u, AB_ProviderExtendMode_Remove, NULL); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error on remove extension of user (%d)", rv); return rv; } groupName=AB_User_GetDbId(u); if (groupName) { rv=GWEN_ConfigMgr_DeleteGroup(ab->configMgr, AB_CFG_GROUP_USERS, groupName); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to delete user config [%08x] (%d)", AB_User_GetUniqueId(u), rv); return rv; } } AB_User_free(u); return 0; }
int addUser(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; GWEN_BUFFER *nameBuffer=NULL; const char *tokenName; const char *tokenType; const char *bankId; const char *userId; const char *customerId; const char *userName; const char *hostName; const char *server; const char *ebicsVersion; int importing; uint32_t cid; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "Specify the bank code", /* short description */ "Specify the bank code" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the user id (Benutzerkennung)", /* short description */ "Specify the user id (Benutzerkennung)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "customerId", /* name */ 0, /* minnum */ 1, /* maxnum */ "c", /* short option */ "customer", /* long option */ "Specify the customer id (Kundennummer)", /* short description */ "Specify the customer id (Kundennummer)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "tokentype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tokenname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "serverAddr", /* name */ 0, /* minnum */ 1, /* maxnum */ "s", /* short option */ "server", /* long option */ "Specify the server URL", /* short description */ "Specify the server URL" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "hostName", /* name */ 1, /* minnum */ 1, /* maxnum */ "H", /* short option */ "hostname", /* long option */ "Specify the EBICS hostname", /* short description */ "Specify the EBICS hostname" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "userName", /* name */ 1, /* minnum */ 1, /* maxnum */ "N", /* short option */ "username", /* long option */ "Specify the realname of the user", /* short description */ "Specify the realname of the user" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "ebicsVersion", /* name */ 0, /* minnum */ 1, /* maxnum */ "E", /* short option */ "ebicsversion", /* long option */ "Specify the EBICS version to use (e.g. H002)", /* short description */ "Specify the EBICS version to use (e.g. H002)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "context", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "context", /* long option */ "Select a context on the medium", /* short description */ "Select a context on the medium" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "import", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "import", /* long option */ "Import a user which has already been in use (e.g. with previous versions)", "Import a user which has already been in use (e.g. with previous versions)" }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } tokenType=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); tokenName=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); bankId=GWEN_DB_GetCharValue(db, "bankId", 0, 0); userId=GWEN_DB_GetCharValue(db, "userId", 0, 0); customerId=GWEN_DB_GetCharValue(db, "customerId", 0, 0); hostName=GWEN_DB_GetCharValue(db, "hostName", 0, 0); userName=GWEN_DB_GetCharValue(db, "userName", 0, 0); server=GWEN_DB_GetCharValue(db, "serverAddr", 0, 0); cid=GWEN_DB_GetIntValue(db, "context", 0, 0); importing=GWEN_DB_GetIntValue(db, "import", 0, 0); ebicsVersion=GWEN_DB_GetCharValue(db, "ebicsVersion", 0, "H003"); if (1) { const char *lbankId; const char *luserId; const char *lcustomerId; const char *lserverAddr; GWEN_URL *url; GWEN_CRYPT_TOKEN_CONTEXT *ctx=NULL; AB_USER *user; if (1) { GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *cctx; if (cid==0) { DBG_ERROR(0, "No context given."); return 1; } /* get crypt token */ pm=GWEN_PluginManager_FindPluginManager("ct"); if (pm==0) { DBG_ERROR(0, "Plugin manager not found"); return 3; } pl=GWEN_PluginManager_GetPlugin(pm, tokenType); if (pl==0) { DBG_ERROR(0, "Plugin not found"); return 3; } DBG_INFO(0, "Plugin found"); ct=GWEN_Crypt_Token_Plugin_CreateToken(pl, tokenName); if (ct==0) { DBG_ERROR(0, "Could not create crypt token"); return 3; } /* open crypt token */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token (%d)", rv); return 3; } /* get real token name */ nameBuffer=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Buffer_AppendString(nameBuffer, GWEN_Crypt_Token_GetTokenName(ct)); tokenName=GWEN_Buffer_GetStart(nameBuffer); cctx=GWEN_Crypt_Token_GetContext(ct, cid, 0); if (cctx==NULL) { DBG_ERROR(0, "Context %02x not found", cid); return 3; } ctx=GWEN_Crypt_Token_Context_dup(cctx); lbankId=bankId?bankId:GWEN_Crypt_Token_Context_GetServiceId(ctx); luserId=userId?userId:GWEN_Crypt_Token_Context_GetUserId(ctx); lcustomerId=customerId?customerId:luserId; lserverAddr=server?server:GWEN_Crypt_Token_Context_GetAddress(ctx); rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token (%d)", rv); return 3; } GWEN_Crypt_Token_free(ct); } if (!lbankId || !*lbankId) { DBG_ERROR(0, "No bank id stored and none given"); return 3; } if (!luserId || !*luserId) { DBG_ERROR(0, "No user id (Benutzerkennung) stored and none given"); return 3; } /* TODO: Check for existing users to avoid duplicates */ #if 0 user=AB_Banking_FindUser(ab, EBC_PROVIDER_NAME, "de", lbankId, luserId, lcustomerId); if (user) { DBG_ERROR(0, "User %s already exists", luserId); return 3; } #endif user=AB_Provider_CreateUserObject(pro); assert(user); AB_User_SetCountry(user, "de"); AB_User_SetBankCode(user, lbankId); AB_User_SetUserId(user, luserId); AB_User_SetCustomerId(user, lcustomerId); EBC_User_SetPeerId(user, hostName); AB_User_SetUserName(user, userName); EBC_User_SetTokenType(user, tokenType); EBC_User_SetTokenName(user, tokenName); EBC_User_SetTokenContextId(user, cid); if (ebicsVersion) { if (strcasecmp(ebicsVersion, "H002")==0) { EBC_User_SetProtoVersion(user, "H002"); EBC_User_SetSignVersion(user, "A004"); EBC_User_SetAuthVersion(user, "X001"); EBC_User_SetCryptVersion(user, "E001"); } else if (strcasecmp(ebicsVersion, "H003")==0) { EBC_User_SetProtoVersion(user, "H003"); EBC_User_SetSignVersion(user, "A005"); EBC_User_SetAuthVersion(user, "X002"); EBC_User_SetCryptVersion(user, "E002"); } else if (strcasecmp(ebicsVersion, "H004")==0) { EBC_User_SetProtoVersion(user, "H004"); EBC_User_SetSignVersion(user, "A005"); EBC_User_SetAuthVersion(user, "X002"); EBC_User_SetCryptVersion(user, "E002"); } else { fprintf(stderr, "%s", I18N("Invalid protocol version.\n" "Possible versions are H002, H003 and H004.\n")); return 3; } } /* try to get server address from database if still unknown */ if (!lserverAddr || *lserverAddr==0) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (getBankUrl(AB_Provider_GetBanking(pro), lbankId, tbuf)) { DBG_INFO(0, "Could not find server address for \"%s\"", lbankId); } if (GWEN_Buffer_GetUsedBytes(tbuf)==0) { DBG_ERROR(0, "No address given and none available in internal db"); return 3; } url=GWEN_Url_fromString(GWEN_Buffer_GetStart(tbuf)); if (url==NULL) { DBG_ERROR(0, "Bad URL \"%s\" in internal db", GWEN_Buffer_GetStart(tbuf)); return 3; } GWEN_Buffer_free(tbuf); } else { /* set address */ url=GWEN_Url_fromString(lserverAddr); if (url==NULL) { DBG_ERROR(0, "Bad URL \"%s\"", lserverAddr); return 3; } } GWEN_Url_SetProtocol(url, "https"); if (GWEN_Url_GetPort(url)==0) GWEN_Url_SetPort(url, 443); /* set url */ if (1) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Url_toString(url, tbuf); if (rv<0) { DBG_ERROR(0, "Internal error storing URL"); return 3; } EBC_User_SetServerUrl(user, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } GWEN_Url_free(url); if (importing) { EBC_User_AddFlags(user, EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA); EBC_User_SetStatus(user, EBC_UserStatus_Enabled); } rv=AB_Provider_AddUser(pro, user); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Coud not add new user (%d)", rv); AB_User_free(user); return 4; } AB_User_free(user); /* context no longer needed */ GWEN_Crypt_Token_Context_free(ctx); } return 0; }
int AH_Control_AddAccount(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_USER *u=0; int rv; uint32_t userId; const char *bankId; const char *accountName; const char *accountId; const char *ownerName; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 1, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "Specify the bank code", /* short description */ "Specify the bank code" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 1, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "ownerName", /* name */ 0, /* minnum */ 1, /* maxnum */ "N" /* short option */ "owner", /* long option */ "Specify the owner name", /* short description */ "Specify the owner name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "name", /* long option */ "Specify the account name (Konto-Name)", /* short description */ "Specify the account name (Konto-Name)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountId", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "account", /* long option */ "Specify the account id (Kontonummer)", /* short description */ "Specify the account id (Kontonummer)" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } userId=GWEN_DB_GetIntValue(db, "userId", 0, 0); if (userId<1) { fprintf(stderr, "ERROR: Invalid user id\n"); return 1; } bankId=GWEN_DB_GetCharValue(db, "bankId", 0, "*"); accountId=GWEN_DB_GetCharValue(db, "accountId", 0, "*"); accountName=GWEN_DB_GetCharValue(db, "accountName", 0, "Account"); ownerName=GWEN_DB_GetCharValue(db, "ownerName", 0, NULL); rv=AB_Provider_HasUser(pro, userId); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) userId); return 2; } rv=AB_Provider_GetUser(pro, userId, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) userId); return 2; } else { AB_ACCOUNT *account; AB_BANKINFO_LIST2 *bl; AB_BANKINFO_LIST2_ITERATOR *bit; AB_BANKINFO *tbi; AB_BANKINFO *bi; int rv; bl=AB_BankInfo_List2_new(); tbi=AB_BankInfo_new(); AB_BankInfo_SetBankId(tbi, bankId); rv=AB_Banking_GetBankInfoByTemplate(AB_Provider_GetBanking(pro), "de", tbi, bl); if (rv) { fprintf(stderr, "Error looking for bank info: %d\n", rv); AB_User_free(u); return 3; } bit=AB_BankInfo_List2_First(bl); if (bit) { bi=AB_BankInfo_List2Iterator_Data(bit); assert(bi); AB_BankInfo_List2Iterator_free(bit); } else { bi=NULL; fprintf(stderr, "Could not find bank with id %s\n", bankId); } AB_BankInfo_List2_free(bl); account=AB_Provider_CreateAccountObject(pro); assert(account); if (!ownerName) AB_Account_SetOwnerName(account, AB_User_GetUserName(u)); else AB_Account_SetOwnerName(account, ownerName); AB_Account_SetAccountNumber(account, accountId); if (accountName) AB_Account_SetAccountName(account, accountName); AB_Account_SetBankCode(account, bankId); if (bi) AB_Account_SetBankName(account, AB_BankInfo_GetBankName(bi)); AB_Account_SetUserId(account, userId); /* add account to system */ rv=AB_Provider_AddAccount(pro, account, 1); /* lock corresponding user */ if (rv<0) { DBG_ERROR(0, "Error adding account (%d)", rv); AB_Account_free(account); AB_User_free(u); return 3; } AB_Account_free(account); AB_User_free(u); } return 0; }
int AH_NewKeyFileDialog_DoIt(GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; AB_USER *u; GWEN_URL *url; int rv; uint32_t pid; AB_IMEXPORTER_CONTEXT *ctx; AB_PROVIDER *pro; GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_CRYPT_TOKEN *ct; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); rv=AH_NewKeyFileDialog_GetFilePageData(dlg); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No file?"); // TODO: show error message return GWEN_DialogEvent_ResultHandled; } pro=AB_Banking_GetProvider(xdlg->banking, "aqhbci"); if (pro==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not find backend, maybe some plugins are not installed?"); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could not find HBCI backend, maybe some plugins are not installed?")); return GWEN_DialogEvent_ResultHandled; } u=AB_Banking_CreateUser(xdlg->banking, "aqhbci"); if (u==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create user, maybe backend missing?"); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could not find HBCI backend, maybe some plugins are not installed?")); return GWEN_DialogEvent_ResultHandled; } /* generic setup */ AB_User_SetUserName(u, xdlg->userName); AB_User_SetUserId(u, xdlg->userId); if (xdlg->customerId && *(xdlg->customerId)) AB_User_SetCustomerId(u, xdlg->customerId); else AB_User_SetCustomerId(u, xdlg->userId); AB_User_SetCountry(u, "de"); AB_User_SetBankCode(u, xdlg->bankCode); /* HBCI setup */ AH_User_SetTokenType(u, "ohbci"); AH_User_SetTokenName(u, AH_NewKeyFileDialog_GetFileName(dlg)); AH_User_SetTokenContextId(u, 1); AH_User_SetCryptMode(u, AH_CryptMode_Rdh); AH_User_SetStatus(u, AH_UserStatusPending); AH_User_SetHbciVersion(u, xdlg->hbciVersion); AH_User_SetRdhType(u, xdlg->rdhVersion); AH_User_SetFlags(u, xdlg->flags); /* create CryptToken */ pm=GWEN_PluginManager_FindPluginManager(GWEN_CRYPT_TOKEN_PLUGIN_TYPENAME); if (pm==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Plugin manager not found"); GWEN_Gui_ShowError(I18N("Error"), I18N("CryptToken plugin for type %s is not available. Did you install all necessary packages?"), GWEN_CRYPT_TOKEN_PLUGIN_TYPENAME); return 3; } pl=GWEN_PluginManager_GetPlugin(pm, AH_User_GetTokenType(u)); if (pl==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Plugin not found"); GWEN_Gui_ShowError(I18N("Error"), I18N("CryptToken plugin for type %s is not available. Did you install all necessary packages?"), AH_User_GetTokenType(u)); AB_User_free(u); return GWEN_DialogEvent_ResultHandled; } ct=GWEN_Crypt_Token_Plugin_CreateToken(pl, AH_User_GetTokenName(u)); if (ct==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create crypt token"); AB_User_free(u); return GWEN_DialogEvent_ResultHandled; } /* create crypt token */ rv=GWEN_Crypt_Token_Create(ct, 0); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create token"); GWEN_Gui_ShowError(I18N("Error"), I18N("The keyfile %s could not be created. Maybe there already is a file of that name (%d)."), GWEN_Crypt_Token_GetTokenName(ct), rv); AB_User_free(u); return GWEN_DialogEvent_ResultHandled; } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not close token"); GWEN_Gui_ShowError(I18N("Error"), I18N("The keyfile %s could not be closed. Please check disc space."), GWEN_Crypt_Token_GetTokenName(ct), rv); AB_User_free(u); unlink(AH_User_GetTokenName(u)); return GWEN_DialogEvent_ResultHandled; } url=GWEN_Url_fromString(xdlg->url); assert(url); GWEN_Url_SetProtocol(url, "hbci"); if (GWEN_Url_GetPort(url)==0) GWEN_Url_SetPort(url, 3000); AH_User_SetServerUrl(u, url); GWEN_Url_free(url); rv=AB_Banking_AddUser(xdlg->banking, u); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not add user (%d)", rv); GWEN_Gui_ShowError(I18N("Error"), I18N("Could not add HBCI user, maybe there already is a user of that id (%d)"), rv); AB_User_free(u); DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not add user, maybe there already is a user of the same id (%d)?", rv); return GWEN_DialogEvent_ResultHandled; } pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Setting Up Keyfile User"), I18N("The server keys will now be retrieved, keys created and sent to the bank."), 3, /* getkeys, mkKeys, sendKeys */ 0); /* lock new user */ rv=AB_Banking_BeginExclUseUser(xdlg->banking, u); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not lock user (%d)", rv); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Unable to lock users (%d)"), rv); AB_Banking_DeleteUser(xdlg->banking, u); unlink(AH_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* get server keys id */ GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Retrieving server keys")); ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetServerKeys(pro, u, ctx, 0, 1, 0); if (rv<0) { AB_Banking_EndExclUseUser(xdlg->banking, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Banking_DeleteUser(xdlg->banking, u); unlink(AH_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } rv=AH_NewKeyFileDialog_CheckBankIniLetter(dlg, u); if (rv<0) { AB_Banking_EndExclUseUser(xdlg->banking, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Banking_DeleteUser(xdlg->banking, u); unlink(AH_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Bad bank keys, you should contact your bank.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { AB_Banking_EndExclUseUser(xdlg->banking, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Banking_DeleteUser(xdlg->banking, u); unlink(AH_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* generate keys */ rv=AH_Provider_CreateKeys(pro, u, 0); if (rv<0) { AB_Banking_EndExclUseUser(xdlg->banking, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Banking_DeleteUser(xdlg->banking, u); unlink(AH_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Error generating keys: %d"), rv); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { AB_Banking_EndExclUseUser(xdlg->banking, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Banking_DeleteUser(xdlg->banking, u); unlink(AH_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* send user keys */ GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Sending user keys")); ctx=AB_ImExporterContext_new(); rv=AH_Provider_SendUserKeys2(pro, u, ctx, 0, 0, 1, 0); /* withAuthKey, withProgress, nounmount, doLock */ if (rv<0) { AB_Banking_EndExclUseUser(xdlg->banking, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Banking_DeleteUser(xdlg->banking, u); unlink(AH_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { AB_Banking_EndExclUseUser(xdlg->banking, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Banking_DeleteUser(xdlg->banking, u); //unlink(AH_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* unlock user */ rv=AB_Banking_EndExclUseUser(xdlg->banking, u, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not unlock customer [%s] (%d)", AB_User_GetCustomerId(u), rv); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Could not unlock user %s (%d)"), AB_User_GetUserId(u), rv); AB_Banking_EndExclUseUser(xdlg->banking, u, 1); AB_Banking_DeleteUser(xdlg->banking, u); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } GWEN_Gui_ProgressEnd(pid); AH_NewKeyFileDialog_EnterPage(dlg, PAGE_END, 1); xdlg->user=u; return GWEN_DialogEvent_ResultHandled; }
int APY_NewUserDialog_DoIt(GWEN_DIALOG *dlg) { APY_NEWUSER_DIALOG *xdlg; AB_USER *u; int rv; uint32_t pid; AB_PROVIDER *pro; DBG_INFO(0, "Doit"); assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); pro=AB_Banking_GetProvider(xdlg->banking, "aqpaypal"); if (pro==NULL) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Could not find backend, maybe some plugins are not installed?"); // TODO: show error message return GWEN_DialogEvent_ResultHandled; } DBG_INFO(0, "Creating user"); u=AB_Banking_CreateUser(xdlg->banking, "aqpaypal"); if (u==NULL) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Could not create user, maybe backend missing?"); // TODO: show error message return GWEN_DialogEvent_ResultHandled; } /* generic setup */ AB_User_SetUserName(u, xdlg->userName); AB_User_SetUserId(u, xdlg->userId); AB_User_SetCustomerId(u, xdlg->userId); AB_User_SetCountry(u, "de"); AB_User_SetBankCode(u, "PAYPAL"); APY_User_SetServerUrl(u, xdlg->url); APY_User_SetHttpVMajor(u, xdlg->httpVMajor); APY_User_SetHttpVMinor(u, xdlg->httpVMinor); DBG_INFO(0, "Adding user"); rv=AB_Banking_AddUser(xdlg->banking, u); if (rv<0) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Could not add user (%d)", rv); AB_User_free(u); return GWEN_DialogEvent_ResultHandled; } pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Setting Up Paypal User"), I18N("The user will be created."), 3, 0); /* lock new user */ DBG_INFO(0, "Locking user"); rv=AB_Banking_BeginExclUseUser(xdlg->banking, u); if (rv<0) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Could not lock user (%d)", rv); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Unable to lock users")); AB_Banking_DeleteUser(xdlg->banking, u); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } #if 0 DBG_INFO(0, "Getting certs (%08x)", AH_User_GetFlags(u)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Retrieving SSL certificate")); rv=APY_Provider_GetCert(pro, u, 0, 1, 0); if (rv<0) { // TODO: retry with SSLv3 if necessary AB_Banking_EndExclUseUser(xdlg->banking, u, 1); DBG_ERROR(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); AB_Banking_DeleteUser(xdlg->banking, u); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { AB_Banking_EndExclUseUser(xdlg->banking, u, 1); DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); AB_Banking_DeleteUser(xdlg->banking, u); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } #endif GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Creating API credentials file")); rv=APY_User_SetApiSecrets(u, xdlg->apiPassword, xdlg->apiSignature, xdlg->apiUserId); if (rv<0) { AB_Banking_EndExclUseUser(xdlg->banking, u, 1); DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); AB_Banking_DeleteUser(xdlg->banking, u); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* unlock user */ DBG_INFO(0, "Unlocking user"); rv=AB_Banking_EndExclUseUser(xdlg->banking, u, 0); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Could not unlock user [%s] (%d)", AB_User_GetUserId(u), rv); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Could not unlock user %s (%d)"), AB_User_GetUserId(u), rv); AB_Banking_EndExclUseUser(xdlg->banking, u, 1); AB_Banking_DeleteUser(xdlg->banking, u); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } if (1) { AB_ACCOUNT *account; int rv; static char accountname[256]; account=AB_Banking_CreateAccount(xdlg->banking, APY_PROVIDER_NAME); assert(account); #if 0 AB_User_SetUserName(u, xdlg->userName); AB_User_SetUserId(u, xdlg->userId); #endif AB_Account_SetOwnerName(account, AB_User_GetUserName(u)); AB_Account_SetAccountNumber(account, AB_User_GetUserId(u)); AB_Account_SetBankCode(account, "PAYPAL"); AB_Account_SetBankName(account, "PAYPAL"); strcpy(accountname, "PP "); strcat(accountname, AB_User_GetUserName(u)); AB_Account_SetAccountName(account, accountname); AB_Account_SetUser(account, u); AB_Account_SetSelectedUser(account, u); rv=AB_Banking_AddAccount(xdlg->banking, account); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Error adding account (%d)", rv); AB_Account_free(account); AB_Banking_DeleteUser(xdlg->banking, u); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } } GWEN_Dialog_SetCharProperty(dlg, "wiz_end_label", GWEN_DialogProperty_Title, 0, I18N("The user has been successfully setup."), 0); GWEN_Gui_ProgressEnd(pid); APY_NewUserDialog_EnterPage(dlg, PAGE_END, 1); xdlg->user=u; return GWEN_DialogEvent_ResultHandled; }
int AH_Control_GetItanModes(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { AB_IMEXPORTER_CONTEXT *ctx; ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetItanModes(pro, u, ctx, 1, 0, 1); AB_ImExporterContext_free(ctx); if (rv) { DBG_ERROR_ERR(0, rv); AB_User_free(u); return 3; } } AB_User_free(u); return 0; }
int AH_Control_ListItanModes(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { const AH_TAN_METHOD_LIST *tl; tl=AH_User_GetTanMethodDescriptions(u); if (tl) { const AH_TAN_METHOD *tm; tm=AH_TanMethod_List_First(tl); fprintf(stdout, "TAN Methods\n"); while (tm) { const char *mid; const char *mname; int combinedVersion; combinedVersion=AH_TanMethod_GetFunction(tm)+(AH_TanMethod_GetGvVersion(tm)*1000); fprintf(stdout, "- %4d (F%3d/V%1d/P%1d)", combinedVersion, AH_TanMethod_GetFunction(tm), AH_TanMethod_GetGvVersion(tm), AH_TanMethod_GetProcess(tm)); mid=AH_TanMethod_GetMethodId(tm); mname=AH_TanMethod_GetMethodName(tm); if (mid && mname) { fprintf(stdout, ": %s (%s)", mid, mname); } else if (mid && !mname) { fprintf(stdout, ": %s", mid); } else if (!mid && mname) { fprintf(stdout, ": %s", mname); } if (AH_User_HasTanMethod(u, AH_TanMethod_GetFunction(tm))) { if (AH_User_GetSelectedTanMethod(u)==combinedVersion) fprintf(stdout, " [available and selected]"); else fprintf(stdout, " [available]"); } else fprintf(stdout, " [not available]"); fprintf(stdout, "\n"); tm=AH_TanMethod_List_Next(tm); } } } AB_User_free(u); return 0; }
int AO_NewUserDialog_DoIt(GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; AB_USER *u; int rv; uint32_t pid; DBG_ERROR(0, "Doit"); assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); DBG_ERROR(0, "Creating user"); u=AB_Provider_CreateUserObject(xdlg->provider); if (u==NULL) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Could not create user, maybe backend missing?"); // TODO: show error message return GWEN_DialogEvent_ResultHandled; } /* generic setup */ AB_User_SetUserName(u, xdlg->userName); AB_User_SetUserId(u, xdlg->userId); AB_User_SetCustomerId(u, xdlg->userId); AB_User_SetCountry(u, "us"); AO_User_SetBankName(u, xdlg->bankName); AB_User_SetBankCode(u, "0000000000"); AO_User_SetFlags(u, xdlg->flags); AO_User_SetBrokerId(u, xdlg->brokerId); AO_User_SetOrg(u, xdlg->org); AO_User_SetFid(u, xdlg->fid); AO_User_SetAppId(u, xdlg->appId); AO_User_SetAppVer(u, xdlg->appVer); AO_User_SetHeaderVer(u, xdlg->headerVer); AO_User_SetClientUid(u, xdlg->clientUid); AO_User_SetSecurityType(u, xdlg->securityType); AO_User_SetServerAddr(u, xdlg->url); AO_User_SetHttpVMajor(u, xdlg->httpVMajor); AO_User_SetHttpVMinor(u, xdlg->httpVMinor); DBG_ERROR(0, "Adding user"); rv=AB_Provider_AddUser(xdlg->provider, u); if (rv<0) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Could not add user (%d)", rv); AB_User_free(u); return GWEN_DialogEvent_ResultHandled; } pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Setting Up OFX DirectConnect User"), I18N("The user will be created and the certificate retrieved."), 1, 0); /* lock new user */ DBG_ERROR(0, "Locking user"); rv=AB_Provider_BeginExclUseUser(xdlg->provider, u); if (rv<0) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Could not lock user (%d)", rv); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Unable to lock users")); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Retrieving SSL certificate")); rv=AO_Provider_GetCert(xdlg->provider, u); if (rv<0) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* unlock user */ DBG_ERROR(0, "Unlocking user"); rv=AB_Provider_EndExclUseUser(xdlg->provider, u, 0); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Could not unlock user [%s] (%d)", AB_User_GetUserId(u), rv); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Could not unlock user %s (%d)"), AB_User_GetUserId(u), rv); AB_Provider_EndExclUseUser(xdlg->provider, u, 1); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } GWEN_Gui_ProgressEnd(pid); AO_NewUserDialog_EnterPage(dlg, PAGE_END, 1); xdlg->user=u; return GWEN_DialogEvent_ResultHandled; }
int AB_SetupDialog_AddUser(GWEN_DIALOG *dlg) { AB_SETUP_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_DIALOG, dlg); assert(xdlg); dlg2=AB_SetupNewUserDialog_new(xdlg->banking); if (dlg2==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog"); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); } else { const char *s; s=AB_SetupNewUserDialog_GetSelectedBackend(dlg2); if (s && *s) { AB_PROVIDER *pro; int selectedType; uint32_t flags; pro=AB_SetupDialog_GetProviderByName(dlg, s); if (pro==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Provider [%s] not found", s); GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } selectedType=AB_SetupNewUserDialog_GetSelectedType(dlg2); GWEN_Dialog_free(dlg2); flags=AB_Provider_GetFlags(pro); if (flags & AB_PROVIDER_FLAGS_HAS_NEWUSER_DIALOG) { GWEN_DIALOG *dlg3; int rv; dlg3=AB_Provider_GetNewUserDialog(pro, selectedType); if (dlg3==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog"); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg3, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg3); return GWEN_DialogEvent_ResultHandled; } GWEN_Dialog_free(dlg3); AB_SetupDialog_Reload(dlg); } else { GWEN_DIALOG *dlg3; AB_USER *u; const char *s; int rv; u=AB_Provider_CreateUserObject(pro); if (u==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "No user created."); return GWEN_DialogEvent_ResultHandled; } s=GWEN_I18N_GetCurrentLocale(); if (s && *s) { if (strstr(s, "de_")) AB_User_SetCountry(u, "de"); else if (strstr(s, "us_")) AB_User_SetCountry(u, "us"); } dlg3=AB_EditUserDialog_new(pro, u, 0); if (dlg3==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Could not create dialog"); AB_User_free(u); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg3, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg3); AB_User_free(u); return GWEN_DialogEvent_ResultHandled; } GWEN_Dialog_free(dlg3); rv=AB_Provider_AddUser(pro, u); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); AB_User_free(u); return GWEN_DialogEvent_ResultHandled; } AB_User_free(u); AB_SetupDialog_Reload(dlg); } } else { GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } } return GWEN_DialogEvent_ResultHandled; }
int AB_Banking_LoadAllUsers(AB_BANKING *ab) { GWEN_STRINGLIST *sl; int rv; sl=GWEN_StringList_new(); rv=GWEN_ConfigMgr_ListSubGroups(ab->configMgr, AB_CFG_GROUP_USERS, sl); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_StringList_free(sl); return rv; } if (GWEN_StringList_Count(sl)) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(sl); while(se) { const char *t; GWEN_DB_NODE *db=NULL; t=GWEN_StringListEntry_Data(se); assert(t); rv=GWEN_ConfigMgr_GetGroup(ab->configMgr, AB_CFG_GROUP_USERS, t, &db); if (rv<0) { DBG_WARN(AQBANKING_LOGDOMAIN, "Could not load user group [%s] (%d), ignoring", t, rv); } else { AB_USER *u=NULL; uint32_t uid; assert(db); uid=GWEN_DB_GetIntValue(db, "uniqueId", 0, 0); if (uid) u=AB_Banking_GetUser(ab, uid); if (u) { /* user already exists, reload existing user */ const char *s; AB_PROVIDER *pro=NULL; DBG_INFO(AQBANKING_LOGDOMAIN, "Loading established user [%08x]", (unsigned int) uid); AB_User_SetDbId(u, t); s=AB_User_GetBackendName(u); if (s && *s) pro=AB_Banking_GetProvider(ab, s); if (!pro) { DBG_WARN(AQBANKING_LOGDOMAIN, "Provider \"%s\" not found, ignoring user [%s]", s?s:"(null)", AB_User_GetUserId(u)); } else { int rv; GWEN_DB_NODE *dbP; /* reload user from DB */ AB_User_ReadDb(u, db); /* let provider also reload user data */ dbP=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "data/backend"); rv=AB_Provider_ExtendUser(pro, u, AB_ProviderExtendMode_Reload, dbP); if (rv<0) { DBG_WARN(AQBANKING_LOGDOMAIN, "Could not extend user [%s] (%d)", AB_User_GetUserId(u), rv); } } } else { /* user is new, load and add it */ DBG_INFO(AQBANKING_LOGDOMAIN, "Loading new user [%08x]", (unsigned int) uid); u=AB_User_fromDb(ab, db); if (u) { const char *s; AB_PROVIDER *pro=NULL; AB_User_SetDbId(u, t); s=AB_User_GetBackendName(u); if (s && *s) pro=AB_Banking_GetProvider(ab, s); if (!pro) { DBG_WARN(AQBANKING_LOGDOMAIN, "Provider \"%s\" not found, ignoring user [%s]", s, AB_User_GetUserId(u)); } else { int rv; GWEN_DB_NODE *dbP; dbP=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "data/backend"); rv=AB_Provider_ExtendUser(pro, u, AB_ProviderExtendMode_Extend, dbP); if (rv) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); AB_User_free(u); } else { DBG_DEBUG(AQBANKING_LOGDOMAIN, "Adding user"); AB_User_List_Add(u, ab->users); } } } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Could not load user from DB"); } } GWEN_DB_Group_free(db); } se=GWEN_StringListEntry_Next(se); } } else { DBG_INFO(AQBANKING_LOGDOMAIN, "No users"); } GWEN_StringList_free(sl); return 0; }