def _func(self, conv): res = {} try: _response = last_http_response(conv) except NoSuchEvent: return res try: _content = last_raw_response(conv) except NoSuchEvent: return res if _response.status_code == 400: err = ErrorResponse().deserialize(_content, "json") err.verify() res["content"] = err.to_json() conv.events.store(EV_PROTOCOL_RESPONSE, err) elif _response.status_code in [301, 302, 303]: pass elif _response.status_code in SUCCESSFUL: err = ErrorResponse().deserialize(_content, "json") err.verify() res["content"] = err.to_json() conv.events.store(EV_PROTOCOL_RESPONSE, err) else: self._message = "Expected a 400 error message" self._status = CRITICAL return res
def _func(self, conv): _response = conv.last_response res = {} try: _loc = _response.headers["location"] if "?" in _loc: query = _loc.split("?")[1] elif "#" in _loc: query = _loc.split("#")[1] else: # ??? self._message = "Expected a redirect" self._status = CRITICAL return res except (KeyError, AttributeError): self._message = "Expected a redirect" self._status = CRITICAL return res if _response.status_code == 302: err = ErrorResponse().deserialize(query, "urlencoded") try: err.verify() res["content"] = err.to_json() conv.protocol_response.append((err, query)) except MissingRequiredAttribute: self._message = "Expected an error message" self._status = CRITICAL else: self._message = "Expected an error message" self._status = CRITICAL return res
def _func(self, environ): _response = environ["response"] _content = environ["content"] res = {} if _response.status_code >= 400 : self._status = self.status self._message = self.msg if "application/json" in _response.headers["content-type"]: try: err = ErrorResponse().deserialize(_content, "json") self._message = err.to_json() except Exception: res["content"] = _content else: res["content"] = _content res["url"] = environ["url"] res["http_status"] = _response.status_code else: # might still be an error message try: err = ErrorResponse().deserialize(_content, "json") err.verify() self._message = err.to_json() self._status = self.status except Exception: pass res["url"] = environ["url"] return res
def _func(self, environ): _response = environ["response"] _content = environ["content"] res = {} if _response.status_code >= 400 : if "application/json" in _response.headers["content-type"]: try: err = ErrorResponse().deserialize(_content, "json") err.verify() res["content"] = err.to_json() res["temp"] = err except Exception: res["content"] = _content else: res["content"] = _content else: # might still be an error message try: err = ErrorResponse().deserialize(_content, "json") err.verify() res["content"] = err.to_json() except Exception: self._message = "Expected error message" self._status = CRITICAL res["url"] = environ["url"] return res
def _func(self, conv): res = {} response = conv.events.last_item(EV_HTTP_RESPONSE) if response.status_code == 302: _loc = response.headers["location"] if "?" in _loc: _query = _loc.split("?")[1] elif "#" in _loc: _query = _loc.split("#")[1] else: self._message = "Faulty error message" self._status = ERROR return try: err = ErrorResponse().deserialize(_query, "urlencoded") err.verify() # res["temp"] = err res["message"] = err.to_dict() except Exception: self._message = "Faulty error message" self._status = ERROR else: self._message = "Expected a redirect with an error message" self._status = ERROR return res
def _func(self, conv): _response = conv.events.last_item(EV_HTTP_RESPONSE) res = {} try: _loc = _response.headers["location"] if "?" in _loc: query = _loc.split("?")[1] elif "#" in _loc: query = _loc.split("#")[1] else: # ??? self._message = "Expected a redirect" self._status = CRITICAL return res env_id = conv.events.store(EV_RESPONSE, query) except (KeyError, AttributeError): self._message = "Expected a redirect" self._status = CRITICAL return res if _response.status_code == 302: err = ErrorResponse().deserialize(query, "urlencoded") try: err.verify() res["content"] = err.to_json() conv.events.store(EV_PROTOCOL_RESPONSE, err, env_id) except MissingRequiredAttribute: self._message = "Expected an error message" self._status = CRITICAL else: self._message = "Expected an error message" self._status = CRITICAL return res
def _func(self, conv): res = {} response = conv.last_response if response.status_code == 302: _loc = response.headers["location"] if "?" in _loc: _query = _loc.split("?")[1] elif "#" in _loc: _query = _loc.split("#")[1] else: self._message = "Faulty error message" self._status = ERROR return try: err = ErrorResponse().deserialize(_query, "urlencoded") err.verify() # res["temp"] = err res["message"] = err.to_dict() except Exception: self._message = "Faulty error message" self._status = ERROR else: self._message = "Expected a redirect with an error message" self._status = ERROR return res
def _func(self, conv): _response = conv.last_response _content = conv.last_content res = {} if _response.status_code >= 400: self._status = self.status self._message = self.msg if CONT_JSON in _response.headers["content-type"]: try: err = ErrorResponse().deserialize(_content, "json") self._message = err.to_json() except Exception: res["content"] = _content else: res["content"] = _content res["url"] = conv.position res["http_status"] = _response.status_code else: # might still be an error message try: err = ErrorResponse().deserialize(_content, "json") err.verify() self._message = err.to_json() self._status = self.status except Exception: pass res["url"] = conv.position return res
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
def parse_request_response(self, reqresp, response, body_type, state="", verify=True, **kwargs): if reqresp.status_code in SUCCESSFUL: body_type = verify_header(reqresp, body_type) elif reqresp.status_code in [302, 303]: # redirect return reqresp elif reqresp.status_code == 500: logger.error("(%d) %s" % (reqresp.status_code, sanitize(reqresp.text))) raise ParseError("ERROR: Something went wrong: %s" % reqresp.text) elif reqresp.status_code in [400, 401]: # expecting an error response if issubclass(response, ErrorResponse): pass else: logger.error("(%d) %s" % (reqresp.status_code, sanitize(reqresp.text))) raise HttpError("HTTP ERROR: %s [%s] on %s" % (reqresp.text, reqresp.status_code, reqresp.url)) if response: if body_type == 'txt': # no meaning trying to parse unstructured text return reqresp.text if not verify: # AymRod: skip parsing return reqresp.text else: return self.parse_response(response, reqresp.text, body_type, state, **kwargs) # could be an error response if reqresp.status_code in [200, 400, 401]: if body_type == 'txt': body_type = 'urlencoded' try: err = ErrorResponse().deserialize(reqresp.message, method=body_type) try: err.verify() except PyoidcError: pass else: return err except Exception: pass return reqresp
def _func(self, conv): _response = conv.last_response _content = conv.last_content res = {} if _response.status_code == 400: err = ErrorResponse().deserialize(_content, "json") err.verify() res["content"] = err.to_json() conv.protocol_response.append((err, _content)) else: self._message = "Expected a 400 error message" self._status = CRITICAL return res
def _func(self, environ): _response = environ["response"] _content = environ["content"] res = {} if _response.status_code == 400 : err = ErrorResponse().deserialize(_content, "json") err.verify() res["content"] = err.to_json() environ["item"].append(err) else: self._message = "Expected a 400 error message" self._status = CRITICAL return res
class CheckErrorResponse(ExpectedError): """ Checks that the HTTP response status is outside the 200 or 300 range or that an JSON encoded error message has been received """ cid = "check-error-response" msg = "OP error" def _func(self, conv): res = {} # did I get one, should only be one try: instance, _ = get_protocol_response(conv, ErrorResponse)[0] except ValueError: pass else: return res _response = conv.last_response _content = conv.last_content if _response.status_code >= 400: content_type = _response.headers["content-type"] if content_type is None: res["content"] = _content elif CONT_JSON in content_type: try: self.err = ErrorResponse().deserialize(_content, "json") self.err.verify() res["content"] = self.err.to_json() except Exception: res["content"] = _content else: res["content"] = _content elif _response.status_code in [300, 301, 302, 303]: pass else: # might still be an error message try: self.err = ErrorResponse().deserialize(_content, "json") self.err.verify() res["content"] = self.err.to_json() except Exception: self._message = "Expected an error message" self._status = CRITICAL res["url"] = conv.position return res
class CheckErrorResponse(ExpectedError): """ Checks that the HTTP response status is outside the 200 or 300 range or that an JSON encoded error message has been received """ cid = "check-error-response" msg = "OP error" def _func(self, conv): res = {} # did I get one, should only be one try: instance, _ = get_protocol_response(conv, ErrorResponse)[0] except ValueError: pass else: return res _response = conv.events.last_item(EV_HTTP_RESPONSE) _content = conv.last_content if _response.status_code >= 400: content_type = _response.headers["content-type"] if content_type is None: res["content"] = _content elif CONT_JSON in content_type: try: self.err = ErrorResponse().deserialize(_content, "json") self.err.verify() res["content"] = self.err.to_json() except Exception: res["content"] = _content else: res["content"] = _content elif _response.status_code in [300, 301, 302, 303]: pass else: # might still be an error message try: self.err = ErrorResponse().deserialize(_content, "json") self.err.verify() res["content"] = self.err.to_json() except Exception: self._message = "Expected an error message" self._status = CRITICAL res["url"] = conv.position return res
def _func(self, environ): _response = environ["response"] res = {} query = _response.headers["location"].split("?")[1] if _response.status_code == 302 : err = ErrorResponse().deserialize(query, "urlencoded") err.verify() res["content"] = err.to_json() environ["item"].append(err) else: self._message = "Expected error message" self._status = CRITICAL return res
def handle_registration_info(self, response): if response.status_code in SUCCESSFUL: resp = self.message_factory.get_response_type( "registration_endpoint" )().deserialize(response.text, "json") self.store_response(resp, response.text) self.store_registration_info(resp) else: resp = ErrorResponse().deserialize(response.text, "json") try: resp.verify() self.store_response(resp, response.text) except Exception: raise PyoidcError("Registration failed: {}".format(response.text)) return resp
def parse_request_response(self, reqresp, response, body_type, state="", **kwargs): if reqresp.status_code in SUCCESSFUL: body_type = verify_header(reqresp, body_type) elif reqresp.status_code in [302, 303]: # redirect return reqresp elif reqresp.status_code == 500: logger.error("(%d) %s" % (reqresp.status_code, sanitize(reqresp.text))) raise ParseError("ERROR: Something went wrong: %s" % reqresp.text) elif reqresp.status_code in [400, 401]: # expecting an error response if issubclass(response, ErrorResponse): pass else: logger.error("(%d) %s" % (reqresp.status_code, sanitize(reqresp.text))) raise HttpError("HTTP ERROR: %s [%s] on %s" % ( reqresp.text, reqresp.status_code, reqresp.url)) if response: if body_type == 'txt': # no meaning trying to parse unstructured text return reqresp.text return self.parse_response(response, reqresp.text, body_type, state, **kwargs) # could be an error response if reqresp.status_code in [200, 400, 401]: if body_type == 'txt': body_type = 'urlencoded' try: err = ErrorResponse().deserialize(reqresp.message, method=body_type) try: err.verify() except PyoidcError: pass else: return err except Exception: pass return reqresp
class CheckErrorResponse(ExpectedError): """ Checks that the HTTP response status is outside the 200 or 300 range or that an JSON encoded error message has been received """ cid = "check-error-response" msg = "OP error" def _func(self, conv): res = {} # did I get one, should only be one try: _ = get_protocol_response(conv, ErrorResponse)[0] except ValueError: pass else: return res try: _response = last_http_response(conv) except NoSuchEvent: return {} if _response.status_code >= 400: content_type = _response.headers["content-type"] _content = _response.text if content_type is None: res["content"] = _content elif CONT_JSON in content_type: try: self.err = ErrorResponse().deserialize(_content, "json") self.err.verify() res["content"] = self.err.to_json() except Exception: res["content"] = _content else: res["content"] = _content elif _response.status_code in [300, 301, 302, 303]: pass else: # Should never get here self._message = 'Not an error message ??' self._status = WARNING return res
def _func(self, conv): res = {} try: _response = last_http_response(conv) except NoSuchEvent: return res if _response.status_code == 400: err = ErrorResponse().deserialize(_response.text, "json") try: err.verify() except MissingRequiredAttribute: try: self._status = self._kwargs["status"] except KeyError: self._status = ERROR self._message = "Expected an error message" else: res["content"] = err.to_json() elif _response.status_code in [301, 302, 303]: pass elif _response.status_code < 300: _content = conv.events.last_item(EV_RESPONSE) err = ErrorResponse().deserialize(_content, "json") try: err.verify() except MissingRequiredAttribute: try: self._status = self._kwargs["status"] except KeyError: self._status = ERROR self._message = "Expected an error message" else: res["content"] = err.to_json() conv.events.store(EV_PROTOCOL_RESPONSE, err) else: self._message = "Expected an error message" try: self._status = self._kwargs["status"] except KeyError: self._status = CRITICAL return res
def _func(self, environ): res = {} response = environ["response"] if response.status_code == 302: _query = response.headers["location"].split("?")[1] try: err = ErrorResponse().deserialize(_query, "urlencoded") err.verify() res["temp"] = err res["message"] = err.to_dict() except Exception: self._message = "Faulty error message" self._status = ERROR else: self._message = "Expected a redirect with an error message" self._status = ERROR return res
class CheckErrorResponse(ExpectedError): """ Checks that the HTTP response status is outside the 200 or 300 range or that an JSON encoded error message has been received """ cid = "check-error-response" msg = "OP error" def _func(self, conv): _response = conv.last_response _content = conv.last_content res = {} if _response.status_code >= 400: content_type = _response.headers["content-type"] if content_type is None: res["content"] = _content elif CONT_JSON in content_type: try: self.err = ErrorResponse().deserialize(_content, "json") self.err.verify() res["content"] = self.err.to_json() #res["temp"] = err except Exception: res["content"] = _content else: res["content"] = _content else: # might still be an error message try: self.err = ErrorResponse().deserialize(_content, "json") self.err.verify() res["content"] = self.err.to_json() except Exception: self._message = "Expected error message" self._status = CRITICAL res["url"] = conv.position return res
def _func(self, conv): _response = conv.last_response _content = conv.last_content res = {} if _response.status_code == 400: err = ErrorResponse().deserialize(_content, "json") try: err.verify() except MissingRequiredAttribute: try: self._status = self._kwargs["status"] except KeyError: self._status = ERROR self._message = "Expected an error message" else: res["content"] = err.to_json() elif _response.status_code in [301, 302, 303]: pass elif _response.status_code < 300: err = ErrorResponse().deserialize(_content, "json") try: err.verify() except MissingRequiredAttribute: try: self._status = self._kwargs["status"] except KeyError: self._status = ERROR self._message = "Expected an error message" else: res["content"] = err.to_json() conv.protocol_response.append((err, _content)) else: self._message = "Expected an error message" try: self._status = self._kwargs["status"] except KeyError: self._status = CRITICAL return res
def _func(self, conv): _response = conv.last_response _content = conv.last_content res = {} if _response.status_code == 400: err = ErrorResponse().deserialize(_content, "json") err.verify() res["content"] = err.to_json() conv.protocol_response.append((err, _content)) elif _response.status_code in [301, 302, 303]: pass elif _response.status_code in SUCCESSFUL: err = ErrorResponse().deserialize(_content, "json") err.verify() res["content"] = err.to_json() conv.protocol_response.append((err, _content)) else: self._message = "Expected a 400 error message" self._status = CRITICAL return res
def _func(self, conv): _response = conv.events.last_item(EV_HTTP_RESPONSE) _content = conv.events.last_item(EV_RESPONSE) res = {} if _response.status_code == 400: err = ErrorResponse().deserialize(_content, "json") err.verify() res["content"] = err.to_json() conv.events.store(EV_PROTOCOL_RESPONSE, err) elif _response.status_code in [301, 302, 303]: pass elif _response.status_code in SUCCESSFUL: err = ErrorResponse().deserialize(_content, "json") err.verify() res["content"] = err.to_json() conv.events.store(EV_PROTOCOL_RESPONSE, err) else: self._message = "Expected a 400 error message" self._status = CRITICAL return res
def _func(self, conv): _response = conv.last_response _content = conv.last_content res = {} if not _response: return res if _response.status_code >= 400: self._status = self.status self._message = self.msg if CONT_JSON in _response.headers["content-type"]: try: err = ErrorResponse().deserialize(_content, "json") self._message = err.to_json() except Exception: res["content"] = _content else: res["content"] = _content res["url"] = conv.position res["http_status"] = _response.status_code elif _response.status_code in [300, 301, 302]: pass else: # might still be an error message try: err = ErrorResponse().deserialize(_content, "json") err.verify() self._message = err.to_json() self._status = self.status except Exception: pass res["url"] = conv.position return res