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 == 302: # redirect pass elif reqresp.status_code == 500: logger.error("(%d) %s" % (reqresp.status_code, 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, reqresp.text)) raise HttpError("HTTP ERROR: %s [%s] on %s" % ( reqresp.text, reqresp.status_code, reqresp.url)) if body_type: if response: return self.parse_response(response, reqresp.text, body_type, state, **kwargs) else: raise OtherError("Didn't expect a response body") else: return reqresp
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 == 302: # redirect pass elif reqresp.status_code == 500: logger.error("(%d) %s" % (reqresp.status_code, 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, reqresp.text)) raise HttpError("HTTP ERROR: %s [%s] on %s" % (reqresp.text, reqresp.status_code, reqresp.url)) if body_type: if response: return self.parse_response(response, reqresp.text, body_type, state, **kwargs) else: raise OtherError("Didn't expect a response body") else: return reqresp
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 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
def test_verify_header(): class FakeResponse(): def __init__(self, header): self.headers = {"content-type": header} self.text = "TEST_RESPONSE" json_header = "application/json" jwt_header = "application/jwt" default_header = util.DEFAULT_POST_CONTENT_TYPE plain_text_header = "text/plain" undefined_header = "undefined" assert util.verify_header(FakeResponse(json_header), "json") == "json" assert util.verify_header(FakeResponse(jwt_header), "json") == "jwt" assert util.verify_header(FakeResponse(jwt_header), "jwt") == "jwt" assert util.verify_header(FakeResponse(default_header), "urlencoded") == "urlencoded" assert util.verify_header(FakeResponse(plain_text_header), "urlencoded") == "urlencoded" with pytest.raises(ValueError): util.verify_header(FakeResponse(json_header), "urlencoded") util.verify_header(FakeResponse(jwt_header), "urlencoded") util.verify_header(FakeResponse(default_header), "json") util.verify_header(FakeResponse(plain_text_header), "jwt") util.verify_header(FakeResponse(undefined_header), "json") util.verify_header(FakeResponse(json_header), "undefined")
def test_verify_header(): class FakeResponse(): def __init__(self, header): self.headers = {"content-type": header} self.text = "TEST_RESPONSE" json_header = "application/json" jwt_header = "application/jwt" default_header = util.DEFAULT_POST_CONTENT_TYPE plain_text_header = "text/plain" undefined_header = "undefined" assert util.verify_header(FakeResponse(json_header), "json") == "json" assert util.verify_header(FakeResponse(jwt_header), "json") == "jwt" assert util.verify_header(FakeResponse(jwt_header), "jwt") == "jwt" assert util.verify_header(FakeResponse(default_header), "urlencoded") == "urlencoded" assert util.verify_header(FakeResponse(plain_text_header), "urlencoded") == "urlencoded" with pytest.raises(AssertionError): util.verify_header(FakeResponse(json_header), "urlencoded") util.verify_header(FakeResponse(jwt_header), "urlencoded") util.verify_header(FakeResponse(default_header), "json") util.verify_header(FakeResponse(plain_text_header), "jwt") util.verify_header(FakeResponse(undefined_header), "json") with pytest.raises(ValueError): util.verify_header(FakeResponse(json_header), "undefined")