/** * Dialog zur Eingabe des Passworts fuer Schluesseldateien. * * @param passport der HBCI-Passport. * @return eingegebenes Passwort. * @throws Exception */ public static synchronized String getKeyPassword(HBCIPassport passport) throws Exception { HBCI plugin = (HBCI) Application.getPluginLoader().getPlugin(HBCI.class); boolean forceAsk = plugin.getResources().getSettings().getBoolean("hbcicallback.askpassphrase.force", false); boolean secondTry = System.currentTimeMillis() - lastTry < 600l; if (secondTry) { Logger.warn( "cached key seems to be wrong, asking user, passport: " + passport.getClass().getName()); // wir waren grad eben schonmal hier. Das Passwort muss falsch sein. Wir loeschen es aus dem // Cache clearPINCache(passport); } if (!forceAsk && !secondTry) { String pw = getCachedPIN(passport); if (pw != null) { Logger.info("using cached password, passport: " + passport.getClass().getName()); lastTry = System.currentTimeMillis(); return pw; // wir haben ein gecachtes Passwort, das nehmen wir } } lastTry = 0; // Wir haben nichts im Cache oder wurden explizit aufgefordert, nach dem Passwort zu fragen KeyPasswordLoadDialog dialog = new KeyPasswordLoadDialog(passport); String pw = (String) dialog.open(); if (!forceAsk) // Nur cachen, wenn die Passwort-Abfrage nicht erzwungen war setCachedPIN(passport, pw); return pw; }
/** * Laedt einen existierenden oder erstellt einen neuen Schluessel. * * @param key der Schluessel. * @param create true, wenn ein neuer erstellt werden soll. * @return der Schluessel. * @throws ApplicationException * @throws OperationCanceledException */ private HBCIPassport load(RDHKey key, boolean create) throws ApplicationException, OperationCanceledException { HBCICallback callback = null; try { String filename = key.getFilename(); if (create) { Logger.info("create " + getPassportType() + " key " + filename); } else { Logger.info("load " + getPassportType() + " key " + filename); File f = new File(filename); if (!f.exists()) { InsertKeyDialog kd = new InsertKeyDialog(f); Boolean b = (Boolean) kd.open(); if (b == null || !b.booleanValue()) throw new OperationCanceledException( i18n.tr("Schlüsseldiskette nicht eingelegt oder nicht lesbar")); } } HBCI plugin = (HBCI) Application.getPluginLoader().getPlugin(HBCI.class); callback = plugin.getHBCICallback(); if (callback != null && (callback instanceof HBCICallbackSWT)) ((HBCICallbackSWT) callback).setCurrentHandle(new PassportHandleImpl()); else Logger.warn("unable to register current handle, callback: " + callback); String type = getPassportType(); HBCIUtils.setParam("client.passport.default", type); // ist eigentlich nicht noetig HBCIUtils.setParam("client.passport." + type + ".filename", filename); HBCIUtils.setParam("client.passport." + type + ".init", "1"); return AbstractHBCIPassport.getInstance(type); } 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) { String text = i18n.tr( "Bitte senden Sie den INI-Brief an Ihre Bank und warten Sie auf die Freischaltung durch die Bank."); Application.getMessagingFactory() .sendMessage(new StatusBarMessage(text, StatusBarMessage.TYPE_ERROR)); throw new ApplicationException(text); } InvalidPassphraseException ipe = (InvalidPassphraseException) HBCIFactory.getCause(e, InvalidPassphraseException.class); if (ipe != null) { String text = i18n.tr("Das Passwort für die Schlüsseldatei ist falsch."); Application.getMessagingFactory() .sendMessage(new StatusBarMessage(text, StatusBarMessage.TYPE_ERROR)); throw new ApplicationException(text); } // Keine brauchbare Exception gefunden Logger.error("unable to load " + getPassportType() + " key", e); throw new ApplicationException( i18n.tr("Fehler beim Laden des Schlüssels: {0}", e.getMessage()), e); } finally { if (callback != null && (callback instanceof HBCICallbackSWT)) ((HBCICallbackSWT) callback).setCurrentHandle(null); } }