Package org.kapott.hbci.manager

Examples of org.kapott.hbci.manager.HBCIHandler


      Application.getMessagingFactory().sendMessage(new StatusBarMessage(i18n.tr("Bitte w�hlen Sie eine Schl�sseldatei aus"),StatusBarMessage.TYPE_ERROR));
      return;
    }
   
    HBCIPassport passport = null;
    HBCIHandler handler = null;
    try
    {
      String s = i18n.tr("Sind Sie sicher?");
      if (!Application.getCallback().askUser(s))
        return;

      passport = key.load();
      passport.syncSigId();

      QueryMessage msg = new QueryMessage(passport);
      Application.getMessagingFactory().getMessagingQueue("hibiscus.passport.rdh.hbciversion").sendSyncMessage(msg);
      Object data = msg.getData();
      if (data == null || !(data instanceof String))
        throw new ApplicationException(i18n.tr("HBCI-Version nicht ermittelbar"));
     
      String version = (String)msg.getData();
      Logger.info("using hbci version: " + version);
     
      handler = new HBCIHandler(version,passport);
      handler.close();
      handler = null;
      Application.getMessagingFactory().sendMessage(new StatusBarMessage(i18n.tr("Signatur-ID erfolgreich synchronisiert"), StatusBarMessage.TYPE_SUCCESS));
    }
    catch (ApplicationException ae)
    {
      Application.getMessagingFactory().sendMessage(new StatusBarMessage(i18n.tr("Fehler beim Synchronisieren der Signatur: {0}",ae.getMessage()), StatusBarMessage.TYPE_ERROR));
    }
    catch (OperationCanceledException oce)
    {
      Logger.warn("operation cancelled");
    }
    catch (Exception e)
    {
      Throwable current = e;
      for (int i=0;i<10;++i)
      {
        if (current == null)
          break;
        if (current instanceof NeedKeyAckException)
        {
          Application.getMessagingFactory().sendMessage(new StatusBarMessage(i18n.tr("Schl�ssel noch nicht freigegeben"), StatusBarMessage.TYPE_ERROR));
          return;
        }
        current = current.getCause();
      }
      Logger.error("unable to sync key ",e);
      Application.getMessagingFactory().sendMessage(new StatusBarMessage(i18n.tr("Fehler beim Synchronisieren der Signatur: {0}",e.getMessage()), StatusBarMessage.TYPE_ERROR));
    }
    finally
    {
      try
      {
        if (handler != null)
          handler.close();
      }
      catch (Throwable t)
      {
        Logger.error("error while closing handler",t);
      }
View Full Code Here


    public static void main(String[] args)
        throws Exception
    {
        // HBCI Objekte
        HBCIPassport passport   = null;
        HBCIHandler  hbciHandle = null;

        // HBCI4Java initialisieren
        HBCIUtils.init(HBCIUtils.loadPropertiesFile(new FileSystemClassLoader(),"/home/jonas/java/hbci/jw.hbci4java.properties"),
                       new MyHBCICallback());

        // Nutzer-Passport initialisieren
        Object passportDescription="Passport f�r Kontoauszugs-Demo";
        passport=AbstractHBCIPassport.getInstance(passportDescription);
        //passport.clearBPD();

        try {
            // ein HBCI-Handle f�r einen Nutzer erzeugen
            String version=passport.getHBCIVersion();
            //hbciHandle=new HBCIHandler("300", passport);
            hbciHandle=new HBCIHandler((version.length()!=0)?version:"plus",passport);

            System.out.println("Alle Gesch�ftsvorf�lle in HBCI4Java: " + hbciHandle.getKernel().getAllLowlevelJobs().toString());
            System.out.println("Unterst�tzte Gesch�ftsvorf�lle der Bank: " + hbciHandle.getSupportedLowlevelJobs().toString());
           
            //"Trockentest" des Umsatzparsers mit vorgebenen Daten
            //test_ums(hbciHandle, "/home/jonas/java/hbci/msg536.txt");
            //test_ums(hbciHandle, "/home/jonas/java/hbci/msg536_hbci-zka.txt");
           
            //Konten ausgeben
            System.out.println("Kontenliste:");
            System.out.println("------------");
            Konto[] konten = passport.getAccounts();
            for (int i=0; i<konten.length; i++) {
                System.out.println("Konto " + i + ":  " + konten[i]);
            }           
           
            BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
            String line;
            int umsatzkto=-1, depotkto=-1;
           
            System.out.print("Bitte Konto f�r Umsatzliste eingeben (-1, um zu �berspringen): ");
            do {
                line = rd.readLine();
                try {
                    umsatzkto = Integer.parseInt(line);
                    if (umsatzkto >= -1 && umsatzkto < konten.length) {
                        break;
                    } else {
                        System.out.println("Ung�ltiges Konto: " + line);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } while (line != null);
            System.out.print("Bitte Konto f�r Depotliste eingeben (-1, um zu �berspringen): ");
            do {
                line = rd.readLine();
                try {
                    depotkto = Integer.parseInt(line);
                    if (depotkto >= -1 && depotkto < konten.length) {
                        break;
                    } else {
                        System.out.println("Ung�ltiges Konto: " + line);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } while (line != null);
           
            // Ums�tze auflisten (als Demo, dass es grunds�tzlich funktioniert)
            if (umsatzkto >= 0)
                analyzeReportOfTransactions(passport, hbciHandle, konten[umsatzkto]);
           
            // Depotinhalt auflisten
            if (depotkto >= 0)
                analyzeDepot(passport, hbciHandle, konten[depotkto]);

        } finally {
            if (hbciHandle!=null) {
                hbciHandle.close();
            } else if (passport!=null) {
                passport.close();
            }
        }
    }
View Full Code Here

      ((AbstractHBCIPassport)hbciPassport).setPersistentData(CONTEXT_CONFIG,config);

      Logger.info("ddv passport opened");

      Logger.info("  hbci version: " + config.getHBCIVersion());
      handler = new HBCIHandler(config.getHBCIVersion(),hbciPassport);
      Logger.info("ddv handler opened");
     
      return handler;
    }
    catch (RemoteException re)
View Full Code Here

        HBCIPassport passport=AbstractHBCIPassport.getInstance();
       
        try {
            // initialisieren des hbci-handlers f�r das passport
            String version=passport.getHBCIVersion();
            HBCIHandler handler=new HBCIHandler(version.length()!=0?version:HBCIUtils.getParam("default.hbciversion"),passport);
           
            try {
                // batch-datei �ffnen
                BufferedReader reader=new BufferedReader(new FileReader(args[2]));
                String line;
               
                try {
                    int       state=STATE_NEED_JOBNAME;
                    boolean   lljob=false;           // low- oder high-level-job?
                    HBCIJob   job=null;              // job-objekt
                    String    jobid=null;            // job-bezeichner
                    String    customerId=null;       // customer-id f�r job
                    Hashtable<String, Object> jobs=new Hashtable<String, Object>()// liste aller jobs
                       
                    // batch-datei zeilenweise einlesen und auswerten
                    while ((line=reader.readLine())!=null) {
                        line=line.trim();
                        // kommentare ignorieren
                        if (line.startsWith("#")) {
                            continue;
                        }
                       
                        if (state==STATE_NEED_JOBNAME && line.length()!=0) {
                            // es wird der beginn einer job-definition erwartet
                           
                            StringTokenizer tok=new StringTokenizer(line,":");
                            // jobnamen extrahieren
                            String          jobname=tok.nextToken().trim();
                           
                            if (jobname.equals("--")) {
                                // wenn jobname="--", dann neue hbci-message erzeugen
                                customerId=(tok.hasMoreTokens()?tok.nextToken().trim():null);
                                handler.newMsg(customerId);
                            } else {
                                // ansonsten handelt es sich um einen "richtigen" job
                                String resultMode;
                               
                                if (jobname.startsWith("_")) {
                                    // wenn jobname mit "_" beginnt, handelt es
                                    // sich um einen low-level-jobnamen
                                   
                                    job=handler.newLowlevelJob(jobname.substring(1));
                                    lljob=true;
                                   
                                    // zu einem low-level-job m�ssen zus�tzlich noch
                                    // eine ID (zum sp�teren wiederfinden des jobs)
                                    // und optional eine kunden-id festgelegt werden
                                    jobid=tok.nextToken().trim();
                                    resultMode="toString";
                                    customerId=(tok.hasMoreTokens()?tok.nextToken().trim():null);
                                } else {
                                    // wenn jobname nicht mit "_" beginnt, ist es
                                    // ein high-level-job
                                   
                                    job=handler.newJob(jobname);
                                    lljob=false;
                                   
                                    // zu einem high-level-job m�ssen zus�tzlich noch
                                    // eine ID (zum sp�teren wiederfinden des jobs),
                                    // ein modus f�r die ausgabe der ergebisdaten
                                    // und optional eine kunden-id festgelegt werden
                                    jobid=tok.nextToken().trim();
                                    resultMode=tok.nextToken().trim();
                                    customerId=(tok.hasMoreTokens()?tok.nextToken().trim():null);
                                }
                               
                                // job in menge der jobs speichern
                                jobs.put(jobid,job);
                                // ... und ausgabemodus f�r diesen job merken
                                jobs.put(jobid+"_resultMode",resultMode);
                                state=STATE_NEED_JOBPARAMS;
                            }
                        } else if (state==STATE_NEED_JOBPARAMS) {
                            // bis zur n�chsten leerzeile oder dem dateienende
                            // werden jetzt alle zeilen als job-parameter
                            // interpretiert
                           
                            if (line.length()!=0) {
                                StringTokenizer tok=new StringTokenizer(line,"=");
                               
                                // parameternamen und -wert holen
                                String paramName=tok.nextToken().trim();
                                if (!tok.hasMoreTokens()) {
                                    continue;
                                }
                                String paramValue=tok.nextToken().trim();
                               
                                // f�r low-level-jobs m�ssen die parameter mit
                                // einem "_" beginnen, bei high-level-jobs
                                // d�rfen sie *nicht* mit einem "_" beginnen
                                if (paramName.startsWith("_")!=lljob) {
                                    if (lljob) {
                                        throw new HBCI_Exception("*** "+jobid+" is a lowlevel job, so parameter names have to start with '_'");
                                    }
                                    throw new HBCI_Exception("*** "+jobid+" is a highlevel job, so parameter names must not start with '_'");
                                }
                               
                                // wenn es sich um einen low-level-job, den
                                // f�hrenden "_" beim parameter-namen entfernen
                                if (lljob) {
                                    paramName=paramName.substring(1);
                                }
                               
                                // wenn der parameter-wert mit einem "<" beginnt,
                                // so soll der wert des parameter aus der datei
                                // gelesen werden, die nach dem "<" spezifiziert
                                // ist
                                if (paramValue.startsWith("<")) {
                                    // �ffnen der datei
                                    String          filename=paramValue.substring(1);
                                    FileInputStream fin=new FileInputStream(filename);
                                   
                                    // puffer f�r einlesen der datei
                                    byte[]       buffer=new byte[2048];
                                    int          len;
                                    StringBuffer content=new StringBuffer();
                                   
                                    // datei in stringbuffer einlesen
                                    while ((len=fin.read(buffer))>0) {
                                        content.append(new String(buffer,0,len,"ISO-8859-1"));
                                    }
                                   
                                    // datei schlie�en
                                    fin.close();
                                    // parameterwert ist inhalt des stringbuffers
                                    paramValue=content.toString();
                                }
                               
                                // parameter f�r aktuellen job setzen
                                job.setParam(paramName,paramValue);
                            } else {
                                // leerzeile gefunden - damit ist die parameter-
                                // spez. f�r den aktuellen job beendet
                               
                                // aktuellen job zur job-queue hinzuf�gen
                                job.addToQueue(customerId);
                                state=STATE_NEED_JOBNAME;
                            }
                        }
                    }
                   
                    // wenn noch ein job "in bearbeitung" ist, der noch nicht
                    // zur job-queue hinzugef�gt wurde, dann das jetzt nachholen
                    if (state==STATE_NEED_JOBPARAMS) {
                        job.addToQueue(customerId);
                    }
                   
                    // alle batch-jobs ausf�hren
                    handler.execute();
                   
                    // ergebnis-writer f�r ok-jobs und f�r fehlerhafte jobs
                    // erzeugen
                    PrintWriter writer=new PrintWriter(new FileWriter(args[3]));
                    PrintWriter errWriter=new PrintWriter(new FileWriter(args[3]+".err"));
                   
                    try {
                        // alle bekannten job-bezeichner (IDs) durchlaufen
                        for (Enumeration<String> jobIds=jobs.keys();jobIds.hasMoreElements();) {
                            jobid=jobIds.nextElement();
                            if (jobid.endsWith("_resultMode")) {
                                continue;
                            }
                            // den dazugeh�rigen job holen
                            job=(HBCIJob)jobs.get(jobid);
                           
                            if (job.getJobResult().isOK()) {
                                // wenn der job erfolgreich gelaufen ist
                               
                                // ausgabe von jobid
                                writer.println("jobid:"+jobid);
                                // ausgabe der hbci-status-meldungen zu diesem job
                                writer.println("job status:");
                                writer.println(job.getJobResult().getJobStatus());
                               
                                // ausgabe der job-ergebnisse
                                writer.println("job result:");
                               
                                String resultMode=(String)jobs.get(jobid+"_resultMode");
                                if (resultMode.equals("props")) {
                                    // ausgabemodus="props": alle ergebnisdaten
                                    // als lowlevel-properties ausgeben
                                   
                                    Properties result=job.getJobResult().getResultData();
                                    if (result!=null) {
                                        // array mit result-properties holen und
                                        // sortieren
                                        String[] keys=(String[])new ArrayList(result.keySet()).toArray(new String[0]);
                                        Arrays.sort(keys);
                                       
                                        // ausgabe aller result-properties
                                        for (int i=0;i<keys.length;i++) {
                                            String name=keys[i];
                                            String value=result.getProperty(name);
                                            writer.println(name+"="+value);
                                        }
                                    }
                                } else {
                                    // ausgabemodus="toString": job-spezifische
                                    // toString()-methode f�r formatierung der
                                    // ergebnisdaten aufrufen
                                    writer.println(job.getJobResult());
                                }
                               
                                // leerzeile einf�gen
                                writer.println();
                            } else {
                                // wenn ein job fehler erzeugt hatte, die fehlermeldungen
                                // an die err-datei anh�ngen
                               
                                errWriter.println("jobid:"+jobid);
                                errWriter.println("global status:");
                                errWriter.println(job.getJobResult().getGlobStatus().getErrorString());
                                errWriter.println("job status:");
                                errWriter.println(job.getJobResult().getJobStatus().getErrorString());
                                errWriter.println();
                            }
                        }
                    } finally {
                        writer.close();
                        errWriter.close();
                    }
                } finally {
                    reader.close();
                }
            } finally {
                handler.close();
                passport=null;
            }
        } finally {
            if (passport!=null) {
                passport.close();
View Full Code Here

            // wenn es sich um das pintan-verfahren im zweischritt-modus handelt,
            // m�ssen evtl. zus�tzliche nachrichten bzw. segmente eingef�hrt werden
           
            HBCIUtils.log("afterCustomDialogInitHook: patching message queues for twostep method",HBCIUtils.LOG_DEBUG);
           
            HBCIHandler handler     = (HBCIHandler)getParentHandlerData();
            Properties  secmechInfo = getCurrentSecMechInfo();
            String      segversion  = secmechInfo.getProperty("segversion");
            String      process     = secmechInfo.getProperty("process");
           
            List<ArrayList<HBCIJobImpl>> msgs=dialog.getMessages();
            List<ArrayList<HBCIJobImpl>> new_msgs=new ArrayList<ArrayList<HBCIJobImpl>>();
           
            // durch alle urspr�nglichen nachrichten laufen
            for (Iterator<ArrayList<HBCIJobImpl>> i=msgs.iterator();i.hasNext();) {
                ArrayList<HBCIJobImpl> msg_tasks= i.next();
                ArrayList<HBCIJobImpl> new_msg_tasks=new ArrayList<HBCIJobImpl>();
               
                ArrayList<HBCIJobImpl> additional_msg_tasks=null;
               
                // jeden task einer nachricht ansehen
                for (Iterator<HBCIJobImpl> j=msg_tasks.iterator();j.hasNext();) {
                    HBCIJobImpl task= j.next();
                    String      segcode=task.getHBCICode();

                    if (getPinTanInfo(segcode).equals("J")) {
                        // es handelt sich um einen tan-pflichtigen task
                        HBCIUtils.log("found task that requires a TAN: "+segcode+" - have to patch message queue",HBCIUtils.LOG_DEBUG);
                       
                        if (process.equals("1")) {
                            // prozessvariante 1
                            HBCIUtils.log("process #1: adding new message with HKTAN(p=1,hash=...) before current message",HBCIUtils.LOG_DEBUG);
                           
                            // neue msg erzeugen
                            additional_msg_tasks=new ArrayList<HBCIJobImpl>();

                            GVTAN2Step hktan = (GVTAN2Step) handler.newJob("TAN2Step");
                           
                            // muessen wir explizit setzen, damit wir das HKTAN in der gleichen Version
                            // schicken, in der das HITANS kam.
                            hktan.setSegVersion(segversion);
                           
                            hktan.setParam("process",process);
                            hktan.setParam("notlasttan","N");
                           
                            // willuhn 2011-05-16
                            // Siehe FinTS_3.0_Security_Sicherheitsverfahren_PINTAN_Rel_20101027_final_version.pdf, Seite 58
                            int hktanVersion = Integer.parseInt(hktan.getSegVersion());
                            if (hktanVersion >= 5)
                            {
                              // Bis HKTAN4/hhd1.3 wurde das noch als Challenge-Parameter uebermittelt. Jetzt hat es einen
                              // eigenen Platz in den Job-Parametern
                              hktan.setParam("ordersegcode",task.getHBCICode());

                              // Zitat aus HITANS5: Diese Funktion erm�glicht das Sicherstellen einer g�ltigen Kontoverbindung
                              // z. B. f�r die Abrechnung von SMS-Kosten bereits vor Erzeugen und Versenden einer
                              // (ggf. kostenpflichtigen!) TAN.
                              //  0: Auftraggeberkonto darf nicht angegeben werden
                              //  2: Auftraggeberkonto muss angegeben werden, wenn im Gesch�ftsvorfall enthalten
                              String noa = secmechInfo.getProperty("needorderaccount","");
                              HBCIUtils.log("needorderaccount=" + noa,HBCIUtils.LOG_INFO);
                              if (noa.equals("2"))
                              {
                                Konto k = task.getOrderAccount();
                                if (k != null)
                                {
                                    HBCIUtils.log("applying orderaccount to HKTAN for " + task.getHBCICode(),HBCIUtils.LOG_INFO);
                                    hktan.setParam("orderaccount",k);
                                }
                                else
                                {
                                    HBCIUtils.log("orderaccount needed, but not found in " + task.getHBCICode(),HBCIUtils.LOG_WARN);
                                }
                              }
                            }
                           
                            // TODO: das f�r mehrfachsignaturen
                            // hktan.setParam("notlasttan","J");
                           
                            // orderhash ermitteln
                            try {
                                // TODO: hier wird jetzt *immer* segnum=3 angenommen,
                                // kann in Einzelf�llen evtl. auch anders sein (?)
                                SEG seg=task.createJobSegment(3);
                                seg.validate();
                                String segdata=seg.toString(0);
                                HBCIUtils.log("calculating hash for jobsegment: "+segdata,HBCIUtils.LOG_DEBUG2);
                               
                                // zu verwendenden Hash-Algorithmus von dem Wert "orderhashmode" aus den BPD abh�ngig machen
                                String orderhashmode=getOrderHashMode();
                                String alg=null;
                                String provider=null;
                                if (orderhashmode.equals("1")) {
                                    alg="RIPEMD160";
                                    provider="CryptAlgs4Java";
                                } else if (orderhashmode.equals("2")) {
                                    alg="SHA-1";
                                }
                                HBCIUtils.log("using "+alg+"/"+provider+" for generating order hash", HBCIUtils.LOG_DEBUG);
                                MessageDigest digest=MessageDigest.getInstance(alg,provider);
                               
                                digest.update(segdata.getBytes(Comm.ENCODING));
                                byte[] hash=digest.digest();
                                SEGFactory.getInstance().unuseObject(seg);
                                hktan.setParam("orderhash",new String(hash,Comm.ENCODING));
                            } catch (Exception e) {
                                throw new HBCI_Exception(e);
                            }
                           
                            // TODO: evtl. listindex ermitteln
                            // hktan.setParam("listidx","");
                           
                            // wenn needchallengeklass gesetzt ist:
                            if (secmechInfo.getProperty("needchallengeklass","N").equals("J"))
                            {
                                HBCIUtils.log("we are in PV #1, and a challenge klass is required",HBCIUtils.LOG_DEBUG);
                                ChallengeInfo cinfo = ChallengeInfo.getInstance();
                                cinfo.applyParams(task,hktan,secmechInfo);
                            }

                            // willuhn 2011-05-09: Bei Bedarf noch das TAN-Medium erfragen
                            applyTanMedia(hktan);
                           
                            // hktan-job zur neuen msg hinzuf�gen
                            additional_msg_tasks.add(hktan);
                           
                            // diese neue msg vor der aktuellen in die msg-queue einstellen
                            new_msgs.add(additional_msg_tasks);
                            // und gleich wieder auf null setzen, damit diese msg nicht
                            // sp�ter nochmal *nach* der aktuellen msg eingef�gt wird
                            additional_msg_tasks=null;
                           
                            // den aktuellen task ganz normal zur aktuellen msg hinzuf�gen
                            new_msg_tasks.add(task);
                        } else {
                            // prozessvariante 2
                            HBCIUtils.log("process #2: adding new task HKTAN(p=4) to current message",HBCIUtils.LOG_DEBUG);
                           
                            // den aktuellen task ganz normal zur aktuellen msg hinzuf�gen
                            new_msg_tasks.add(task);
                           
                            // dazu noch einen hktan-job hinzuf�gen
                            GVTAN2Step hktan1 = (GVTAN2Step) handler.newJob("TAN2Step");

                            // muessen wir explizit setzen, damit wir das HKTAN in der gleichen Version
                            // schicken, in der das HITANS kam.
                            hktan1.setSegVersion(segversion);

                            hktan1.setParam("process","4");
                            // TODO: evtl. listindex ermitteln
                            // hktan1.setParam("listidx","");
                            // TODO: das f�r mehrfachsignaturen
                            // hktan1.setParam("notlasttan","N");

                            // willuhn 2011-05-09: Bei Bedarf noch das TAN-Medium erfragen
                            applyTanMedia(hktan1);
                           
                            // den hktan-job zus�tzlich zur aktuellen msg hinzuf�gen
                            new_msg_tasks.add(hktan1);
                           
                            // eine neue msg f�r das einreichen der tan erzeugen
                            HBCIUtils.log("creating new msg with HKTAN(p=2,orderref=DELAYED)",HBCIUtils.LOG_DEBUG);
                            additional_msg_tasks=new ArrayList<HBCIJobImpl>();
                           
                            // HKTAN-job f�r das einreichen der TAN erzeugen
                            GVTAN2Step hktan2 = (GVTAN2Step) handler.newJob("TAN2Step");

                            // muessen wir explizit setzen, damit wir das HKTAN in der gleichen Version
                            // schicken, in der das HITANS kam.
                            hktan1.setSegVersion(segversion);

View Full Code Here

      // spaeter in den HBCI-Callbacks noch, aus welcher Config der Passport
      // erstellt wurde. Wird z.Bsp. vom Payment-Server benoetigt.
      ((AbstractHBCIPassport)hbciPassport).setPersistentData(CONTEXT_CONFIG,activeKey);

      Logger.info("using HBCI version " + hbciVersion);
      handler = new HBCIHandler(hbciVersion,hbciPassport);
      return handler;
    }
    catch (RemoteException re)
    {
      close();
View Full Code Here

    {
        passport = passportFactory.createPassport();
        if (passport != null)
        {
            String version = passport.getHBCIVersion();
            handler = new HBCIHandler((version.length() != 0) ? version : "plus", passport);
        }
    }
View Full Code Here

  /**
   * @see de.willuhn.jameica.hbci.passports.rdh.keyformat.KeyFormat#createKey(java.io.File)
   */
  public RDHKey createKey(File file) throws ApplicationException, OperationCanceledException
  {
    HBCIHandler handler = null;
    RDHKeyImpl key      = null;
   
    try
    {
      key = new RDHKeyImpl(file);
      key.setFormat(this);

      // Wir machen den Handler einmal auf und wieder zu, damit
      // der Schluessel gleich initialisiert wird.
      HBCIPassport passport = load(key,true);
      passport.saveChanges();
      passport.syncSigId();
      passport.syncSysId();

      // Bei der Neuerstellung fragen wir immer den User nach der HBCI-Version
      // Wir fragen die HBCI-Version via Messaging ab, damit sie ggf. auch
      // (z.Bsp. vom Payment-Server) automatisch beantwortet werden kann.
      QueryMessage msg = new QueryMessage(passport);
      Application.getMessagingFactory().getMessagingQueue("hibiscus.passport.rdh.hbciversion").sendSyncMessage(msg);
      Object data = msg.getData();
      if (data == null || !(data instanceof String))
        throw new ApplicationException(i18n.tr("HBCI-Version nicht ermittelbar"));
     
      String version = (String)msg.getData();
      Logger.info("using hbci version: " + version);
     
      handler = new HBCIHandler(version,passport);
      handler.close();
      handler = null;
      Application.getMessagingFactory().sendMessage(new StatusBarMessage(i18n.tr("Schl�ssel erfolgreich erstellt"), StatusBarMessage.TYPE_SUCCESS));
      return key;
    }
    catch (ApplicationException ae)
    {
      throw ae;
    }
    catch (OperationCanceledException oce)
    {
      throw oce;
    }
    catch (Exception e)
    {
      OperationCanceledException oce = (OperationCanceledException) HBCIProperties.getCause(e,OperationCanceledException.class);
      if (oce != null)
        throw oce;
       
      ApplicationException ae = (ApplicationException) HBCIProperties.getCause(e,ApplicationException.class);
      if (ae != null)
        throw ae;

      NeedKeyAckException ack = (NeedKeyAckException) HBCIProperties.getCause(e,NeedKeyAckException.class);
      if (ack != null)
      {
        Application.getMessagingFactory().sendMessage(new StatusBarMessage(i18n.tr("Schl�ssel erfolgreich erstellt"), StatusBarMessage.TYPE_SUCCESS));
        String msg = i18n.tr("Bitte senden Sie den INI-Brief an Ihre Bank\nund warten Sie auf die Freischaltung durch die Bank.");
        try
        {
          Application.getCallback().notifyUser(msg);
        }
        catch (Exception e2)
        {
          Logger.error("unable to notify user",e2);
          Application.getMessagingFactory().sendMessage(new StatusBarMessage(msg, StatusBarMessage.TYPE_SUCCESS));
        }
        return key;
      }
     
      Logger.error("unable to create key " + file.getAbsolutePath(),e);
      throw new ApplicationException(i18n.tr("Fehler beim Erstellen des Schl�ssels: {0}",e.getMessage()));
    }
    finally
    {
      try
      {
        if (handler != null)
          handler.close();
      }
      catch (Throwable t)
      {
        Logger.error("error while closing handler",t);
      }
View Full Code Here

      throw new ApplicationException(i18n.tr("Bitte w�hlen Sie ein Sicherheits-Medium aus."));

    BackgroundTask task = new BackgroundTask() {
      public void run(final ProgressMonitor monitor) throws ApplicationException
      {
        HBCIHandler handler = null;
        Target target       = null;
        try {
          monitor.setStatusText(i18n.tr("Teste Sicherheits-Medium..."));

          // Log-Ausgaben temporaer auch mit im Progressbar-Fenster
          // ausgeben
          target = new Target() {
            public void write(Message msg) throws Exception
            {
              monitor.addPercentComplete(2);
              format(monitor,msg.getText());
            }
            public void close() throws Exception
            {
            }
          };
          Logger.addTarget(target);

          PassportHandle handle = null;
          if (context instanceof Passport)
            handle = ((Passport)context).getHandle();
          else
            handle = (PassportHandle) context;
          handler = handle.open();
          handle.close(); // nein, nicht im finally, denn wenn das Oeffnen
                          // fehlschlaegt, ist nichts zum Schliessen da ;)

          Logger.flush();
          monitor.setStatus(ProgressMonitor.STATUS_DONE);
          monitor.setPercentComplete(100);
          monitor.setStatusText(i18n.tr("Sicherheits-Medium erfolgreich getestet."));
          Application.getMessagingFactory().sendMessage(new StatusBarMessage(i18n.tr("Sicherheits-Medium erfolgreich getestet."), StatusBarMessage.TYPE_SUCCESS));
          removeTarget(target);
         
          if (!Application.getCallback().askUser(i18n.tr("Test erfolgreich. Konten automatisch anlegen?")))
            return;

          try
          {
            new KontoMerge().handleAction(handle.getKonten());
            // Wir starten die aktuelle View neu, damit die Liste der Konten
            // gleich aktualisiert wird
            GUI.startView(GUI.getCurrentView().getClass(),GUI.getCurrentView().getCurrentObject());
          }
          catch (Exception e)
          {
            // Das darf fehlschlagen. Zum Beispiel, wenn die Bank sowas nicht unterstuetzt
            Logger.error("unable to fetch accounts",e);
            monitor.log(i18n.tr("Automatisches Anlegen der Konten fehlgeschlagen. Bitte legen Sie sie manuell an"));
          }
        }
        catch (ApplicationException ae)
        {
          // Wenn ein Fehler auftrat, MUSS der PIN-Cache geloescht werden. Denn falls
          // es genau deshalb fehlschlug, WEIL der User eine falsche PIN eingegeben
          // hat, kriegt er sonst keine Chance, seine Eingabe zu korrigieren
          DialogFactory.clearPINCache(handler != null ? handler.getPassport() : null);
         
          Application.getMessagingFactory().sendMessage(new StatusBarMessage(ae.getMessage(), StatusBarMessage.TYPE_ERROR));
          monitor.setStatus(ProgressMonitor.STATUS_ERROR);
          monitor.setPercentComplete(100);
          monitor.setStatusText(ae.getMessage());
          removeTarget(target);
        }
        catch (Exception e)
        {
          Throwable cause = HBCIProperties.getCause(e);
          if (cause == null) cause = e; // NPE proof - man weiss ja nie ;)
          Logger.info("test of passport failed: " + cause.getClass() + ": " + cause.getMessage());
         
          // Den kompletten Stacktrace loggen wir nur auf DEBUG, weil der beim Testen bzw. Suchen nach
          // einem Kartenleser durchaus auftreten kann.
          Logger.write(Level.DEBUG,"error while testing passport",e);
         
          // Wenn ein Fehler auftrat, MUSS der PIN-Cache geloescht werden. Denn falls
          // es genau deshalb fehlschlug, WEIL der User eine falsche PIN eingegeben
          // hat, kriegt er sonst keine Chance, seine Eingabe zu korrigieren
          DialogFactory.clearPINCache(handler != null ? handler.getPassport() : null);

          // Wir entfernen das Ding vor dem Ausgeben der Fehlermeldungen.
          // die kommen sonst alle doppelt.
          removeTarget(target);
View Full Code Here

      Logger.info("[PIN/TAN] tan sec mech: " + secmech);
      ((AbstractPinTanPassport)hbciPassport).setCurrentTANMethod(secmech);
      //////////////////////


      handler=new HBCIHandler(hbciVersion,hbciPassport);
      return handler;
    }
    catch (RemoteException re)
    {
      close();
View Full Code Here

TOP

Related Classes of org.kapott.hbci.manager.HBCIHandler

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.