diff --git a/pyghmi/ipmi/oem/lenovo/imm.py b/pyghmi/ipmi/oem/lenovo/imm.py index 62254d6e..15b98072 100644 --- a/pyghmi/ipmi/oem/lenovo/imm.py +++ b/pyghmi/ipmi/oem/lenovo/imm.py @@ -55,6 +55,8 @@ class IMMClient(object): def __init__(self, ipmicmd): self.ipmicmd = weakref.proxy(ipmicmd) self.imm = ipmicmd.bmc + self.adp_referer = 'https://{0}/designs/imm/index-console.php'.format( + self.imm) self.username = ipmicmd.ipmi_session.userid self.password = ipmicmd.ipmi_session.password self._wc = None # The webclient shall be initiated on demand @@ -203,7 +205,8 @@ class IMMClient(object): adapterdata = self.get_cached_data('lenovo_cached_adapters') if not adapterdata: if self.wc: - adapterdata = self.wc.grab_json_response(self.ADP_URL) + adapterdata = self.wc.grab_json_response( + self.ADP_URL, referer=self.adp_referer) if adapterdata: self.datacache['lenovo_cached_adapters'] = ( adapterdata, util._monotonic_time()) @@ -293,7 +296,8 @@ class IMMClient(object): adapterdata = self.get_cached_data('lenovo_cached_adapters') if not adapterdata: if self.wc: - adapterdata = self.wc.grab_json_response(self.ADP_URL) + adapterdata = self.wc.grab_json_response( + self.ADP_URL, referer=self.adp_referer) if adapterdata: self.datacache['lenovo_cached_adapters'] = ( adapterdata, util._monotonic_time()) diff --git a/pyghmi/util/webclient.py b/pyghmi/util/webclient.py index 3bd7057d..4a5bb009 100644 --- a/pyghmi/util/webclient.py +++ b/pyghmi/util/webclient.py @@ -112,11 +112,11 @@ class SecureHTTPConnection(httplib.HTTPConnection, object): self.cookies[k] = c[k].value return rsp - def grab_json_response(self, url, data=None): + def grab_json_response(self, url, data=None, referer=None): if data: - self.request('POST', url, data) + self.request('POST', url, data, referer=referer) else: - self.request('GET', url) + self.request('GET', url, referer=referer) rsp = self.getresponse() if rsp.status == 200: return json.loads(rsp.read()) @@ -152,7 +152,7 @@ class SecureHTTPConnection(httplib.HTTPConnection, object): rsp.read()) return rsp.read() - def request(self, method, url, body=None, headers=None): + def request(self, method, url, body=None, headers=None, referer=None): if headers is None: headers = self.stdheaders.copy() if method == 'GET' and 'Content-Type' in headers: @@ -162,5 +162,7 @@ class SecureHTTPConnection(httplib.HTTPConnection, object): for ckey in self.cookies: cookies.append('{0}={1}'.format(ckey, self.cookies[ckey])) headers['Cookie'] = '; '.join(cookies) + if referer: + headers['Referer'] = referer return super(SecureHTTPConnection, self).request(method, url, body, headers)