def test_error_message(self): err = ResponseMessage(error="invalid_request", error_description="Something was missing", error_uri="http://example.com/error_message.html") ue_str = err.to_urlencoded() del err["error_uri"] ueo_str = err.to_urlencoded() assert ue_str != ueo_str assert "error_message" not in ueo_str assert "error_message" in ue_str assert is_error_message(err)
def test_error_response(self): err = ResponseMessage(error='Illegal') http_resp = MockResponse(400, err.to_urlencoded()) resp = self.client.parse_request_response( self.client.service['authorization'], http_resp) assert resp['error'] == 'Illegal' assert resp['status_code'] == 400
def do_response(self, response_args=None, request=None, error="", **kwargs): """ """ do_placement = True content_type = "text/html" _resp = {} _response_placement = None if response_args is None: response_args = {} LOGGER.debug("do_response kwargs: %s", kwargs) resp = None if error: _response = ResponseMessage(error=error) try: _response["error_description"] = kwargs["error_description"] except KeyError: pass elif "response_msg" in kwargs: resp = kwargs["response_msg"] _response_placement = kwargs.get('response_placement') do_placement = False _response = "" content_type = kwargs.get('content_type') if content_type is None: if self.response_format == "json": content_type = "application/json" elif self.request_format in ["jws", "jwe", "jose"]: content_type = "application/jose" else: content_type = "application/x-www-form-urlencoded" else: _response = self.response_info(response_args, request, **kwargs) if do_placement: content_type = kwargs.get('content_type') if content_type is None: if self.response_placement == "body": if self.response_format == "json": content_type = "application/json" resp = _response.to_json() elif self.request_format in ["jws", "jwe", "jose"]: content_type = "application/jose" resp = _response else: content_type = "application/x-www-form-urlencoded" resp = _response.to_urlencoded() elif self.response_placement == "url": # content_type = 'application/x-www-form-urlencoded' content_type = "" try: fragment_enc = kwargs["fragment_enc"] except KeyError: _ret_type = kwargs.get("return_type") if _ret_type: fragment_enc = fragment_encoding(_ret_type) else: fragment_enc = False if fragment_enc: resp = _response.request(kwargs["return_uri"], True) else: resp = _response.request(kwargs["return_uri"]) else: raise ValueError("Don't know where that is: '{}".format( self.response_placement)) if content_type: try: http_headers = set_content_type(kwargs["http_headers"], content_type) except KeyError: http_headers = [("Content-type", content_type)] else: try: http_headers = kwargs["http_headers"] except KeyError: http_headers = [] if _response_placement: _resp["response_placement"] = _response_placement http_headers.extend(OAUTH2_NOCACHE_HEADERS) _resp.update({"response": resp, "http_headers": http_headers}) try: _resp["cookie"] = kwargs["cookie"] except KeyError: pass return _resp
def do_response(self, response_args: Optional[dict] = None, request: Optional[Union[Message, dict]] = None, error: Optional[str] = "", **kwargs) -> dict: """ :param response_args: Information to use when constructing the response :param request: The original request :param error: Possible error encountered while processing the request """ do_placement = True content_type = "text/html" _resp = {} _response_placement = None if response_args is None: response_args = {} LOGGER.debug("do_response kwargs: %s", kwargs) resp = None if error: _response = ResponseMessage(error=error) try: _response["error_description"] = kwargs["error_description"] except KeyError: pass elif "response_msg" in kwargs: resp = kwargs["response_msg"] _response_placement = kwargs.get("response_placement") do_placement = False _response = "" content_type = kwargs.get("content_type") if content_type is None: if self.response_format == "json": content_type = "application/json" elif self.response_format in ["jws", "jwe", "jose"]: content_type = "application/jose" else: content_type = "application/x-www-form-urlencoded" else: _response = self.response_info(response_args, request, **kwargs) if do_placement: content_type = kwargs.get("content_type") if content_type is None: if self.response_placement == "body": if self.response_format == "json": content_type = "application/json; charset=utf-8" resp = _response.to_json() elif self.response_format in ["jws", "jwe", "jose"]: content_type = "application/jose; charset=utf-8" resp = _response else: content_type = "application/x-www-form-urlencoded" resp = _response.to_urlencoded() elif self.response_placement == "url": content_type = "application/x-www-form-urlencoded" fragment_enc = kwargs.get("fragment_enc") if not fragment_enc: _ret_type = kwargs.get("return_type") if _ret_type: fragment_enc = fragment_encoding(_ret_type) else: fragment_enc = False if fragment_enc: resp = _response.request(kwargs["return_uri"], True) else: resp = _response.request(kwargs["return_uri"]) else: raise ValueError("Don't know where that is: '{}".format( self.response_placement)) if content_type: try: http_headers = set_content_type(kwargs["http_headers"], content_type) except KeyError: http_headers = [("Content-type", content_type)] else: try: http_headers = kwargs["http_headers"] except KeyError: http_headers = [] if _response_placement: _resp["response_placement"] = _response_placement http_headers.extend(OAUTH2_NOCACHE_HEADERS) _resp.update({"response": resp, "http_headers": http_headers}) try: _resp["cookie"] = kwargs["cookie"] except KeyError: pass return _resp
def test_error_response_500(self): err = ResponseMessage(error='Illegal') http_resp = MockResponse(500, err.to_urlencoded()) with pytest.raises(ParseError): self.client.parse_request_response( self.client.service['authorization'], http_resp)
def do_response(self, response_args=None, request=None, error='', **kwargs): do_placement = True content_type = 'text/html' _resp = {} if response_args is None: response_args = {} if error: _response = ResponseMessage(error=error) try: _response['error_description'] = kwargs['error_description'] except KeyError: pass elif 'response_msg' in kwargs: resp = kwargs['response_msg'] do_placement = False _response = '' _resp['response_placement'] = 'body' else: _response = self.response_info(response_args, request, **kwargs) resp = None if do_placement: if self.response_placement == 'body': if self.response_format == 'json': content_type = 'application/json' resp = _response.to_json() elif self.request_format in ['jws', 'jwe', 'jose']: content_type = 'application/jose' resp = _response else: content_type = 'application/x-www-form-urlencoded' resp = _response.to_urlencoded() elif self.response_placement == 'url': # content_type = 'application/x-www-form-urlencoded' content_type = '' try: fragment_enc = kwargs['fragment_enc'] except KeyError: fragment_enc = fragment_encoding(kwargs['return_type']) if fragment_enc: resp = _response.request(kwargs['return_uri'], True) else: resp = _response.request(kwargs['return_uri']) else: raise ValueError("Don't know where that is: '{}".format( self.response_placement)) if content_type: try: http_headers = set_content_type(kwargs['http_headers'], content_type) except KeyError: http_headers = [('Content-type', content_type)] else: try: http_headers = kwargs['http_headers'] except KeyError: http_headers = [] http_headers.extend(OAUTH2_NOCACHE_HEADERS) _resp.update({'response': resp, 'http_headers': http_headers}) try: _resp['cookie'] = kwargs['cookie'] except KeyError: pass return _resp