Пример #1
0
  protected HBCIJobImpl(HBCIHandler parentHandler, String jobnameLL, HBCIJobResultImpl jobResult) {
    findSpecNameForGV(jobnameLL, parentHandler);
    this.llParams = new Properties();

    this.passports = new HBCIPassportList();
    this.passports.addPassport(
        (HBCIPassportInternal) parentHandler.getPassport(), HBCIPassport.ROLE_ISS);

    this.jobResult = jobResult;
    this.jobResult.setParentJob(this);

    this.contentCounter = 0;
    this.constraints = new Hashtable<String, String[][]>();
    this.logFilterLevels = new Hashtable<String, Integer>();
    this.indexedConstraints = new HashSet<String>();
    this.executed = false;

    this.parentHandler = parentHandler;

    /* offensichtlich soll ein GV mit dem Namen name in die nachricht
    aufgenommen werden. da GV durch segmente definiert sind, und einige
    dieser segmente ein request-tag benoetigen (siehe klasse
    SyntaxElement), wird hier auf jeden fall das request-tag gesetzt.
    wenn es *nicht* benoetigt wird, schadet es auch nichts. und es ist
    auf keinen fall "zu viel" gesetzt, da dieser code nur ausgefuehrt wird,
    wenn das jeweilige segment tatsaechlich erzeugt werden soll */
    llParams.setProperty(this.name, "requested");
  }
Пример #2
0
  @Test
  public void test() {
    System.out.println("---------Erstelle Job");
    HBCIJob job = handler.newJob("DauerSEPAList");

    int source_acc_idx = Integer.parseInt(params.getProperty("source_account_idx"));
    job.setParam("src", passport.getAccounts()[source_acc_idx]);

    System.out.println("---------Für Job zur Queue");
    job.addToQueue();

    HBCIExecStatus ret = handler.execute();
    HBCIJobResult res = job.getJobResult();
    System.out.println("----------Result: " + res.toString());

    Assert.assertEquals("Job Result ist nicht OK!", true, res.isOK());
  }
Пример #3
0
 private void done() {
   if (handler != null) {
     handler.close();
   }
   if (passport != null) {
     passport.close();
   }
   HBCIUtils.doneThread();
 }
Пример #4
0
  public static void main(String[] args) throws IOException {
    try {
      HBCIUtils.init(null, new MyCallback());
      readBasicParams();

      readPassportParams();
      passport = AbstractHBCIPassport.getInstance();

      readHBCIVersion();
      readActions();

      if (HBCIUtils.getParam("action.resetBPD").equals("1")) {
        passport.clearBPD();
      }
      if (HBCIUtils.getParam("action.resetUPD").equals("1")) {
        passport.clearUPD();
      }
      hbciHandle =
          new HBCIHandler(HBCIUtils.getParam("client.passport.hbciversion.default"), passport);

      /* HBCIExecStatus ret=hbciHandle.execute();
      System.out.println("ExecStatus");
      System.out.println(ret.toString());
      System.out.println("ExecStatusEnd");
      System.out.println("ExecStatusError");
      System.out.println(ret.getErrorString());
      System.out.println("ExecStatusErrorEnd"); */

      printSupportedGVs(hbciHandle);

      System.out.println();
      System.out.println("finished.");
      System.out.println();
    } finally {
      if (hbciHandle != null) {
        hbciHandle.close();
      } else if (passport != null) {
        passport.close();
      }
    }
  }
Пример #5
0
  /** @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) HBCIFactory.getCause(e, OperationCanceledException.class);
      if (oce != null) throw oce;

      ApplicationException ae =
          (ApplicationException) HBCIFactory.getCause(e, ApplicationException.class);
      if (ae != null) throw ae;

      NeedKeyAckException ack =
          (NeedKeyAckException) HBCIFactory.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);
      }
    }
  }
Пример #6
0
  /* gibt zu einem gegebenen jobnamen des namen dieses jobs in der syntax-spez.
   * zurück (also mit angehängter versionsnummer)
   */
  private void findSpecNameForGV(String jobnameLL, HBCIHandler handler) {
    int maxVersion = 0;
    StringBuffer key = new StringBuffer();

    // alle param-segmente durchlaufen
    Properties bpd = handler.getPassport().getBPD();
    for (Enumeration i = bpd.propertyNames(); i.hasMoreElements(); ) {
      String path = (String) i.nextElement();
      key.setLength(0);
      key.append(path);

      if (key.indexOf("Params") == 0) {
        key.delete(0, key.indexOf(".") + 1);
        // wenn segment mit namen des aktuellen jobs gefunden wurde

        if (key.indexOf(jobnameLL + "Par") == 0 && key.toString().endsWith(".SegHead.code")) {
          // willuhn 2011-06-06 Maximal zulaessige Segment-Version ermitteln
          // Hintergrund: Es gibt Szenarien, in denen nicht die hoechste verfuegbare
          // Versionsnummer verwendet werden kann, weil die Voraussetzungen impliziert,
          // die beim User nicht gegeben sind. Mit diesem Parameter kann die maximale
          // Version nach oben begrenzt werden. In AbstractPinTanPassport#setBPD() ist
          // ein konkretes Beispiel enthalten (Bank macht HITANS5 und damit HHD 1.4, der
          // User hat aber nur ein HHD-1.3-tauglichen TAN-Generator)
          int maxAllowedVersion =
              Integer.parseInt(
                  HBCIUtils.getParam(
                      "kernel.gv." + bpd.getProperty(path, "default") + ".segversion.max", "0"));

          key.delete(0, jobnameLL.length() + ("Par").length());

          // extrahieren der versionsnummer aus dem spez-namen
          String st = key.substring(0, key.indexOf("."));
          int version = 0;

          try {
            version = Integer.parseInt(st);
          } catch (Exception e) {
            HBCIUtils.log(
                "found invalid job version: key="
                    + key
                    + ", jobnameLL="
                    + jobnameLL
                    + " (this is a known, but harmless bug)",
                HBCIUtils.LOG_WARN);
          }

          // willuhn 2011-06-06 Segment-Versionen ueberspringen, die groesser als die max.
          // zulaessige sind
          if (maxAllowedVersion > 0 && version > maxAllowedVersion) {
            HBCIUtils.log(
                "skipping segment version "
                    + version
                    + " for task "
                    + jobnameLL
                    + ", larger than allowed version "
                    + maxAllowedVersion,
                HBCIUtils.LOG_INFO);
            continue;
          }
          // merken der größten jemals aufgetretenen versionsnummer
          if (version != 0) {
            HBCIUtils.log(
                "task " + jobnameLL + " is supported with segment version " + st,
                HBCIUtils.LOG_DEBUG2);
            if (version > maxVersion) {
              maxVersion = version;
            }
          }
        }
      }
    }

    if (maxVersion == 0) {
      throw new JobNotSupportedException(jobnameLL);
    }

    // namen+versionsnummer speichern
    this.jobName = jobnameLL;
    this.segVersion = Integer.toString(maxVersion);
    this.name = jobnameLL + this.segVersion;
  }