diff --git a/bunq/sdk/client.py b/bunq/sdk/client.py index e84e210..8e0d5c8 100644 --- a/bunq/sdk/client.py +++ b/bunq/sdk/client.py @@ -15,6 +15,16 @@ class ApiClient(object): :type _api_context: bunq.sdk.context.ApiContext """ + # Endpoints not requiring active session for the request to succeed. + _URL_DEVICE_SERVER = 'device-server' + _URI_INSTALLATION = 'installation' + _URI_SESSION_SERVER = 'session-server' + _URIS_NOT_REQUIRING_ACTIVE_SESSION = [ + _URI_INSTALLATION, + _URI_SESSION_SERVER, + _URL_DEVICE_SERVER, + ] + # HTTPS type of proxy, the only used at bunq _FIELD_PROXY_HTTPS = 'https' @@ -93,7 +103,9 @@ def _request(self, method, uri_relative, request_bytes, params, uri_relative_with_params = self._append_params_to_uri(uri_relative, params) - self._api_context.ensure_session_active() + if uri_relative not in self._URIS_NOT_REQUIRING_ACTIVE_SESSION: + self._api_context.ensure_session_active() + all_headers = self._get_all_headers( method, uri_relative_with_params, diff --git a/bunq/sdk/context.py b/bunq/sdk/context.py index e7ce859..c96ee50 100644 --- a/bunq/sdk/context.py +++ b/bunq/sdk/context.py @@ -166,8 +166,20 @@ def _get_session_timeout_seconds(cls, session_server): return session_server.user_person.session_timeout def ensure_session_active(self): + """ + Resets the session if it has expired. + """ + + if not self.is_session_active(): + self.reset_session() + + def is_session_active(self): + """ + :rtype: bool + """ + if self.session_context is None: - return + return False time_now = datetime.datetime.now() time_to_expiry = self.session_context.expiry_time - time_now @@ -175,8 +187,7 @@ def ensure_session_active(self): seconds=self._TIME_TO_SESSION_EXPIRY_MINIMUM_SECONDS ) - if time_to_expiry < time_to_expiry_minimum: - self.reset_session() + return time_to_expiry > time_to_expiry_minimum def reset_session(self): """