5
5
from typing import List , Optional
6
6
7
7
from Cryptodome .PublicKey import RSA
8
- from Cryptodome .PublicKey .RSA import RsaKey
9
8
10
9
from bunq .sdk .context .api_environment_type import ApiEnvironmentType
11
10
from bunq .sdk .context .installation_context import InstallationContext
14
13
from bunq .sdk .json import converter
15
14
from bunq .sdk .model .core .payment_service_provider_credential_internal import PaymentServiceProviderCredentialInternal
16
15
from bunq .sdk .model .generated import endpoint
17
- from bunq .sdk .model .generated .endpoint import UserCredentialPasswordIp
16
+ from bunq .sdk .model .generated .endpoint import UserCredentialPasswordIp , UserPaymentServiceProvider
18
17
from bunq .sdk .security import security
19
18
20
19
if typing .TYPE_CHECKING :
@@ -63,9 +62,9 @@ def create(cls,
63
62
64
63
api_context ._api_key = api_key
65
64
66
- api_context ._initialize_installation ()
67
- api_context ._register_device (description , all_permitted_ip )
68
- api_context ._initialize_session ()
65
+ api_context .__initialize_installation ()
66
+ api_context .__register_device (description , all_permitted_ip )
67
+ api_context .__initialize_session ()
69
68
70
69
return api_context
71
70
@@ -80,21 +79,25 @@ def create_for_psd2(cls,
80
79
proxy_url : List [str ] = None ) -> ApiContext :
81
80
api_context = cls (environment_type , proxy_url )
82
81
83
- api_context ._initialize_installation ()
82
+ api_context .__initialize_installation ()
84
83
85
- service_provider_credential = api_context ._initialize_psd2_credential (
84
+ service_provider_credential = api_context .__initialize_psd2_credential (
86
85
certificate ,
87
86
private_key ,
88
87
all_chain_certificate )
89
88
89
+ print (service_provider_credential .token_value )
90
+
90
91
api_context ._api_key = service_provider_credential .token_value
91
92
92
- api_context ._register_device (description , all_permitted_ip )
93
- api_context ._initialize_session ()
93
+ print (api_context ._api_key )
94
+
95
+ api_context .__register_device (description , all_permitted_ip )
96
+ api_context .__initialize_session_for_psd2 (service_provider_credential )
94
97
95
98
return api_context
96
99
97
- def _initialize_installation (self ) -> None :
100
+ def __initialize_installation (self ) -> None :
98
101
from bunq .sdk .model .core .installation import Installation
99
102
100
103
private_key_client = security .generate_rsa_private_key ()
@@ -114,14 +117,14 @@ def _initialize_installation(self) -> None:
114
117
public_key_server
115
118
)
116
119
117
- def _initialize_psd2_credential (self ,
118
- certificate : str ,
119
- private_key : str ,
120
- all_chain_certificate : List [str ], ) -> UserCredentialPasswordIp :
120
+ def __initialize_psd2_credential (self ,
121
+ certificate : str ,
122
+ private_key : str ,
123
+ all_chain_certificate : List [str ], ) -> UserCredentialPasswordIp :
121
124
session_token = self .installation_context .token
122
125
client_key_pair = self .installation_context .private_key_client
123
126
124
- string_to_sign = security .public_key_to_string (client_key_pair .publickey ()) + session_token
127
+ string_to_sign = security .public_key_to_string (client_key_pair .publickey ()) + " \n " + session_token
125
128
encoded_signature = security .generate_signature (string_to_sign , security .rsa_key_from_string (private_key ))
126
129
127
130
payment_response_provider = PaymentServiceProviderCredentialInternal .create_with_api_context (
@@ -133,19 +136,21 @@ def _initialize_psd2_credential(self,
133
136
134
137
return payment_response_provider
135
138
136
- def _register_device (self ,
137
- device_description : str ,
138
- permitted_ips : List [str ]) -> None :
139
+ def __register_device (self ,
140
+ device_description : str ,
141
+ permitted_ips : List [str ]) -> None :
139
142
from bunq .sdk .model .core .device_server_internal import DeviceServerInternal
140
143
144
+ print (self .api_key )
145
+
141
146
DeviceServerInternal .create (
142
147
device_description ,
143
148
self .api_key ,
144
149
permitted_ips ,
145
150
api_context = self
146
151
)
147
152
148
- def _initialize_session (self ) -> None :
153
+ def __initialize_session (self ) -> None :
149
154
from bunq .sdk .model .core .session_server import SessionServer
150
155
151
156
session_server = SessionServer .create (self ).value
@@ -155,6 +160,17 @@ def _initialize_session(self) -> None:
155
160
156
161
self ._session_context = SessionContext (token , expiry_time , user_id )
157
162
163
+ def _initialize_session_for_psd2 (self , user_payment_service_provider : UserPaymentServiceProvider ) -> None :
164
+ from bunq .sdk .model .core .session_server import SessionServer
165
+
166
+ session_server = SessionServer .create (self ).value
167
+
168
+ token = session_server .token .token
169
+ expiry_time = self ._get_expiry_timestamp (session_server )
170
+ user_id = session_server .get_referenced_user ().id_
171
+
172
+ self ._session_context = SessionContext (token , expiry_time , user_id )
173
+
158
174
@classmethod
159
175
def _get_expiry_timestamp (cls , session_server : SessionServer ) -> datetime .datetime :
160
176
timeout_seconds = cls ._get_session_timeout_seconds (session_server )
@@ -168,6 +184,8 @@ def _get_session_timeout_seconds(cls, session_server: SessionServer) -> int:
168
184
return session_server .user_company .session_timeout
169
185
elif session_server .user_person is not None :
170
186
return session_server .user_person .session_timeout
187
+ elif session_server .user_payment_service_provider is not None :
188
+ return session_server .user_payment_service_provider .session_timeout
171
189
elif session_server .user_api_key is not None :
172
190
return session_server \
173
191
.user_api_key \
@@ -209,7 +227,7 @@ def reset_session(self) -> None:
209
227
"""
210
228
211
229
self ._drop_session_context ()
212
- self ._initialize_session ()
230
+ self .__initialize_session ()
213
231
214
232
def _drop_session_context (self ) -> None :
215
233
self ._session_context = None
0 commit comments