Skip to content

Commit 3221e37

Browse files
committed
"Translated" test_server_36_oauth2_token_exchange to use server and client instances instead of handcrafted messages.
1 parent 9964524 commit 3221e37

File tree

4 files changed

+397
-539
lines changed

4 files changed

+397
-539
lines changed

src/idpyoidc/client/oauth2/token_exchange.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
from idpyoidc.client.oauth2.utils import get_state_parameter
55
from idpyoidc.client.service import Service
6+
from idpyoidc.exception import MissingParameter
7+
from idpyoidc.exception import MissingRequiredAttribute
68
from idpyoidc.message import oauth2
79
from idpyoidc.message.oauth2 import ResponseMessage
810
from idpyoidc.time_util import time_sans_frac
@@ -45,7 +47,11 @@ def oauth_pre_construct(self, request_args=None, post_args=None, **kwargs):
4547
request_args = {}
4648

4749
if 'subject_token' not in request_args:
48-
_key = get_state_parameter(request_args, kwargs)
50+
try:
51+
_key = get_state_parameter(request_args, kwargs)
52+
except MissingParameter:
53+
raise MissingRequiredAttribute("subject_token")
54+
4955
parameters = {'access_token', 'scope'}
5056

5157
_state = self.client_get("service_context").state

src/idpyoidc/client/service.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,13 @@
1616
from idpyoidc.message.oauth2 import ResponseMessage
1717
from idpyoidc.message.oauth2 import is_error_message
1818
from idpyoidc.util import importer
19-
20-
from ..constant import JOSE_ENCODED
21-
from ..constant import JSON_ENCODED
22-
from ..constant import URL_ENCODED
2319
from .configure import Configuration
2420
from .exception import ResponseError
2521
from .util import get_http_body
2622
from .util import get_http_url
23+
from ..constant import JOSE_ENCODED
24+
from ..constant import JSON_ENCODED
25+
from ..constant import URL_ENCODED
2726

2827
__author__ = "Roland Hedberg"
2928

@@ -452,6 +451,7 @@ def get_request_parameters(
452451
content_type = JSON_ENCODED
453452

454453
_info["body"] = get_http_body(request, content_type)
454+
455455
_headers.update({"Content-Type": content_type})
456456

457457
if _headers:
@@ -655,7 +655,7 @@ def construct_uris(self, base_url, hex):
655655
uri = self.usage_to_uri_map.get(usage)
656656
if uri and uri not in self.metadata:
657657
self.metadata[uri] = self.get_uri(base_url, self.callback_path[uri],
658-
hex)
658+
hex)
659659

660660
def get_metadata(self, attribute, default=None):
661661
try:

src/idpyoidc/server/oauth2/token.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from idpyoidc.server.exception import ProcessError
1414
from idpyoidc.server.oauth2.token_helper import AccessTokenHelper
1515
from idpyoidc.server.oauth2.token_helper import RefreshTokenHelper
16+
from idpyoidc.server.session import MintingNotAllowed
1617
from idpyoidc.server.session.token import TOKEN_TYPES_MAPPING
1718
from idpyoidc.util import importer
1819

@@ -121,6 +122,8 @@ def process_request(self, request: Optional[Union[Message, dict]] = None, **kwar
121122
)
122123
except JWEException as err:
123124
return self.error_cls(error="invalid_request", error_description="%s" % err)
125+
except MintingNotAllowed as err:
126+
return self.error_cls(error="invalid_request", error_description="%s" % err)
124127

125128
if isinstance(response_args, ResponseMessage):
126129
return response_args

0 commit comments

Comments
 (0)