]> git.ipfire.org Git - thirdparty/python-fints.git/commitdiff
Make get_sepa_accounts work
authorRaphael Michel <mail@raphaelmichel.de>
Mon, 2 Jan 2017 18:11:08 +0000 (19:11 +0100)
committerRaphael Michel <mail@raphaelmichel.de>
Mon, 2 Jan 2017 18:11:08 +0000 (19:11 +0100)
fints3/client.py
fints3/dialog.py
fints3/message.py
fints3/segments/message.py

index 88a81b8a08b220ee3c2b4a4bd2243a025e0acd02..b52ed7206d6cc59c60b2d473f132ab9a93e539bd 100644 (file)
@@ -60,5 +60,6 @@ class FinTS3PinTanClient(FinTS3Client):
         return dialog
 
     def _new_message(self, dialog: FinTSDialog, segments):
-        return FinTSMessage(self.blz, self.username, self.pin, dialog.systemid, dialog.dialogid, dialog.msgno, segments)
+        return FinTSMessage(self.blz, self.username, self.pin, dialog.systemid, dialog.dialogid, dialog.msgno,
+                            segments, dialog.tan_mechs)
 
index 2fe952b6a3b845ea2df3724dc0d6b1ff9345681c..16d8c09b23283282df10dce6db5b23a5a463fe79 100644 (file)
@@ -58,13 +58,13 @@ class FinTSDialog:
     def init(self):
         logger.info('Initialize Dialog')
 
-        seg_identification = HKIDN(3, self.blz, self.username, 0)
+        seg_identification = HKIDN(3, self.blz, self.username, self.systemid)
         seg_prepare = HKVVB(4)
 
         msg_init = FinTSMessage(self.blz, self.username, self.pin, self.systemid, self.dialogid, self.msgno, [
             seg_identification,
             seg_prepare,
-        ])
+        ], self.tan_mechs)
         logger.debug('Sending INIT: {}'.format(msg_init))
         resp = self.send(msg_init)
         logger.debug('Got INIT response: {}'.format(resp))
index d6e9d96a6793679a576d1389e208278b534072d6..b5fe3cf372f5e99f43660dc3a2d33091cb17c032 100644 (file)
@@ -5,7 +5,7 @@ from fints3.segments.message import HNHBK, HNSHK, HNVSK, HNVSD, HNSHA, HNHBS
 
 
 class FinTSMessage:
-    def __init__(self, blz, username, pin, systemid, dialogid, msgno, encrypted_segments):
+    def __init__(self, blz, username, pin, systemid, dialogid, msgno, encrypted_segments, tan_mechs=None):
         self.blz = blz
         self.username = username
         self.pin = pin
@@ -15,6 +15,13 @@ class FinTSMessage:
         self.segments = []
         self.encrypted_segments = []
 
+        if tan_mechs and '999' not in tan_mechs:
+            self.profile_version = 2
+            self.security_function = tan_mechs[0]
+        else:
+            self.profile_version = 1
+            self.security_function = '999'
+
         sig_head = self.build_signature_head()
         enc_head = self.build_encryption_head()
         self.segments.append(enc_head)
@@ -39,10 +46,11 @@ class FinTSMessage:
     def build_signature_head(self):
         rand = random.SystemRandom()
         self.secref = rand.randint(1000000, 9999999)
-        return HNSHK(2, self.secref, self.blz, self.username, self.systemid)
+        return HNSHK(2, self.secref, self.blz, self.username, self.systemid, self.profile_version,
+                     self.security_function)
 
     def build_encryption_head(self):
-        return HNVSK(998, self.blz, self.username, self.systemid)
+        return HNVSK(998, self.blz, self.username, self.systemid, self.profile_version)
 
     def build_header(self):
         l = sum([len(str(s)) for s in self.segments])
@@ -133,7 +141,7 @@ class FinTSResponse:
                 if id == "3920":
                     m = self.RE_TANMECH.search(msg)
                     if m:
-                        return m.group(0)
+                        return [m.group(0)]
         return False
 
     def _get_segment_max_version(self, name):
index a6f2ad2354f5bbf1d4ec267943f956183a9c4825..8db471b7a4bf363cfe69695d02c0f5a90dd18799 100644 (file)
@@ -37,12 +37,11 @@ class HNSHK(FinTS3Segment):
     SECURITY_FUNC = 999
     SECURITY_BOUNDARY = 1  # SHM
     SECURITY_SUPPLIER_ROLE = 1  # ISS
-    PINTAN_VERSION = 1  # 1-step
 
-    def __init__(self, segno, secref, blz, username, systemid):
+    def __init__(self, segno, secref, blz, username, systemid, profile_version, security_function=SECURITY_FUNC):
         data = [
-            ':'.join(['PIN', str(self.PINTAN_VERSION)]),
-            self.SECURITY_FUNC,
+            ':'.join(['PIN', str(profile_version)]),
+            security_function,
             secref,
             self.SECURITY_BOUNDARY,
             self.SECURITY_SUPPLIER_ROLE,
@@ -66,11 +65,10 @@ class HNVSK(FinTS3Segment):
 
     COMPRESSION_NONE = 0
     SECURITY_SUPPLIER_ROLE = 1  # ISS
-    PINTAN_VERSION = 1  # 1-step
 
-    def __init__(self, segno, blz, username, systemid):
+    def __init__(self, segno, blz, username, systemid, profile_version):
         data = [
-            ':'.join(['PIN', str(self.PINTAN_VERSION)]),
+            ':'.join(['PIN', str(profile_version)]),
             998,
             self.SECURITY_SUPPLIER_ROLE,
             ':'.join(['1', '', str(systemid)]),