From 534963553b6960dafdb466e9017bc7602fac67c0 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Fri, 11 Jan 2019 16:31:17 -0500 Subject: [PATCH] Avoid stale webclient in XCC client XCC aggressively ages out a session. Check last token refresh before deciding a session is viable, discarding it if it is too old. Change-Id: I490263edb4b2a8ddbd91d6b236d4a7e689f410c7 --- pyghmi/ipmi/oem/lenovo/imm.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pyghmi/ipmi/oem/lenovo/imm.py b/pyghmi/ipmi/oem/lenovo/imm.py index 2ae79de4..e6e69a59 100644 --- a/pyghmi/ipmi/oem/lenovo/imm.py +++ b/pyghmi/ipmi/oem/lenovo/imm.py @@ -268,6 +268,7 @@ class IMMClient(object): def get_webclient(self): cv = self.ipmicmd.certverify wc = webclient.SecureHTTPConnection(self.imm, 443, verifycallback=cv) + wc.vintage = None try: wc.connect() except socket.error as se: @@ -301,7 +302,8 @@ class IMMClient(object): @property def wc(self): - if not self._wc: + if (not self._wc or (self._wc.vintage and + self._wc.vintage < util._monotonic_time() - 30)): self._wc = self.get_webclient() return self._wc @@ -757,6 +759,7 @@ class XCCClient(IMMClient): def get_webclient(self, login=True): cv = self.ipmicmd.certverify wc = webclient.SecureHTTPConnection(self.imm, 443, verifycallback=cv) + wc.vintage = util._monotonic_time() try: wc.connect() except socket.error as se: @@ -1402,6 +1405,7 @@ class XCCClient(IMMClient): wc.grab_json_response('/api/providers/identity') if '_csrf_token' in wc.cookies: wc.set_header('X-XSRF-TOKEN', self.wc.cookies['_csrf_token']) + wc.vintage = util._monotonic_time() def set_hostname(self, hostname): self.wc.grab_json_response('/api/dataset', {'IMM_HostName': hostname})