int AO_NewUserDialog_UndoIt(GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; AB_USER *u; DBG_ERROR(0, "UndoIt"); assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); u=xdlg->user; if (u) { AB_ACCOUNT_LIST *accountList; int rv; /* delete all accounts created for this user */ accountList=AB_Account_List_new(); rv=AB_Provider_ReadAccounts(xdlg->provider, accountList); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); } else { uint32_t uid; AB_ACCOUNT *a; uid=AB_User_GetUniqueId(u); a=AB_Account_List_First(accountList); while (a) { AB_Account_List_Del(a); if (AB_Account_GetUserId(a)==uid) AB_Provider_DeleteAccount(xdlg->provider, AB_Account_GetUniqueId(a)); a=AB_Account_List_Next(a); } /* while a */ } AB_Account_List_free(accountList); /* delete the user itself */ AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); xdlg->user=NULL; } return GWEN_DialogEvent_ResultHandled; }
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; }
AB_USER *AB_Banking_GetUser(const AB_BANKING *ab, uint32_t uniqueId){ AB_USER *u; assert(ab); if (AB_User_List_GetCount(ab->users)==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "No users"); return 0; } u=AB_User_List_First(ab->users); assert(u); while(u) { if (AB_User_GetUniqueId(u)==uniqueId) break; u=AB_User_List_Next(u); } /* while */ return u; }
static void createUserListBoxString(const AB_USER *u, GWEN_BUFFER *tbuf) { const char *s; char numbuf[32]; uint32_t uid; /* column 1 */ uid=AB_User_GetUniqueId(u); snprintf(numbuf, sizeof(numbuf)-1, "%06d", uid); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(tbuf, numbuf); GWEN_Buffer_AppendString(tbuf, "\t"); /* column 2 */ s=AB_User_GetBankCode(u); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\t"); /* column 3 */ s=AB_User_GetUserId(u); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\t"); /* column 4 */ s=AB_User_GetCustomerId(u); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\t"); /* column 5 */ s=AB_User_GetUserName(u); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\t"); /* column 6 */ s=AB_User_GetBackendName(u); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); }
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 AH_User_Extend(AB_USER *u, AB_PROVIDER *pro, AB_PROVIDER_EXTEND_MODE em, GWEN_DB_NODE *db) { DBG_INFO(AQHBCI_LOGDOMAIN, "Extending user with mode %d", em); if (em==AB_ProviderExtendMode_Create || em==AB_ProviderExtendMode_Extend) { AH_USER *ue; const char *s; int rv; GWEN_NEW_OBJECT(AH_USER, ue); GWEN_INHERIT_SETDATA(AB_USER, AH_USER, u, ue, AH_User_freeData); ue->tanMethodList[0]=-1; ue->tanMethodCount=0; ue->hbci=AH_Provider_GetHbci(pro); ue->tanMethodDescriptions=AH_TanMethod_List_new(); ue->sepaDescriptors=GWEN_StringList_new(); s=AB_User_GetCountry(u); if (!s || !*s) AB_User_SetCountry(u, "de"); ue->msgEngine=AH_MsgEngine_new(); GWEN_MsgEngine_SetEscapeChar(ue->msgEngine, '?'); GWEN_MsgEngine_SetCharsToEscape(ue->msgEngine, ":+\'"); AH_MsgEngine_SetUser(ue->msgEngine, u); GWEN_MsgEngine_SetDefinitions(ue->msgEngine, AH_HBCI_GetDefinitions(ue->hbci), 0); if (em==AB_ProviderExtendMode_Create) { ue->hbciVersion=210; ue->bpd=AH_Bpd_new(); ue->dbUpd=GWEN_DB_Group_new("upd"); ue->maxTransfersPerJob=AH_USER_MAX_TRANSFERS_PER_JOB; ue->maxDebitNotesPerJob=AH_USER_MAX_DEBITNOTES_PER_JOB; } else { /* update db to latest version */ rv=AH_HBCI_UpdateDbUser(ue->hbci, db); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not update user db (%d)", rv); GWEN_Gui_ShowError(I18N("AqBanking Settings Database Error"), I18N("Your settings database might be in an inconsistent state!")); return rv; } AH_User_ReadDb(u, db); AH_User_LoadTanMethods(u); AH_User_LoadSepaDescriptors(u); if (rv==1) { /* updated config, write it now */ DBG_NOTICE(AQHBCI_LOGDOMAIN, "Writing back updated HBCI user %d", AB_User_GetUniqueId(u)); rv=AB_Banking_SaveUserConfig(AB_Provider_GetBanking(pro), u, 1); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not save user db (%d)", rv); GWEN_Gui_ShowError(I18N("AqBanking Settings Database Error"), I18N("Your settings database might be in an inconsistent state!")); return rv; } } } } else if (em==AB_ProviderExtendMode_Reload) { /* just reload user */ AH_User_ReadDb(u, db); AH_User_LoadTanMethods(u); AH_User_LoadSepaDescriptors(u); } else { AH_USER *ue; ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); if (em==AB_ProviderExtendMode_Add) { } else if (em==AB_ProviderExtendMode_Save) { AH_User_toDb(u, db); } /* if save */ } return 0; }
int listUsers(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; int xml=0; AB_USER_LIST2 *ul; const GWEN_ARGS args[]={ { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "xml", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "xml", /* long option */ "Export as xml", /* short description */ 0 }, { 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(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } rv=AB_Banking_OnlineInit(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } xml=GWEN_DB_VariableExists(db, "xml"); if( xml ) { fprintf( stdout, "<?xml version=\"1.0\"?>\n" ); fprintf( stdout, "<users>\n" ); } ul=AB_Banking_FindUsers(ab, EBC_PROVIDER_NAME, "*", "*", "*", "*"); if (ul) { AB_USER_LIST2_ITERATOR *uit; uit=AB_User_List2_First(ul); if (uit) { AB_USER *u; int i=0; u=AB_User_List2Iterator_Data(uit); assert(u); while(u) { if( !xml ) { fprintf(stdout, "User %d: Bank: %s/%s User Id: %s Customer Id: %s\n", i++, AB_User_GetCountry(u), AB_User_GetBankCode(u), AB_User_GetUserId(u), AB_User_GetCustomerId(u)); } else { const char *name = AB_User_GetUserName(u); fprintf( stdout, " <user>\n" ); fprintf( stdout, " <userUniqueId>%d</userUniqueId>\n", AB_User_GetUniqueId(u) ); if( !name ) fprintf( stdout, " <UserName></UserName>\n" ); else fprintf( stdout, " <UserName><![CDATA[%s]]></UserName>\n", name ); fprintf( stdout, " <UserId>%s</UserId>\n", AB_User_GetUserId(u) ); fprintf( stdout, " <CustomerId>%s</CustomerId>\n", AB_User_GetCustomerId(u) ); fprintf( stdout, " <BankCode>%s</BankCode>\n", AB_User_GetBankCode(u) ); fprintf( stdout, " <Country>%s</Country>\n", AB_User_GetCountry(u) ); fprintf( stdout, " <LastSessionId>%d</LastSessionId>\n", AB_User_GetLastSessionId(u) ); fprintf( stdout, " </user>\n\n" ); } u=AB_User_List2Iterator_Next(uit); } AB_User_List2Iterator_free(uit); } AB_User_List2_free(ul); } else { fprintf(stderr, "No users found.\n"); } if( xml ) { fprintf( stdout, "</users>\n" ); } rv=AB_Banking_OnlineFini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; }
int AB_Banking_AddUser(AB_BANKING *ab, AB_USER *u) { int rv; AB_USER *uTmp; char groupName[32]; GWEN_DB_NODE *db; GWEN_DB_NODE *dbP; const char *s; assert(ab); assert(u); s=AB_User_GetUserId(u); if (!s || *s==0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing user id"); return GWEN_ERROR_INVALID; } uTmp=AB_User_List_First(ab->users); while(uTmp) { if (uTmp==u) { DBG_INFO(AQBANKING_LOGDOMAIN, "User already added!"); return GWEN_ERROR_INVALID; } uTmp=AB_User_List_Next(uTmp); } rv=AB_Provider_ExtendUser(AB_User_GetProvider(u), u, AB_ProviderExtendMode_Add, NULL); if (rv) return rv; db=GWEN_DB_Group_new("user"); AB_User_toDb(u, db); dbP=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "data/backend"); rv=AB_Provider_ExtendUser(AB_User_GetProvider(u), u, AB_ProviderExtendMode_Save, dbP); if (rv) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(db); return rv; } rv=GWEN_ConfigMgr_GetUniqueId(ab->configMgr, AB_CFG_GROUP_USERS, groupName, sizeof(groupName)-1); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to create a unique id for user [%08x] (%d)", AB_User_GetUniqueId(u), rv); GWEN_DB_Group_free(db); return rv; } groupName[sizeof(groupName)-1]=0; rv=GWEN_ConfigMgr_LockGroup(ab->configMgr, AB_CFG_GROUP_USERS, groupName); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to lock user config [%08x] (%d)", AB_User_GetUniqueId(u), rv); GWEN_DB_Group_free(db); return rv; } rv=GWEN_ConfigMgr_SetGroup(ab->configMgr, AB_CFG_GROUP_USERS, groupName, db); GWEN_DB_Group_free(db); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to save user config [%08x] (%d)", AB_User_GetUniqueId(u), rv); GWEN_ConfigMgr_UnlockGroup(ab->configMgr, AB_CFG_GROUP_USERS, groupName); return rv; } /* unlock */ rv=GWEN_ConfigMgr_UnlockGroup(ab->configMgr, AB_CFG_GROUP_USERS, groupName); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to unlock user config [%08x] (%d)", AB_User_GetUniqueId(u), rv); return rv; } AB_User_SetDbId(u, groupName); AB_User_List_Add(u, ab->users); return 0; }