Skip to content

Commit b953006

Browse files
committed
Implement HKTAN2
1 parent 2c846c2 commit b953006

3 files changed

Lines changed: 38 additions & 2 deletions

File tree

docs/tans.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,14 @@ You SHOULD use this facility together with the client and dialog state restorati
144144
Reference
145145
---------
146146

147+
.. autoclass:: fints.formals.TwoStepParameters2
148+
:noindex:
149+
:undoc-members:
150+
:members:
151+
:inherited-members:
152+
:member-order: bysource
153+
:exclude-members: is_unset, naive_parse, print_nested
154+
147155
.. autoclass:: fints.formals.TwoStepParameters3
148156
:noindex:
149157
:undoc-members:

fints/client.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
PinTanTwoStepAuthenticationMechanism,
2626
)
2727
from .segments.accounts import HISPA1, HKSPA1
28-
from .segments.auth import HIPINS1, HKTAB4, HKTAB5, HKTAN3, HKTAN5
28+
from .segments.auth import HIPINS1, HKTAB4, HKTAB5, HKTAN2, HKTAN3, HKTAN5
2929
from .segments.bank import HIBPA3, HIUPA4, HKKOM4
3030
from .segments.debit import (
3131
HKDBS1, HKDBS2, HKDMB1, HKDMC1, HKDME1, HKDME2,
@@ -960,6 +960,7 @@ def _parse_tan_challenge(self):
960960
# which may require TANs for many more operations including dialog initialization.
961961
# We do not currently support that.
962962
IMPLEMENTED_HKTAN_VERSIONS = {
963+
2: HKTAN2,
963964
3: HKTAN3,
964965
5: HKTAN5,
965966
}
@@ -1047,7 +1048,7 @@ def _get_tan_segment(self, orig_seg, tan_process, tan_seg=None):
10471048
seg.account = account_
10481049
raise NotImplementedError("TAN-Process 1 not implemented")
10491050

1050-
if tan_process in ('1', '3', '4') and \
1051+
if tan_process in ('1', '3', '4') and hasattr(tan_mechanism, 'supported_media_number') and \
10511052
tan_mechanism.supported_media_number > 1 and \
10521053
tan_mechanism.description_required == DescriptionRequired.MUST:
10531054
seg.tan_medium_name = self.selected_tan_medium

fints/segments/auth.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,20 @@ class HKVVB3(FinTS3Segment):
3232
product_version = DataElementField(type='an', max_length=5, _d="Produktversion")
3333

3434

35+
class HKTAN2(FinTS3Segment):
36+
"""Zwei-Schritt-TAN-Einreichung, version 2
37+
38+
Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Sicherheitsverfahren PIN/TAN"""
39+
tan_process = DataElementField(type='code', length=1, _d="TAN-Prozess")
40+
task_hash_value = DataElementField(type='bin', max_length=256, required=False, _d="Auftrags-Hashwert")
41+
task_reference = DataElementField(type='an', max_length=35, required=False, _d="Auftragsreferenz")
42+
tan_list_number = DataElementField(type='an', max_length=20, required=False, _d="TAN-Listennummer")
43+
further_tan_follows = DataElementField(type='jn', length=1, required=False, _d="Weitere TAN folgt")
44+
cancel_task = DataElementField(type='jn', length=1, required=False, _d="Auftrag stornieren")
45+
challenge_class = DataElementField(type='num', max_length=2, required=False, _d="Challenge-Klasse")
46+
parameter_challenge_class = DataElementGroupField(type=ParameterChallengeClass, required=False, _d="Parameter Challenge-Klasse")
47+
48+
3549
class HKTAN3(FinTS3Segment):
3650
"""Zwei-Schritt-TAN-Einreichung, version 3
3751
@@ -83,6 +97,19 @@ class HKTAN6(FinTS3Segment):
8397
response_hhd_uc = DataElementGroupField(type=ResponseHHDUC, required=False, _d="Antwort HHD_UC")
8498

8599

100+
class HITAN2(FinTS3Segment):
101+
"""Zwei-Schritt-TAN-Einreichung Rückmeldung, version 2
102+
103+
Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Sicherheitsverfahren PIN/TAN"""
104+
tan_process = DataElementField(type='code', length=1, _d="TAN-Prozess")
105+
task_hash_value = DataElementField(type='bin', max_length=256, required=False, _d="Auftrags-Hashwert")
106+
task_reference = DataElementField(type='an', max_length=35, required=False, _d="Auftragsreferenz")
107+
challenge = DataElementField(type='an', max_length=2048, required=False, _d="Challenge")
108+
challenge_valid_until = DataElementGroupField(type=ChallengeValidUntil, required=False, _d="Gültigkeitsdatum und -uhrzeit für Challenge")
109+
tan_list_number = DataElementField(type='an', max_length=20, required=False, _d="TAN-Listennummer")
110+
ben = DataElementField(type='an', max_length=99, required=False, _d="BEN")
111+
112+
86113
class HITAN3(FinTS3Segment):
87114
"""Zwei-Schritt-TAN-Einreichung Rückmeldung, version 3
88115

0 commit comments

Comments
 (0)