]> git.ipfire.org Git - thirdparty/python-fints.git/commitdiff
Implement HITANS segments
authorHenryk Plötz <henryk@ploetzli.ch>
Sat, 11 Aug 2018 18:29:05 +0000 (20:29 +0200)
committerRaphael Michel <mail@raphaelmichel.de>
Mon, 3 Dec 2018 18:34:17 +0000 (19:34 +0100)
fints/formals.py
fints/segments/__init__.py

index ad9fa79e4f34a3871c528b3c440dbb8ab0d7365f..6004a394f3b904a5281afa3960d1f1577d24b9a7 100644 (file)
@@ -653,38 +653,117 @@ class AllowedTransaction(DataElementGroup):
     limit_amount = DataElementField(type='btg', required=False)
     limit_days = DataElementField(type='num', max_length=3, required=False)
 
-class TwoStepParameters1(DataElementGroup):
-    security_function = DataElementField(type='code', max_length=3)
-    tan_process = DataElementField(type='code', length=1)
-    technical_identification_tan_process = DataElementField(type='id')
-    name_twostep_process = DataElementField(type='an', max_length=30)
-    max_length_tan_entry = DataElementField(type='num', max_length=2)
-    allowed_format_tan_entry = DataElementField(type='code', length=1)
-    return_value_text = DataElementField(type='an', max_length=30)
-    max_length_return_value = DataElementField(type='num', max_length=3)
-    number_supported_tan_lists = DataElementField(type='num', length=1)
-    multiple_tans_allowed = DataElementField(type='jn')
-    tan_time_delayed_allowed = DataElementField(type='jn')
-
-class TwoStepParameters3(DataElementGroup):
-    security_function = DataElementField(type='code', max_length=3)
-    tan_process = DataElementField(type='code', length=1)
-    technical_identification_tan_process = DataElementField(type='id')
-    name_twostep_process = DataElementField(type='an', max_length=30)
-    max_length_tan_entry = DataElementField(type='num', max_length=2)
-    allowed_format_tan_entry = DataElementField(type='code', length=1)
-    return_value_text = DataElementField(type='an', max_length=30)
-    max_length_return_value = DataElementField(type='num', max_length=3)
-    number_supported_tan_lists = DataElementField(type='num', length=1)
-    multiple_tans_allowed = DataElementField(type='jn')
-    tan_timedelayed_type = DataElementField(type='code', length=1)
-    tan_list_number_required = DataElementField(type='code', length=1)
-    cancel_allowed = DataElementField(type='jn')
-    challenge_class_required = DataElementField(type='jn')
-    challenge_amount_required = DataElementField(type='jn')
-    initialisation_mode = DataElementField(type='code', length=2)  # Spec error: It says "length=1", but also "value: 00, 01, 02"
-    id_tan_medium_required = DataElementField(type='code', length=1)
-    number_supported_tan_media = DataElementField(type='num', length=1, required=False)
+class TwoStepParametersCommon(DataElementGroup):
+    @property
+    def VERSION(self):
+        return int( re.match(r'^(\D+)(\d+)$', self.__class__.__name__).group(2) )
+
+    security_function = DataElementField(type='code', max_length=3, _d="Sicherheitsfunktion kodiert")
+    tan_process = DataElementField(type='code', length=1, _d="TAN-Prozess")
+    tech_id = DataElementField(type='id', _d="Technische Identifikation TAN-Verfahren")
+
+class TwoStepParameters1(TwoStepParametersCommon):
+    name = DataElementField(type='an', max_length=30, _d="Name des Zwei-Schritt-Verfahrens")
+    max_length_input = DataElementField(type='num', max_length=2, _d="Maximale Länge des Eingabewertes im Zwei-Schritt-Verfahren")
+    allowed_format = DataElementField(type='code', length=1, _d="Erlaubtes Format im Zwei-Schritt-Verfahren")
+    text_return_value = DataElementField(type='an', max_length=30, _d="Text zur Belegung des Rückgabewertes im Zwei-Schritt-Verfahren")
+    max_length_return_value = DataElementField(type='num', max_length=3, _d="Maximale Länge des Rückgabewertes im Zwei-Schritt-Verfahren")
+    number_of_supported_lists = DataElementField(type='num', length=1, _d="Anzahl unterstützter aktiver TAN-Listen")
+    multiple_tans_allowed = DataElementField(type='jn', _d="Mehrfach-TAN erlaubt")
+    tan_time_delayed_allowed = DataElementField(type='jn', _d="TAN zeitversetzt/dialogübergreifend erlaubt")
+
+class TwoStepParameters2(TwoStepParametersCommon):
+    name = DataElementField(type='an', max_length=30, _d="Name des Zwei-Schritt-Verfahrens")
+    max_length_input = DataElementField(type='num', max_length=2, _d="Maximale Länge des Eingabewertes im Zwei-Schritt-Verfahren")
+    allowed_format = DataElementField(type='code', length=1, _d="Erlaubtes Format im Zwei-Schritt-Verfahren")
+    text_return_value = DataElementField(type='an', max_length=30, _d="Text zur Belegung des Rückgabewertes im Zwei-Schritt-Verfahren")
+    max_length_return_value = DataElementField(type='num', max_length=3, _d="Maximale Länge des Rückgabewertes im Zwei-Schritt-Verfahren")
+    number_of_supported_lists = DataElementField(type='num', length=1, _d="Anzahl unterstützter aktiver TAN-Listen")
+    multiple_tans_allowed = DataElementField(type='jn', _d="Mehrfach-TAN erlaubt")
+    tan_time_dialog_association = DataElementField(type='code', length=1, _d="TAN Zeit- und Dialogbezug")
+    tan_list_number_required = DataElementField(type='code', length=1, _d="TAN-Listennummer erforderlich")
+    cancel_allowed = DataElementField(type='jn', _d="Auftragsstorno erlaubt")
+    challenge_class_required = DataElementField(type='jn', _d="Challenge-Klasse erforderlich")
+    challenge_value_required = DataElementField(type='jn', _d="Challenge-Betrag erforderlich")
+
+class TwoStepParameters3(TwoStepParametersCommon):
+    name = DataElementField(type='an', max_length=30, _d="Name des Zwei-Schritt-Verfahrens")
+    max_length_input = DataElementField(type='num', max_length=2, _d="Maximale Länge des Eingabewertes im Zwei-Schritt-Verfahren")
+    allowed_format = DataElementField(type='code', length=1, _d="Erlaubtes Format im Zwei-Schritt-Verfahren")
+    text_return_value = DataElementField(type='an', max_length=30, _d="Text zur Belegung des Rückgabewertes im Zwei-Schritt-Verfahren")
+    max_length_return_value = DataElementField(type='num', max_length=3, _d="Maximale Länge des Rückgabewertes im Zwei-Schritt-Verfahren")
+    number_of_supported_lists = DataElementField(type='num', length=1, _d="Anzahl unterstützter aktiver TAN-Listen")
+    multiple_tans_allowed = DataElementField(type='jn', _d="Mehrfach-TAN erlaubt")
+    tan_time_dialog_association = DataElementField(type='code', length=1, _d="TAN Zeit- und Dialogbezug")
+    tan_list_number_required = DataElementField(type='code', length=1, _d="TAN-Listennummer erforderlich")
+    cancel_allowed = DataElementField(type='jn', _d="Auftragsstorno erlaubt")
+    challenge_class_required = DataElementField(type='jn', _d="Challenge-Klasse erforderlich")
+    challenge_value_required = DataElementField(type='jn', _d="Challenge-Betrag erforderlich")
+    initialisation_mode = DataElementField(type='code', _d="Initialisierungsmodus")
+    description_required = DataElementField(type='code', length=1, _d="Bezeichnung des TAN-Medium erforderlich")
+    supported_media_number = DataElementField(type='num', length=1, required=False, _d="Anzahl unterstützter aktiver TAN-Medien")
+
+class TwoStepParameters4(TwoStepParametersCommon):
+    zka_id = DataElementField(type='an', max_length=32, _d="ZKA TAN-Verfahren")
+    zka_version = DataElementField(type='an', max_length=10, _d="Version ZKA TAN-Verfahren")
+    name = DataElementField(type='an', max_length=30, _d="Name des Zwei-Schritt-Verfahrens")
+    max_length_input = DataElementField(type='num', max_length=2, _d="Maximale Länge des Eingabewertes im Zwei-Schritt-Verfahren")
+    allowed_format = DataElementField(type='code', length=1, _d="Erlaubtes Format im Zwei-Schritt-Verfahren")
+    text_return_value = DataElementField(type='an', max_length=30, _d="Text zur Belegung des Rückgabewertes im Zwei-Schritt-Verfahren")
+    max_length_return_value = DataElementField(type='num', max_length=3, _d="Maximale Länge des Rückgabewertes im Zwei-Schritt-Verfahren")
+    number_of_supported_lists = DataElementField(type='num', length=1, _d="Anzahl unterstützter aktiver TAN-Listen")
+    multiple_tans_allowed = DataElementField(type='jn', _d="Mehrfach-TAN erlaubt")
+    tan_time_dialog_association = DataElementField(type='code', length=1, _d="TAN Zeit- und Dialogbezug")
+    tan_list_number_required = DataElementField(type='code', length=1, _d="TAN-Listennummer erforderlich")
+    cancel_allowed = DataElementField(type='jn', _d="Auftragsstorno erlaubt")
+    sms_charge_account_required = DataElementField(type='jn', _d="SMS-Abbuchungskonto erforderlich")
+    challenge_class_required = DataElementField(type='jn', _d="Challenge-Klasse erforderlich")
+    challenge_value_required = DataElementField(type='jn', _d="Challenge-Betrag erforderlich")
+    challenge_structured = DataElementField(type='jn', _d="Challenge strukturiert")
+    initialisation_mode = DataElementField(type='code', _d="Initialisierungsmodus")
+    description_required = DataElementField(type='code', length=1, _d="Bezeichnung des TAN-Medium erforderlich")
+    supported_media_number = DataElementField(type='num', length=1, required=False, _d="Anzahl unterstützter aktiver TAN-Medien")
+
+class TwoStepParameters5(TwoStepParametersCommon):
+    zka_id = DataElementField(type='an', max_length=32, _d="ZKA TAN-Verfahren")
+    zka_version = DataElementField(type='an', max_length=10, _d="Version ZKA TAN-Verfahren")
+    name = DataElementField(type='an', max_length=30, _d="Name des Zwei-Schritt-Verfahrens")
+    max_length_input = DataElementField(type='num', max_length=2, _d="Maximale Länge des Eingabewertes im Zwei-Schritt-Verfahren")
+    allowed_format = DataElementField(type='code', length=1, _d="Erlaubtes Format im Zwei-Schritt-Verfahren")
+    text_return_value = DataElementField(type='an', max_length=30, _d="Text zur Belegung des Rückgabewertes im Zwei-Schritt-Verfahren")
+    max_length_return_value = DataElementField(type='num', max_length=3, _d="Maximale Länge des Rückgabewertes im Zwei-Schritt-Verfahren")
+    number_of_supported_lists = DataElementField(type='num', length=1, _d="Anzahl unterstützter aktiver TAN-Listen")
+    multiple_tans_allowed = DataElementField(type='jn', _d="Mehrfach-TAN erlaubt")
+    tan_time_dialog_association = DataElementField(type='code', length=1, _d="TAN Zeit- und Dialogbezug")
+    tan_list_number_required = DataElementField(type='code', length=1, _d="TAN-Listennummer erforderlich")
+    cancel_allowed = DataElementField(type='jn', _d="Auftragsstorno erlaubt")
+    sms_charge_account_required = DataElementField(type='code', length=1, _d="SMS-Abbuchungskonto erforderlich")
+    principal_account_required = DataElementField(type='code', length=1, _d="Auftraggeberkonto erforderlich")
+    challenge_class_required = DataElementField(type='jn', _d="Challenge-Klasse erforderlich")
+    challenge_structured = DataElementField(type='jn', _d="Challenge strukturiert")
+    initialisation_mode = DataElementField(type='code', _d="Initialisierungsmodus")
+    description_required = DataElementField(type='code', length=1, _d="Bezeichnung des TAN-Medium erforderlich")
+    supported_media_number = DataElementField(type='num', length=1, required=False, _d="Anzahl unterstützter aktiver TAN-Medien")
+
+class TwoStepParameters6(TwoStepParametersCommon):
+    zka_id = DataElementField(type='an', max_length=32, _d="ZKA TAN-Verfahren")
+    zka_version = DataElementField(type='an', max_length=10, _d="Version ZKA TAN-Verfahren")
+    name = DataElementField(type='an', max_length=30, _d="Name des Zwei-Schritt-Verfahrens")
+    max_length_input = DataElementField(type='num', max_length=2, _d="Maximale Länge des Eingabewertes im Zwei-Schritt-Verfahren")
+    allowed_format = DataElementField(type='code', length=1, _d="Erlaubtes Format im Zwei-Schritt-Verfahren")
+    text_return_value = DataElementField(type='an', max_length=30, _d="Text zur Belegung des Rückgabewertes im Zwei-Schritt-Verfahren")
+    max_length_return_value = DataElementField(type='num', max_length=3, _d="Maximale Länge des Rückgabewertes im Zwei-Schritt-Verfahren")
+    multiple_tans_allowed = DataElementField(type='jn', _d="Mehrfach-TAN erlaubt")
+    tan_time_dialog_association = DataElementField(type='code', length=1, _d="TAN Zeit- und Dialogbezug")
+    cancel_allowed = DataElementField(type='jn', _d="Auftragsstorno erlaubt")
+    sms_charge_account_required = DataElementField(type='code', length=1, _d="SMS-Abbuchungskonto erforderlich")
+    principal_account_required = DataElementField(type='code', length=1, _d="Auftraggeberkonto erforderlich")
+    challenge_class_required = DataElementField(type='jn', _d="Challenge-Klasse erforderlich")
+    challenge_structured = DataElementField(type='jn', _d="Challenge strukturiert")
+    initialisation_mode = DataElementField(type='code', _d="Initialisierungsmodus")
+    description_required = DataElementField(type='code', length=1, _d="Bezeichnung des TAN-Medium erforderlich")
+    response_hhd_uc_required = DataElementField(type='jn', _d="Antwort HHD_UC erforderlich")
+    supported_media_number = DataElementField(type='num', length=1, required=False, _d="Anzahl unterstützter aktiver TAN-Medien")
 
 class ParameterTwostepCommon(DataElementGroup):
     onestep_method_allowed = DataElementField(type='jn')
@@ -695,9 +774,21 @@ class ParameterTwostepTAN1(ParameterTwostepCommon):
     security_profile_bank_signature = DataElementField(type='code', length=1)
     twostep_parameters = DataElementGroupField(type=TwoStepParameters1, min_count=1, max_count=98)
 
+class ParameterTwostepTAN2(ParameterTwostepCommon):
+    twostep_parameters = DataElementGroupField(type=TwoStepParameters2, min_count=1, max_count=98)
+
 class ParameterTwostepTAN3(ParameterTwostepCommon):
     twostep_parameters = DataElementGroupField(type=TwoStepParameters3, min_count=1, max_count=98)
 
+class ParameterTwostepTAN4(ParameterTwostepCommon):
+    twostep_parameters = DataElementGroupField(type=TwoStepParameters4, min_count=1, max_count=98)
+
+class ParameterTwostepTAN5(ParameterTwostepCommon):
+    twostep_parameters = DataElementGroupField(type=TwoStepParameters5, min_count=1, max_count=98)
+
+class ParameterTwostepTAN6(ParameterTwostepCommon):
+    twostep_parameters = DataElementGroupField(type=TwoStepParameters6, min_count=1, max_count=98)
+
 class TransactionTanRequired(DataElementGroup):
     transaction = DataElementField(type='an', max_length=6)
     tan_required = DataElementField(type='jn')
index 8f01aff81cd9b74825eb5b7f584784058c7a21ad..44bf1db864ca7511df3ac649e5191017b812295e 100644 (file)
@@ -1,6 +1,6 @@
 import re
 
-from fints.formals import Container, ContainerMeta, SegmentHeader, DataElementGroupField, DataElementField, ReferenceMessage, SegmentSequenceField, SecurityProfile, SecurityIdentificationDetails, SecurityDateTime, EncryptionAlgorithm, KeyName, Certificate, HashAlgorithm, SignatureAlgorithm, UserDefinedSignature, Response, AccountInformation, AccountLimit, AllowedTransaction, ParameterTwostepTAN1, ParameterTwostepTAN3, ParameterPinTan, SupportedLanguages2, SupportedHBCIVersions2, BankIdentifier
+from fints.formals import Container, ContainerMeta, SegmentHeader, DataElementGroupField, DataElementField, ReferenceMessage, SegmentSequenceField, SecurityProfile, SecurityIdentificationDetails, SecurityDateTime, EncryptionAlgorithm, KeyName, Certificate, HashAlgorithm, SignatureAlgorithm, UserDefinedSignature, Response, AccountInformation, AccountLimit, AllowedTransaction, ParameterTwostepTAN1, ParameterTwostepTAN2, ParameterTwostepTAN3, ParameterTwostepTAN4, ParameterTwostepTAN5, ParameterTwostepTAN6, ParameterPinTan, SupportedLanguages2, SupportedHBCIVersions2, BankIdentifier
 
 from fints.utils import classproperty, SubclassesMixin
 
@@ -154,9 +154,21 @@ class ParameterSegment(FinTS3Segment):
 class HITANS1(ParameterSegment):
     parameter = DataElementGroupField(type=ParameterTwostepTAN1)
 
+class HITANS2(ParameterSegment):
+    parameter = DataElementGroupField(type=ParameterTwostepTAN2)
+
 class HITANS3(ParameterSegment):
     parameter = DataElementGroupField(type=ParameterTwostepTAN3)
 
+class HITANS4(ParameterSegment):
+    parameter = DataElementGroupField(type=ParameterTwostepTAN4)
+
+class HITANS5(ParameterSegment):
+    parameter = DataElementGroupField(type=ParameterTwostepTAN5)
+
+class HITANS6(ParameterSegment):
+    parameter = DataElementGroupField(type=ParameterTwostepTAN6)
+
 class HIPINS1(ParameterSegment):
     """PIN/TAN-spezifische Informationen, version 1