예제 #1
0
    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
예제 #3
0
    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
예제 #4
0
    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)
예제 #6
0
    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