static int getBankUrl(AB_BANKING *ab, const char *bankId, GWEN_BUFFER *bufServer) { AB_BANKINFO *bi; bi=AB_Banking_GetBankInfo(ab, "de", 0, bankId); if (bi) { AB_BANKINFO_SERVICE_LIST *l; AB_BANKINFO_SERVICE *sv; l=AB_BankInfo_GetServices(bi); assert(l); sv=AB_BankInfoService_List_First(l); while (sv) { const char *st; st=AB_BankInfoService_GetType(sv); if (st && *st && strcasecmp(st, "ebics")==0) { const char *addr; addr=AB_BankInfoService_GetAddress(sv); if (addr && *addr) { GWEN_Buffer_Reset(bufServer); GWEN_Buffer_AppendString(bufServer, addr); return 0; } } sv=AB_BankInfoService_List_Next(sv); } AB_BankInfo_free(bi); } /* if bank info */ return -1; }
void GWENHYWFAR_CB AB_SelectBankInfoDialog_FreeData(void *bp, void *p) { AB_SELECTBANKINFO_DIALOG *xdlg; xdlg=(AB_SELECTBANKINFO_DIALOG *) p; AB_BankInfo_free(xdlg->selectedBankInfo); AB_BankInfo_List2_freeAll(xdlg->matchingBankInfos); free(xdlg->country); free(xdlg->bankCode); GWEN_FREE_OBJECT(xdlg); }
int AH_User_InputTan(AB_USER *u, char *pwbuffer, int minLen, int maxLen){ int rv; char buffer[512]; const char *un; const char *bn=NULL; GWEN_BUFFER *nbuf; AB_BANKINFO *bi; assert(u); un=AB_User_GetUserId(u); /* find bank name */ bi=AB_Banking_GetBankInfo(AB_User_GetBanking(u), "de", "*", AB_User_GetBankCode(u)); if (bi) bn=AB_BankInfo_GetBankName(bi); if (!bn) AB_User_GetBankCode(u); buffer[0]=0; buffer[sizeof(buffer)-1]=0; snprintf(buffer, sizeof(buffer)-1, I18N("Please enter the next TAN\n" "for user %s at %s." "<html>" "Please enter the next TAN for user <i>%s</i> at " "<i>%s</i>." "</html>"), un, bn, un, bn); buffer[sizeof(buffer)-1]=0; nbuf=GWEN_Buffer_new(0, 256 ,0 ,1); AH_User_MkTanName(u, NULL, nbuf); rv=GWEN_Gui_GetPassword(GWEN_GUI_INPUT_FLAGS_TAN | /*GWEN_GUI_INPUT_FLAGS_NUMERIC |*/ GWEN_GUI_INPUT_FLAGS_SHOW, GWEN_Buffer_GetStart(nbuf), I18N("Enter TAN"), buffer, pwbuffer, minLen, maxLen, 0); GWEN_Buffer_free(nbuf); AB_BankInfo_free(bi); return rv; }
int getBankUrl(AB_BANKING *ab, AH_CRYPT_MODE cm, const char *bankId, GWEN_BUFFER *bufServer) { AB_BANKINFO *bi; bi=AB_Banking_GetBankInfo(ab, "de", 0, bankId); if (bi) { AB_BANKINFO_SERVICE_LIST *l; AB_BANKINFO_SERVICE *sv; l=AB_BankInfo_GetServices(bi); assert(l); sv=AB_BankInfoService_List_First(l); while(sv) { const char *st; st=AB_BankInfoService_GetType(sv); if (st && *st && strcasecmp(st, "hbci")==0) { const char *svm; svm=AB_BankInfoService_GetMode(sv); if (svm && *svm) { if (! ((strcasecmp(svm, "pintan")==0) ^ (cm==AH_CryptMode_Pintan))){ const char *addr; addr=AB_BankInfoService_GetAddress(sv); if (addr && *addr) { GWEN_Buffer_Reset(bufServer); GWEN_Buffer_AppendString(bufServer, addr); return 0; } } } } sv=AB_BankInfoService_List_Next(sv); } AB_BankInfo_free(bi); } /* if bank info */ return -1; }
int AB_BankInfo_ReadDb(AB_BANKINFO *st, GWEN_DB_NODE *db) { assert(st); assert(db); AB_BankInfo_SetCountry(st, GWEN_DB_GetCharValue(db, "country", 0, 0)); AB_BankInfo_SetBranchId(st, GWEN_DB_GetCharValue(db, "branchId", 0, 0)); AB_BankInfo_SetBankId(st, GWEN_DB_GetCharValue(db, "bankId", 0, 0)); AB_BankInfo_SetBic(st, GWEN_DB_GetCharValue(db, "bic", 0, 0)); AB_BankInfo_SetBankName(st, GWEN_DB_GetCharValue(db, "bankName", 0, 0)); AB_BankInfo_SetLocation(st, GWEN_DB_GetCharValue(db, "location", 0, 0)); AB_BankInfo_SetStreet(st, GWEN_DB_GetCharValue(db, "street", 0, 0)); AB_BankInfo_SetZipcode(st, GWEN_DB_GetCharValue(db, "zipcode", 0, 0)); AB_BankInfo_SetCity(st, GWEN_DB_GetCharValue(db, "city", 0, 0)); AB_BankInfo_SetRegion(st, GWEN_DB_GetCharValue(db, "region", 0, 0)); AB_BankInfo_SetPhone(st, GWEN_DB_GetCharValue(db, "phone", 0, 0)); AB_BankInfo_SetFax(st, GWEN_DB_GetCharValue(db, "fax", 0, 0)); AB_BankInfo_SetEmail(st, GWEN_DB_GetCharValue(db, "email", 0, 0)); AB_BankInfo_SetWebsite(st, GWEN_DB_GetCharValue(db, "website", 0, 0)); st->services=AB_BankInfoService_List_new(); if (1) {/* just for local vars */ GWEN_DB_NODE *dbT; AB_BANKINFO_SERVICE *e; dbT=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "services"); if (dbT) { GWEN_DB_NODE *dbT2; dbT2=GWEN_DB_FindFirstGroup(dbT, "element"); while(dbT2) { e=AB_BankInfoService_fromDb(dbT2); if (!e) { DBG_ERROR(0, "Bad element for type \"AB_BANKINFO_SERVICE\""); if (GWEN_Logger_GetLevel(0)>=GWEN_LoggerLevel_Debug) GWEN_DB_Dump(dbT2, 2); AB_BankInfo_free(st); return 0; } AB_BankInfoService_List_Add(e, st->services); dbT2=GWEN_DB_FindNextGroup(dbT2, "element"); } /* while */ } /* if (dbT) */ } /* if (1) */ return 0; }
void AB_SelectBankInfoDialog_UpdateList(GWEN_DIALOG *dlg) { AB_SELECTBANKINFO_DIALOG *xdlg; AB_BANKINFO *tbi; const char *s; AB_BANKINFO_LIST2 *bl; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SELECTBANKINFO_DIALOG, dlg); assert(xdlg); /* clear bank info list */ GWEN_Dialog_SetIntProperty(dlg, "listBox", GWEN_DialogProperty_ClearValues, 0, 0, 0); if (xdlg->matchingBankInfos) AB_BankInfo_List2_freeAll(xdlg->matchingBankInfos); xdlg->matchingBankInfos=NULL; /* setup template */ tbi=AB_BankInfo_new(); /* set country */ AB_BankInfo_SetCountry(tbi, xdlg->country); /* set bank code */ s=GWEN_Dialog_GetCharProperty(dlg, "blzEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { int len; char *cpy; len=strlen(s); cpy=(char *) malloc(len+2); assert(cpy); memmove(cpy, s, len+1); /* copy including terminating zero char */ removeAllSpaces((uint8_t *)cpy); len=strlen(cpy); if (len) { /* append joker */ cpy[len]='*'; cpy[len+1]=0; } AB_BankInfo_SetBankId(tbi, cpy); free(cpy); } /* set bank code */ s=GWEN_Dialog_GetCharProperty(dlg, "bicEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { int len; char *cpy; len=strlen(s); cpy=(char *) malloc(len+2); assert(cpy); memmove(cpy, s, len+1); /* copy including terminating zero char */ removeAllSpaces((uint8_t *)cpy); len=strlen(cpy); if (len) { /* append joker */ cpy[len]='*'; cpy[len+1]=0; } AB_BankInfo_SetBic(tbi, cpy); free(cpy); } /* set bank name */ s=GWEN_Dialog_GetCharProperty(dlg, "nameEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); GWEN_Buffer_AppendString(tbuf, "*"); AB_BankInfo_SetBankName(tbi, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* set bank name */ s=GWEN_Dialog_GetCharProperty(dlg, "locationEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); GWEN_Buffer_AppendString(tbuf, "*"); AB_BankInfo_SetLocation(tbi, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } bl=AB_BankInfo_List2_new(); rv=AB_Banking_GetBankInfoByTemplate(xdlg->banking, xdlg->country, tbi, bl); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); AB_BankInfo_List2_freeAll(bl); } else { AB_BANKINFO_LIST2_ITERATOR *it; it=AB_BankInfo_List2_First(bl); if (it) { AB_BANKINFO *bi; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); bi=AB_BankInfo_List2Iterator_Data(it); while (bi) { createListBoxString(bi, tbuf); GWEN_Dialog_SetCharProperty(dlg, "listBox", GWEN_DialogProperty_AddValue, 0, GWEN_Buffer_GetStart(tbuf), 0); GWEN_Buffer_Reset(tbuf); bi=AB_BankInfo_List2Iterator_Next(it); } GWEN_Buffer_free(tbuf); AB_BankInfo_List2Iterator_free(it); } xdlg->matchingBankInfos=bl; } AB_BankInfo_free(tbi); if (GWEN_Dialog_GetIntProperty(dlg, "listBox", GWEN_DialogProperty_Value, 0, -1)>=0) GWEN_Dialog_SetIntProperty(dlg, "okButton", GWEN_DialogProperty_Enabled, 0, 1, 0); else GWEN_Dialog_SetIntProperty(dlg, "okButton", GWEN_DialogProperty_Enabled, 0, 0, 0); }
AB_BANKINFO *AB_BankInfo_List2__freeAll_cb(AB_BANKINFO *st, void *user_data) { AB_BankInfo_free(st); return 0; }
int AH_User_InputTanWithChallenge2(AB_USER *u, const char *challenge, const char *challengeHhd, char *pwbuffer, int minLen, int maxLen){ int rv; char buffer[1024]; const char *un; const char *bn=NULL; GWEN_BUFFER *nbuf; GWEN_BUFFER *xbuf; AB_BANKINFO *bi; uint32_t iflags=0; assert(u); un=AB_User_GetUserId(u); /* find bank name */ bi=AB_Banking_GetBankInfo(AB_User_GetBanking(u), "de", "*", AB_User_GetBankCode(u)); if (bi) bn=AB_BankInfo_GetBankName(bi); if (!bn) AB_User_GetBankCode(u); iflags=GWEN_GUI_INPUT_FLAGS_TAN | GWEN_GUI_INPUT_FLAGS_SHOW; buffer[0]=0; buffer[sizeof(buffer)-1]=0; xbuf=GWEN_Buffer_new(0, 256, 0, 1); if (challengeHhd && *challengeHhd) { DBG_ERROR(AQHBCI_LOGDOMAIN, "ChallengeHHD is [%s]", challengeHhd); GWEN_Buffer_AppendString(xbuf, "$OBEGIN$"); rv=AH_HHD14_Translate(challengeHhd, xbuf); if (rv<0) { GWEN_Buffer_free(xbuf); AB_BankInfo_free(bi); return rv; } GWEN_Buffer_AppendString(xbuf, "$OEND$"); iflags|=GWEN_GUI_INPUT_FLAGS_OPTICAL; /* text version */ snprintf(buffer, sizeof(buffer)-1, I18N("Please enter the TAN\n" "for user %s at %s.\n"), un, bn); buffer[sizeof(buffer)-1]=0; GWEN_Buffer_AppendString(xbuf, buffer); if (challenge && *challenge) { GWEN_Buffer_AppendString(xbuf, challenge); GWEN_Buffer_AppendString(xbuf, "\n"); } else { GWEN_Buffer_AppendString(xbuf, I18N("Please enter the TAN from the device.")); } } else if (challenge && *challenge) { const char *s; /* look for "CHLGUC" */ s=GWEN_Text_StrCaseStr(challenge, "CHLGUC"); if (s) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Challenge contains CHLGUC"); GWEN_Buffer_AppendString(xbuf, "$OBEGIN$"); rv=AH_HHD14_Translate(s, xbuf); if (rv<0) { GWEN_Buffer_free(xbuf); AB_BankInfo_free(bi); return rv; } GWEN_Buffer_AppendString(xbuf, "$OEND$"); iflags|=GWEN_GUI_INPUT_FLAGS_OPTICAL; /* text version */ snprintf(buffer, sizeof(buffer)-1, I18N("Please enter the TAN\n" "for user %s at %s.\n"), un, bn); buffer[sizeof(buffer)-1]=0; GWEN_Buffer_AppendString(xbuf, buffer); /* extract text */ s=GWEN_Text_StrCaseStr(challenge, "CHLGTEXT"); if (s) { /* skip "CHLGTEXT" and 4 digits */ s+=12; /* add rest of the message (replace HTML tags, if any) */ AH_User_AddTextWithoutTags(s, xbuf); } else { /* create own text */ GWEN_Buffer_AppendString(xbuf, I18N("Please enter the TAN from the device.")); } } else { /* no optical challenge */ DBG_ERROR(AQHBCI_LOGDOMAIN, "Challenge contains no optical data"); GWEN_Buffer_AppendString(xbuf, I18N("The server provided the following challenge:")); GWEN_Buffer_AppendString(xbuf, "\n"); GWEN_Buffer_AppendString(xbuf, challenge); } } nbuf=GWEN_Buffer_new(0, 256 ,0 ,1); AH_User_MkTanName(u, challenge, nbuf); rv=GWEN_Gui_GetPassword(iflags, GWEN_Buffer_GetStart(nbuf), I18N("Enter TAN"), GWEN_Buffer_GetStart(xbuf), pwbuffer, minLen, maxLen, 0); GWEN_Buffer_free(xbuf); GWEN_Buffer_free(nbuf); AB_BankInfo_free(bi); return rv; }
int AH_User_InputTanWithChallenge(AB_USER *u, const char *challenge, char *pwbuffer, int minLen, int maxLen){ int rv; char buffer[1024]; const char *un; const char *bn=NULL; GWEN_BUFFER *nbuf; GWEN_BUFFER *xbuf; AB_BANKINFO *bi; assert(u); un=AB_User_GetUserId(u); /* find bank name */ bi=AB_Banking_GetBankInfo(AB_User_GetBanking(u), "de", "*", AB_User_GetBankCode(u)); if (bi) bn=AB_BankInfo_GetBankName(bi); if (!bn) AB_User_GetBankCode(u); buffer[0]=0; buffer[sizeof(buffer)-1]=0; xbuf=GWEN_Buffer_new(0, 256, 0, 1); /* text version */ snprintf(buffer, sizeof(buffer)-1, I18N("Please enter the TAN\n" "for user %s at %s.\n"), un, bn); buffer[sizeof(buffer)-1]=0; GWEN_Buffer_AppendString(xbuf, buffer); if (challenge && *challenge) { GWEN_Buffer_AppendString(xbuf, I18N("The server provided the following challenge:")); GWEN_Buffer_AppendString(xbuf, "\n"); GWEN_Buffer_AppendString(xbuf, challenge); } /* html version */ GWEN_Buffer_AppendString(xbuf, "<html>" "<p>"); snprintf(buffer, sizeof(buffer)-1, I18N("Please enter the TAN for user <i>%s</i> at <i>%s</i>."), un, bn); buffer[sizeof(buffer)-1]=0; GWEN_Buffer_AppendString(xbuf, buffer); GWEN_Buffer_AppendString(xbuf, "</p>"); if (challenge && *challenge) { GWEN_Buffer_AppendString(xbuf, "<p>"); GWEN_Buffer_AppendString(xbuf, I18N("The server provided the following challenge:")); GWEN_Buffer_AppendString(xbuf, "</p>" "<p align=\"center\" >" "<font color=\"blue\">"); GWEN_Buffer_AppendString(xbuf, challenge); GWEN_Buffer_AppendString(xbuf, "</font>" "</p>" "</html>"); } nbuf=GWEN_Buffer_new(0, 256 ,0 ,1); AH_User_MkTanName(u, challenge, nbuf); rv=GWEN_Gui_GetPassword(GWEN_GUI_INPUT_FLAGS_TAN | /*GWEN_GUI_INPUT_FLAGS_NUMERIC |*/ GWEN_GUI_INPUT_FLAGS_SHOW, GWEN_Buffer_GetStart(nbuf), I18N("Enter TAN"), GWEN_Buffer_GetStart(xbuf), pwbuffer, minLen, maxLen, 0); GWEN_Buffer_free(xbuf); GWEN_Buffer_free(nbuf); AB_BankInfo_free(bi); return rv; }
int AH_User_InputPasswd(AB_USER *u, char *pwbuffer, int minLen, int maxLen, int flags){ GWEN_BUFFER *nbuf; int rv; const char *numeric_warning = ""; char buffer[512]; const char *un; const char *bn=NULL; AB_BANKINFO *bi; assert(u); un=AB_User_GetUserId(u); /* find bank name */ bi=AB_Banking_GetBankInfo(AB_User_GetBanking(u), "de", "*", AB_User_GetBankCode(u)); if (bi) bn=AB_BankInfo_GetBankName(bi); if (!bn) AB_User_GetBankCode(u); buffer[0]=0; buffer[sizeof(buffer)-1]=0; if (flags & GWEN_GUI_INPUT_FLAGS_NUMERIC) { numeric_warning = I18N(" You must only enter numbers, not letters."); } if (flags & GWEN_GUI_INPUT_FLAGS_CONFIRM) { snprintf(buffer, sizeof(buffer)-1, I18N("Please enter a new password for \n" "user %s at %s\n" "The input must be at least %d characters long.%s" "<html>" "<p>" "Please enter a new password for user <i>%s</i> at " "<i>%s</i>." "</p>" "<p>" "The input must be at least %d characters long.%s" "</p>" "</html>"), un, bn, minLen, numeric_warning, un, bn, minLen, numeric_warning); } else { snprintf(buffer, sizeof(buffer)-1, I18N("Please enter the password for \n" "user %s at %s\n" "%s" "<html>" "Please enter the password for user <i>%s</i> at" "<i>%s</i>.<br>" "%s" "</html>"), un, bn, numeric_warning, un, bn, numeric_warning); } buffer[sizeof(buffer)-1]=0; AB_BankInfo_free(bi); nbuf=GWEN_Buffer_new(0, 256 ,0 ,1); AH_User_MkPasswdName(u, nbuf); rv=GWEN_Gui_GetPassword(flags, GWEN_Buffer_GetStart(nbuf), I18N("Enter Password"), buffer, pwbuffer, minLen, maxLen, 0); GWEN_Buffer_free(nbuf); return rv; }