From: Henryk Plötz Date: Sat, 11 Aug 2018 18:29:05 +0000 (+0200) Subject: Implement HITANS segments X-Git-Tag: v2.0.0~1^2~118 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d906195cd8b8fe1e3ab3e29570b29ef93d5378db;p=thirdparty%2Fpython-fints.git Implement HITANS segments --- diff --git a/fints/formals.py b/fints/formals.py index ad9fa79..6004a39 100644 --- a/fints/formals.py +++ b/fints/formals.py @@ -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') diff --git a/fints/segments/__init__.py b/fints/segments/__init__.py index 8f01aff..44bf1db 100644 --- a/fints/segments/__init__.py +++ b/fints/segments/__init__.py @@ -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