def _func(self, conv): _response = conv.last_response _content = conv.last_content _client = conv.client res = {} if _response.status_code == 400: err = ErrorResponse().deserialize(_content, "json") err.verify() if err["error"] in ["consent_required", "interaction_required"]: # This is OK res["content"] = err.to_json() conv.protocol_response.append((err, _content)) else: self._message = "Not an error I expected" self._status = CRITICAL elif _response.status_code in [301, 302]: _loc = _response.headers["location"] callback = False for url in _client.redirect_uris: if _loc.startswith(url): callback = True break if not callback: self._message = "Not valid to not redirect back to RP" self._status = ERROR return res if "?" in _loc: _query = _loc.split("?")[1] elif "#" in _loc: _query = _loc.split("#")[1] else: # ??? self._message = "Expected info in the redirect" self._status = CRITICAL return res try: err = ErrorResponse().deserialize(_query, "urlencoded") err.verify() if err["error"] in ["consent_required", "interaction_required", "login_required"]: # This is OK res["content"] = err.to_json() conv.protocol_response.append((err, _query)) else: self._message = "Not an error I expected '%s'" % err[ "error"] self._status = CRITICAL except: resp = AuthorizationResponse().deserialize(_query, "urlencoded") resp.verify() res["content"] = resp.to_json() conv.protocol_response.append((resp, _query)) else: # should not get anything else self._message = "Not an response I expected" self._status = CRITICAL return res