Package org.kapott.hbci.passport
Class AbstractPinTanPassport
- java.lang.Object
-
- org.kapott.hbci.passport.AbstractHBCIPassport
-
- org.kapott.hbci.passport.AbstractPinTanPassport
-
- All Implemented Interfaces:
java.io.Serializable,HBCIPassport,HBCIPassportInternal
- Direct Known Subclasses:
HBCIPassportPinTan
public abstract class AbstractPinTanPassport extends AbstractHBCIPassport
Abstrakte Basis-Implementierung des PIN/TAN-Supports.- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.StringCACHE_KEY_SCA_STEPHier speichern wir zwischen, ob wir eine HKTAN-Anfrage in der Dialog-Initialisierung gesendet haben und wenn ja, welcher Prozess-Schritt es warprivate java.lang.Stringcertfileprivate booleancheckCertstatic java.lang.StringKEY_PD_CHALLENGEHier speichern wir den Challenge-Text der Bank fuer die TAN-Abfrage.static java.lang.StringKEY_PD_HHDUCHier speichern wir das HHDuc fuer die TAN-Abfrage.static java.lang.StringKEY_PD_ORDERREFHier speichern wir die Auftragsreferenz fuer die TAN-Abfrage.static java.lang.StringKEY_PD_SCAHier speichern wir, ob wir eine SCA-Ausnahme fuer einen GV von der Bank erhalten habenprivate java.lang.Stringpinprivate java.lang.Stringproxyprivate java.lang.Stringproxypassprivate java.lang.Stringproxyuserprivate java.lang.StringtanMethodprivate booleantanMethodAutoSelectedprivate java.util.Hashtable<java.lang.String,java.util.Properties>tanMethodsBankprivate java.util.List<java.lang.String>tanMethodsUserprivate booleanverifyTANMode-
Fields inherited from interface org.kapott.hbci.passport.HBCIPassport
ROLE_CON, ROLE_ISS, ROLE_WIT
-
-
Constructor Summary
Constructors Constructor Description AbstractPinTanPassport(java.lang.Object initObject)ct.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidactivateTANVerifyMode()private java.lang.StringaskForTanMethod()Liefert das aktuelle TAN-Verfahren.private voidcheck3072(DialogContext ctx)Prueft, ob im Response der Code 3072 enthalten ist.private voidcheck3920(DialogContext ctx)Prueft, ob im Response der Code 3920 enthalten ist.private voidcheckInvalidPIN(DialogContext ctx)Prueft, ob es Anzeichen fuer eine falsche PIN gibt.private voidcheckSCARequest(DialogContext ctx)Prueft, ob die Dialog-Initialisierung um ein HKTAN erweitert werden muss.private voidcheckSCAResponse(DialogContext ctx)Prueft das Response auf Vorhandensein eines HITAN bzw Code.private java.lang.StringchooseTANMethod(java.util.List<TanMethod> options)Fuehrt den Callback zur Auswahl des TAN-Verfahrens durch.voidclearPIN()protected java.lang.StringcollectSegCodes(java.lang.String msg)voiddeactivateTANVerifyMode()private java.lang.StringdetermineTanMethod()Liefert das aktuelle TAN-Verfahren.java.util.List<java.lang.String>getAllowedTwostepMechanisms()java.lang.StringgetCertFile()booleangetCheckCert()CommgetCommInstance()java.lang.StringgetCryptAlg()java.lang.StringgetCryptFunction()java.lang.StringgetCryptKeyType()java.lang.StringgetCryptMode()java.util.PropertiesgetCurrentSecMechInfo()java.lang.StringgetCurrentTANMethod(boolean recheck)Liefert das aktuelle TAN-Verfahren.java.lang.StringgetHashAlg()java.lang.StringgetHost()Ueberschrieben, um das "https://" am Anfang automatisch abzuschneiden.HBCIKeygetInstEncKey()java.lang.StringgetInstEncKeyName()java.lang.StringgetInstEncKeyNum()java.lang.StringgetInstEncKeyVersion()HBCIKeygetInstSigKey()java.lang.StringgetInstSigKeyName()java.lang.StringgetInstSigKeyNum()java.lang.StringgetInstSigKeyVersion()intgetMaxGVSegsPerMsg()java.lang.StringgetMyEncKeyName()java.lang.StringgetMyEncKeyNum()java.lang.StringgetMyEncKeyVersion()HBCIKeygetMyPrivateDigKey()HBCIKeygetMyPrivateEncKey()HBCIKeygetMyPrivateSigKey()HBCIKeygetMyPublicDigKey()HBCIKeygetMyPublicEncKey()HBCIKeygetMyPublicSigKey()java.lang.StringgetMySigKeyName()java.lang.StringgetMySigKeyNum()java.lang.StringgetMySigKeyVersion()private java.lang.StringgetOrderHashMode()Liefert den Code fuer den Hash-Modus, mit dem bei der HKTAN-Prozessvariante 1 das Auftragssegment gehasht werden soll.java.lang.StringgetPassportTypeName()java.lang.StringgetPIN()java.lang.StringgetPinTanInfo(java.lang.String code)Liefert "J" oder "N" aus den BPD des Geschaeftsvorfalls, ob fuer diesen eine TAN erforderlich ist.java.lang.StringgetProfileMethod()java.lang.StringgetProfileVersion()java.lang.StringgetProxy()java.lang.StringgetProxyPass()java.lang.StringgetProxyUser()private SCARequestgetSCARequest(DialogContext ctx)Erzeugt einen passenden SCA-Request fuer die Dialog-Initialisierung.java.lang.StringgetSigAlg()java.lang.StringgetSigFunction()java.lang.StringgetSigMode()java.lang.StringgetSysStatus()private java.lang.StringgetTanMedia(int segVersion)Uebernimmt das Rueckfragen der TAN-Medien-Bezeichung bei Bedarf.java.util.Hashtable<java.lang.String,java.util.Properties>getTwostepMechanisms()booleanhasInstEncKey()booleanhasInstSigKey()booleanhasMyEncKey()booleanhasMySigKey()voidincSigId()private booleanisOneStepAllowed()Liefert true, wenn das TAN-Einschritt-Verfahren unterstuetzt wird.booleanisSupported()booleanneedInstKeys()booleanneedUserKeys()booleanneedUserSig()voidonDialogEvent(DialogEvent event, DialogContext ctx)Wird bei einem Dialog-Event ausgefuehrt.private voidpatchMessagesFor2StepMethods(DialogContext ctx)Patcht die TAN-Abfrage bei Bedarf in die Nachricht.voidresetSecMechs()Kann vornew HBCIHandler()aufgerufen werden, um zu erzwingen, dass die Liste der unterstützten PIN/TAN-Sicherheitsverfahren neu vom Server abgeholt wird und evtl.voidsetAllowedTwostepMechanisms(java.util.List<java.lang.String> l)voidsetBPD(java.util.Properties p)voidsetCertFile(java.lang.String filename)protected voidsetCheckCert(boolean doCheck)voidsetCurrentTANMethod(java.lang.String method)Legt das aktuelle TAN-Verfahren fest.voidsetInstEncKey(HBCIKey key)voidsetInstSigKey(HBCIKey key)voidsetMyPrivateDigKey(HBCIKey key)voidsetMyPrivateEncKey(HBCIKey key)voidsetMyPrivateSigKey(HBCIKey key)voidsetMyPublicDigKey(HBCIKey key)voidsetMyPublicEncKey(HBCIKey key)voidsetMyPublicSigKey(HBCIKey key)voidsetPIN(java.lang.String pin)voidsetProxy(java.lang.String proxy)voidsetProxyPass(java.lang.String proxypass)voidsetProxyUser(java.lang.String proxyuser)-
Methods inherited from class org.kapott.hbci.passport.AbstractHBCIPassport
askForMissingData, canMixSecMethods, changePassphrase, checkForCryptDataSize, clearBPD, clearInstEncKey, clearInstSigKey, clearMyDigKey, clearMyEncKey, clearMySigKey, clearUPD, close, closeComm, fillAccountInfo, generateNewUserKeys, getAccount, getAccounts, getBLZ, getBPD, getBPDVersion, getCID, getClientData, getComm, getCommFilter, getCountry, getCustomerId, getCustomerId, getDefaultLang, getFilterType, getHBCIVersion, getInstance, getInstance, getInstance, getInstance, getInstName, getJobRestrictions, getJobRestrictions, getLang, getMaxGVperMsg, getMaxMsgSizeKB, getParamHeader, getParamSegmentNames, getParentHandlerData, getPersistentData, getPort, getSigId, getStoredCustomerId, getSuppCompMethods, getSuppLangs, getSuppSecMethods, getSuppVersions, getSysId, getUPD, getUPDVersion, getUserId, isAnonymous, onlyBPDGVs, setBLZ, setCID, setClientData, setCountry, setCustomerId, setFilterType, setHBCIVersion, setHost, setParamHeader, setParentHandlerData, setPersistentData, setPort, setProfileMethod, setProfileVersion, setSigId, setSysId, setUPD, setUserId, syncSigId, syncSysId
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.kapott.hbci.passport.HBCIPassport
saveChanges
-
Methods inherited from interface org.kapott.hbci.passport.HBCIPassportInternal
decrypt, encrypt, hash, resetPassphrase, sign, verify
-
-
-
-
Field Detail
-
CACHE_KEY_SCA_STEP
private static final java.lang.String CACHE_KEY_SCA_STEP
Hier speichern wir zwischen, ob wir eine HKTAN-Anfrage in der Dialog-Initialisierung gesendet haben und wenn ja, welcher Prozess-Schritt es war- See Also:
- Constant Field Values
-
KEY_PD_SCA
public static final java.lang.String KEY_PD_SCA
Hier speichern wir, ob wir eine SCA-Ausnahme fuer einen GV von der Bank erhalten haben- See Also:
- Constant Field Values
-
KEY_PD_CHALLENGE
public static final java.lang.String KEY_PD_CHALLENGE
Hier speichern wir den Challenge-Text der Bank fuer die TAN-Abfrage.- See Also:
- Constant Field Values
-
KEY_PD_HHDUC
public static final java.lang.String KEY_PD_HHDUC
Hier speichern wir das HHDuc fuer die TAN-Abfrage.- See Also:
- Constant Field Values
-
KEY_PD_ORDERREF
public static final java.lang.String KEY_PD_ORDERREF
Hier speichern wir die Auftragsreferenz fuer die TAN-Abfrage.- See Also:
- Constant Field Values
-
certfile
private java.lang.String certfile
-
checkCert
private boolean checkCert
-
proxy
private java.lang.String proxy
-
proxyuser
private java.lang.String proxyuser
-
proxypass
private java.lang.String proxypass
-
verifyTANMode
private boolean verifyTANMode
-
tanMethod
private java.lang.String tanMethod
-
tanMethodAutoSelected
private boolean tanMethodAutoSelected
-
tanMethodsUser
private java.util.List<java.lang.String> tanMethodsUser
-
tanMethodsBank
private java.util.Hashtable<java.lang.String,java.util.Properties> tanMethodsBank
-
pin
private java.lang.String pin
-
-
Method Detail
-
getPassportTypeName
public java.lang.String getPassportTypeName()
-
setBPD
public void setBPD(java.util.Properties p)
- Specified by:
setBPDin interfaceHBCIPassportInternal- Overrides:
setBPDin classAbstractHBCIPassport- See Also:
AbstractHBCIPassport.setBPD(java.util.Properties)
-
onDialogEvent
public void onDialogEvent(DialogEvent event, DialogContext ctx)
Description copied from interface:HBCIPassportInternalWird bei einem Dialog-Event ausgefuehrt.- Specified by:
onDialogEventin interfaceHBCIPassportInternal- Overrides:
onDialogEventin classAbstractHBCIPassport- Parameters:
event- das Event.ctx- der Dialog-Kontext.- See Also:
AbstractHBCIPassport.onDialogEvent(org.kapott.hbci.dialog.DialogEvent, org.kapott.hbci.dialog.DialogContext)
-
checkInvalidPIN
private void checkInvalidPIN(DialogContext ctx)
Prueft, ob es Anzeichen fuer eine falsche PIN gibt. Wenn ja, geben wir per Callback Bescheid.- Parameters:
ctx- der Kontext.
-
check3920
private void check3920(DialogContext ctx)
Prueft, ob im Response der Code 3920 enthalten ist. Dort liefert die Bank neue Zweischritt-Verfahren.- Parameters:
ctx- der Kontext.
-
check3072
private void check3072(DialogContext ctx)
Prueft, ob im Response der Code 3072 enthalten ist. Dort liefert die Bank ggf. aktualisierte Zugangsdaten.- Parameters:
ctx- der Kontext.
-
checkSCARequest
private void checkSCARequest(DialogContext ctx)
Prueft, ob die Dialog-Initialisierung um ein HKTAN erweitert werden muss.- Parameters:
ctx- der Kontext.
-
getSCARequest
private SCARequest getSCARequest(DialogContext ctx)
Erzeugt einen passenden SCA-Request fuer die Dialog-Initialisierung.- Parameters:
ctx- der Context.- Returns:
- der SCA-Request oder NULL, wenn keiner noetig ist.
-
checkSCAResponse
private void checkSCAResponse(DialogContext ctx)
Prueft das Response auf Vorhandensein eines HITAN bzw Code. Hinweis: Wir haben das ganze HKTAN-Handling derzeit leider doppelt. Einmal fuer die Dialog-Initialisierung und einmal fuer die Nachrichten mit den eigentlichen Geschaeftsvorfaellen (in patchMessagesFor2StepMethods). Wenn auch HBCIDialog#doJobs irgendwann auf die neuen RawHBCIDialoge umgestellt ist, kann eigentlich patchMessagesFor2StepMethods entfallen.- Parameters:
ctx- der Kontext.
-
getCommInstance
public Comm getCommInstance()
- Specified by:
getCommInstancein classAbstractHBCIPassport- See Also:
AbstractHBCIPassport.getCommInstance()
-
isSupported
public boolean isSupported()
- See Also:
HBCIPassport.isSupported()
-
isOneStepAllowed
private boolean isOneStepAllowed()
Liefert true, wenn das TAN-Einschritt-Verfahren unterstuetzt wird.- Returns:
- true, wenn das TAN-Einschritt-Verfahren unterstuetzt wird.
-
resetSecMechs
public void resetSecMechs()
Kann vornew HBCIHandler()aufgerufen werden, um zu erzwingen, dass die Liste der unterstützten PIN/TAN-Sicherheitsverfahren neu vom Server abgeholt wird und evtl. neu vom Nutzer abgefragt wird.
-
setCurrentTANMethod
public void setCurrentTANMethod(java.lang.String method)
Legt das aktuelle TAN-Verfahren fest.- Parameters:
method- das aktuelle TAN-Verfahren.
-
getCurrentTANMethod
public java.lang.String getCurrentTANMethod(boolean recheck)
Liefert das aktuelle TAN-Verfahren.- Parameters:
recheck- true, wenn die gespeicherte Auswahl auf Aktualitaet und Verfuegbarkeit geprueft werden soll. Die Funktion kann in dem Fall einen Callback ausloesen, wenn mehrere Optionen zur Wahl stehen.- Returns:
- das TAN-Verfahren.
-
determineTanMethod
private java.lang.String determineTanMethod()
Liefert das aktuelle TAN-Verfahren. Hierbei versucht HBCI4Java das Verfahren erst automatisch zu ermitteln, bevor es den User fragt.- Returns:
- das TAN-Verfahren.
-
askForTanMethod
private java.lang.String askForTanMethod()
Liefert das aktuelle TAN-Verfahren. Fragt hierbei im Zweifelsfall eher den User anstatt es selbst herauszufinden.- Returns:
- das TAN-Verfahren.
-
chooseTANMethod
private java.lang.String chooseTANMethod(java.util.List<TanMethod> options)
Fuehrt den Callback zur Auswahl des TAN-Verfahrens durch.- Parameters:
options- die verfuegbaren Optionen.- Returns:
- das gewaehlte TAN-Verfahren.
-
getCurrentSecMechInfo
public java.util.Properties getCurrentSecMechInfo()
-
getTwostepMechanisms
public java.util.Hashtable<java.lang.String,java.util.Properties> getTwostepMechanisms()
-
getProfileMethod
public java.lang.String getProfileMethod()
-
getProfileVersion
public java.lang.String getProfileVersion()
-
needUserKeys
public boolean needUserKeys()
-
needInstKeys
public boolean needInstKeys()
-
needUserSig
public boolean needUserSig()
-
getSysStatus
public java.lang.String getSysStatus()
-
hasInstSigKey
public boolean hasInstSigKey()
-
hasInstEncKey
public boolean hasInstEncKey()
-
hasMySigKey
public boolean hasMySigKey()
-
hasMyEncKey
public boolean hasMyEncKey()
-
getInstSigKey
public HBCIKey getInstSigKey()
-
getInstEncKey
public HBCIKey getInstEncKey()
-
getInstSigKeyName
public java.lang.String getInstSigKeyName()
-
getInstSigKeyNum
public java.lang.String getInstSigKeyNum()
-
getInstSigKeyVersion
public java.lang.String getInstSigKeyVersion()
-
getInstEncKeyName
public java.lang.String getInstEncKeyName()
-
getInstEncKeyNum
public java.lang.String getInstEncKeyNum()
-
getInstEncKeyVersion
public java.lang.String getInstEncKeyVersion()
-
getMySigKeyName
public java.lang.String getMySigKeyName()
-
getMySigKeyNum
public java.lang.String getMySigKeyNum()
-
getMySigKeyVersion
public java.lang.String getMySigKeyVersion()
-
getMyEncKeyName
public java.lang.String getMyEncKeyName()
-
getMyEncKeyNum
public java.lang.String getMyEncKeyNum()
-
getMyEncKeyVersion
public java.lang.String getMyEncKeyVersion()
-
getMyPublicDigKey
public HBCIKey getMyPublicDigKey()
-
getMyPrivateDigKey
public HBCIKey getMyPrivateDigKey()
-
getMyPublicSigKey
public HBCIKey getMyPublicSigKey()
-
getMyPrivateSigKey
public HBCIKey getMyPrivateSigKey()
-
getMyPublicEncKey
public HBCIKey getMyPublicEncKey()
-
getMyPrivateEncKey
public HBCIKey getMyPrivateEncKey()
-
getCryptMode
public java.lang.String getCryptMode()
-
getCryptAlg
public java.lang.String getCryptAlg()
-
getCryptKeyType
public java.lang.String getCryptKeyType()
-
getSigFunction
public java.lang.String getSigFunction()
-
getCryptFunction
public java.lang.String getCryptFunction()
-
getSigAlg
public java.lang.String getSigAlg()
-
getSigMode
public java.lang.String getSigMode()
-
getHashAlg
public java.lang.String getHashAlg()
-
setInstSigKey
public void setInstSigKey(HBCIKey key)
-
setInstEncKey
public void setInstEncKey(HBCIKey key)
-
setMyPublicDigKey
public void setMyPublicDigKey(HBCIKey key)
-
setMyPrivateDigKey
public void setMyPrivateDigKey(HBCIKey key)
-
setMyPublicSigKey
public void setMyPublicSigKey(HBCIKey key)
-
setMyPrivateSigKey
public void setMyPrivateSigKey(HBCIKey key)
-
setMyPublicEncKey
public void setMyPublicEncKey(HBCIKey key)
-
setMyPrivateEncKey
public void setMyPrivateEncKey(HBCIKey key)
-
incSigId
public void incSigId()
- Specified by:
incSigIdin interfaceHBCIPassportInternal- Overrides:
incSigIdin classAbstractHBCIPassport
-
collectSegCodes
protected java.lang.String collectSegCodes(java.lang.String msg)
-
getPinTanInfo
public java.lang.String getPinTanInfo(java.lang.String code)
Liefert "J" oder "N" aus den BPD des Geschaeftsvorfalls, ob fuer diesen eine TAN erforderlich ist.- Parameters:
code- der GV-Code.- Returns:
- "J" oder "N". Oder "A", wenn es ein Admin-Segment ist, jedoch keine TAN noetig ist.
-
deactivateTANVerifyMode
public void deactivateTANVerifyMode()
-
activateTANVerifyMode
public void activateTANVerifyMode()
-
setCertFile
public void setCertFile(java.lang.String filename)
-
getCertFile
public java.lang.String getCertFile()
-
setCheckCert
protected void setCheckCert(boolean doCheck)
-
getCheckCert
public boolean getCheckCert()
-
getProxy
public java.lang.String getProxy()
-
setProxy
public void setProxy(java.lang.String proxy)
-
getProxyPass
public java.lang.String getProxyPass()
-
getProxyUser
public java.lang.String getProxyUser()
-
setProxyPass
public void setProxyPass(java.lang.String proxypass)
-
setProxyUser
public void setProxyUser(java.lang.String proxyuser)
-
getOrderHashMode
private java.lang.String getOrderHashMode()
Liefert den Code fuer den Hash-Modus, mit dem bei der HKTAN-Prozessvariante 1 das Auftragssegment gehasht werden soll.- Returns:
- der Order-Hashmode oder NULL, wenn er nicht ermittelbar ist.
- Throws:
HBCI_Exception- wenn ein ungueltiger Wert fuer den Hash-Mode in den BPD angegeben ist.
-
patchMessagesFor2StepMethods
private void patchMessagesFor2StepMethods(DialogContext ctx)
Patcht die TAN-Abfrage bei Bedarf in die Nachricht. Hinweis: Wir haben das ganze HKTAN-Handling derzeit leider doppelt. Einmal fuer die Dialog-Initialisierung (checkSCAResponse) und einmal fuer die Nachrichten mit den eigentlichen Geschaeftsvorfaellen (in patchMessagesFor2StepMethods). Wenn auch HBCIDialog#doJobs irgendwann auf die neuen RawHBCIDialoge umgestellt ist, kann eigentlich patchMessagesFor2StepMethods entfallen.- Parameters:
dialog- der Dialog.ret- der aktuelle Dialog-Status.
-
getTanMedia
private java.lang.String getTanMedia(int segVersion)
Uebernimmt das Rueckfragen der TAN-Medien-Bezeichung bei Bedarf.- Parameters:
segVersion- die HKTAN-Versionsnummer.- Returns:
- das ausgewaehlte TAN-Medium oder einen Leerstring, wenn keines verfuegbar war oder keines noetig ist (bei HKTAN < 3).
-
setPIN
public void setPIN(java.lang.String pin)
-
getPIN
public java.lang.String getPIN()
-
clearPIN
public void clearPIN()
-
getAllowedTwostepMechanisms
public java.util.List<java.lang.String> getAllowedTwostepMechanisms()
-
setAllowedTwostepMechanisms
public void setAllowedTwostepMechanisms(java.util.List<java.lang.String> l)
-
getMaxGVSegsPerMsg
public int getMaxGVSegsPerMsg()
- Specified by:
getMaxGVSegsPerMsgin interfaceHBCIPassportInternal- Overrides:
getMaxGVSegsPerMsgin classAbstractHBCIPassport- See Also:
HBCIPassportInternal.getMaxGVSegsPerMsg()
-
getHost
public java.lang.String getHost()
Ueberschrieben, um das "https://" am Anfang automatisch abzuschneiden. Das sorgte schon fuer so viele unnoetige Fehler.- Specified by:
getHostin interfaceHBCIPassport- Overrides:
getHostin classAbstractHBCIPassport- Returns:
- Hostname oder IP-Adresse des HBCI-Servers
- See Also:
AbstractHBCIPassport.getHost()
-
-