void OH_GetInstituteDialog_UpdateList(GWEN_DIALOG *dlg) { OH_GETINST_DIALOG *xdlg; const OH_INSTITUTE_SPEC_LIST *sl; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, OH_GETINST_DIALOG, dlg); assert(xdlg); /* clear bank info list */ GWEN_Dialog_SetIntProperty(dlg, "listBox", GWEN_DialogProperty_ClearValues, 0, 0, 0); OH_InstituteSpec_List_Clear(xdlg->matchingSpecList); OH_InstituteData_free(xdlg->selectedData); xdlg->selectedData=NULL; sl=OfxHome_GetSpecs(xdlg->ofxHome); if (sl) { GWEN_BUFFER *tbuf; const OH_INSTITUTE_SPEC *os; const char *s; s=GWEN_Dialog_GetCharProperty(dlg, "nameEdit", GWEN_DialogProperty_Value, 0, NULL); tbuf=GWEN_Buffer_new(0, 256, 0, 1); os=OH_InstituteSpec_List_First(sl); while (os) { const char *bname; bname=OH_InstituteSpec_GetName(os); /* only add matching entries */ if ((s && bname && GWEN_Text_StrCaseStr(bname, s)!=NULL) || !(s && *s)) { OH_InstituteSpec_List_Add(OH_InstituteSpec_dup(os), xdlg->matchingSpecList); createListBoxString(os, tbuf); GWEN_Dialog_SetCharProperty(dlg, "listBox", GWEN_DialogProperty_AddValue, 0, GWEN_Buffer_GetStart(tbuf), 0); GWEN_Buffer_Reset(tbuf); } os=OH_InstituteSpec_List_Next(os); } GWEN_Buffer_free(tbuf); } 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); }
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; }