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.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 warprivate java.lang.String
certfile
private boolean
checkCert
static java.lang.String
KEY_PD_CHALLENGE
Hier speichern wir den Challenge-Text der Bank fuer die TAN-Abfrage.static java.lang.String
KEY_PD_HHDUC
Hier speichern wir das HHDuc fuer die TAN-Abfrage.static java.lang.String
KEY_PD_ORDERREF
Hier speichern wir die Auftragsreferenz fuer die TAN-Abfrage.static java.lang.String
KEY_PD_SCA
Hier speichern wir, ob wir eine SCA-Ausnahme fuer einen GV von der Bank erhalten habenprivate java.lang.String
pin
private java.lang.String
proxy
private java.lang.String
proxypass
private java.lang.String
proxyuser
private java.lang.String
tanMethod
private boolean
tanMethodAutoSelected
private java.util.Hashtable<java.lang.String,java.util.Properties>
tanMethodsBank
private java.util.List<java.lang.String>
tanMethodsUser
private boolean
verifyTANMode
-
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 void
activateTANVerifyMode()
private java.lang.String
askForTanMethod()
Liefert das aktuelle TAN-Verfahren.private void
check3072(DialogContext ctx)
Prueft, ob im Response der Code 3072 enthalten ist.private void
check3920(DialogContext ctx)
Prueft, ob im Response der Code 3920 enthalten ist.private void
checkInvalidPIN(DialogContext ctx)
Prueft, ob es Anzeichen fuer eine falsche PIN gibt.private void
checkSCARequest(DialogContext ctx)
Prueft, ob die Dialog-Initialisierung um ein HKTAN erweitert werden muss.private void
checkSCAResponse(DialogContext ctx)
Prueft das Response auf Vorhandensein eines HITAN bzw Code.private java.lang.String
chooseTANMethod(java.util.List<TanMethod> options)
Fuehrt den Callback zur Auswahl des TAN-Verfahrens durch.void
clearPIN()
protected java.lang.String
collectSegCodes(java.lang.String msg)
void
deactivateTANVerifyMode()
private java.lang.String
determineTanMethod()
Liefert das aktuelle TAN-Verfahren.java.util.List<java.lang.String>
getAllowedTwostepMechanisms()
java.lang.String
getCertFile()
boolean
getCheckCert()
Comm
getCommInstance()
java.lang.String
getCryptAlg()
java.lang.String
getCryptFunction()
java.lang.String
getCryptKeyType()
java.lang.String
getCryptMode()
java.util.Properties
getCurrentSecMechInfo()
java.lang.String
getCurrentTANMethod(boolean recheck)
Liefert das aktuelle TAN-Verfahren.java.lang.String
getHashAlg()
java.lang.String
getHost()
Ueberschrieben, um das "https://" am Anfang automatisch abzuschneiden.HBCIKey
getInstEncKey()
java.lang.String
getInstEncKeyName()
java.lang.String
getInstEncKeyNum()
java.lang.String
getInstEncKeyVersion()
HBCIKey
getInstSigKey()
java.lang.String
getInstSigKeyName()
java.lang.String
getInstSigKeyNum()
java.lang.String
getInstSigKeyVersion()
int
getMaxGVSegsPerMsg()
java.lang.String
getMyEncKeyName()
java.lang.String
getMyEncKeyNum()
java.lang.String
getMyEncKeyVersion()
HBCIKey
getMyPrivateDigKey()
HBCIKey
getMyPrivateEncKey()
HBCIKey
getMyPrivateSigKey()
HBCIKey
getMyPublicDigKey()
HBCIKey
getMyPublicEncKey()
HBCIKey
getMyPublicSigKey()
java.lang.String
getMySigKeyName()
java.lang.String
getMySigKeyNum()
java.lang.String
getMySigKeyVersion()
private java.lang.String
getOrderHashMode()
Liefert den Code fuer den Hash-Modus, mit dem bei der HKTAN-Prozessvariante 1 das Auftragssegment gehasht werden soll.java.lang.String
getPassportTypeName()
java.lang.String
getPIN()
java.lang.String
getPinTanInfo(java.lang.String code)
Liefert "J" oder "N" aus den BPD des Geschaeftsvorfalls, ob fuer diesen eine TAN erforderlich ist.java.lang.String
getProfileMethod()
java.lang.String
getProfileVersion()
java.lang.String
getProxy()
java.lang.String
getProxyPass()
java.lang.String
getProxyUser()
private SCARequest
getSCARequest(DialogContext ctx)
Erzeugt einen passenden SCA-Request fuer die Dialog-Initialisierung.java.lang.String
getSigAlg()
java.lang.String
getSigFunction()
java.lang.String
getSigMode()
java.lang.String
getSysStatus()
private java.lang.String
getTanMedia(int segVersion)
Uebernimmt das Rueckfragen der TAN-Medien-Bezeichung bei Bedarf.java.util.Hashtable<java.lang.String,java.util.Properties>
getTwostepMechanisms()
boolean
hasInstEncKey()
boolean
hasInstSigKey()
boolean
hasMyEncKey()
boolean
hasMySigKey()
void
incSigId()
private boolean
isOneStepAllowed()
Liefert true, wenn das TAN-Einschritt-Verfahren unterstuetzt wird.boolean
isSupported()
boolean
needInstKeys()
boolean
needUserKeys()
boolean
needUserSig()
void
onDialogEvent(DialogEvent event, DialogContext ctx)
Wird bei einem Dialog-Event ausgefuehrt.private void
patchMessagesFor2StepMethods(DialogContext ctx)
Patcht die TAN-Abfrage bei Bedarf in die Nachricht.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.void
setAllowedTwostepMechanisms(java.util.List<java.lang.String> l)
void
setBPD(java.util.Properties p)
void
setCertFile(java.lang.String filename)
protected void
setCheckCert(boolean doCheck)
void
setCurrentTANMethod(java.lang.String method)
Legt das aktuelle TAN-Verfahren fest.void
setInstEncKey(HBCIKey key)
void
setInstSigKey(HBCIKey key)
void
setMyPrivateDigKey(HBCIKey key)
void
setMyPrivateEncKey(HBCIKey key)
void
setMyPrivateSigKey(HBCIKey key)
void
setMyPublicDigKey(HBCIKey key)
void
setMyPublicEncKey(HBCIKey key)
void
setMyPublicSigKey(HBCIKey key)
void
setPIN(java.lang.String pin)
void
setProxy(java.lang.String proxy)
void
setProxyPass(java.lang.String proxypass)
void
setProxyUser(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:
setBPD
in interfaceHBCIPassportInternal
- Overrides:
setBPD
in classAbstractHBCIPassport
- See Also:
AbstractHBCIPassport.setBPD(java.util.Properties)
-
onDialogEvent
public void onDialogEvent(DialogEvent event, DialogContext ctx)
Description copied from interface:HBCIPassportInternal
Wird bei einem Dialog-Event ausgefuehrt.- Specified by:
onDialogEvent
in interfaceHBCIPassportInternal
- Overrides:
onDialogEvent
in 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:
getCommInstance
in 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:
incSigId
in interfaceHBCIPassportInternal
- Overrides:
incSigId
in 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:
getMaxGVSegsPerMsg
in interfaceHBCIPassportInternal
- Overrides:
getMaxGVSegsPerMsg
in 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:
getHost
in interfaceHBCIPassport
- Overrides:
getHost
in classAbstractHBCIPassport
- Returns:
- Hostname oder IP-Adresse des HBCI-Servers
- See Also:
AbstractHBCIPassport.getHost()
-
-