Skip to content

Commit f2328ca

Browse files
committed
Updated _unwrap_identity.
1 parent c69c3cc commit f2328ca

File tree

2 files changed

+46
-30
lines changed

2 files changed

+46
-30
lines changed

src/idpyoidc/server/oauth2/authorization.py

Lines changed: 35 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from urllib.parse import urlencode
88
from urllib.parse import urlparse
99

10-
from cryptojwt import BadSyntax
1110
from cryptojwt import as_unicode
1211
from cryptojwt import b64d
1312
from cryptojwt.jwe.exception import JWEException
@@ -90,10 +89,10 @@ def max_age(request):
9089

9190

9291
def verify_uri(
93-
endpoint_context: EndpointContext,
94-
request: Union[dict, Message],
95-
uri_type: str,
96-
client_id: Optional[str] = None,
92+
endpoint_context: EndpointContext,
93+
request: Union[dict, Message],
94+
uri_type: str,
95+
client_id: Optional[str] = None,
9796
):
9897
"""
9998
A redirect URI
@@ -223,10 +222,10 @@ def get_uri(endpoint_context, request, uri_type):
223222

224223

225224
def authn_args_gather(
226-
request: Union[AuthorizationRequest, dict],
227-
authn_class_ref: str,
228-
cinfo: dict,
229-
**kwargs,
225+
request: Union[AuthorizationRequest, dict],
226+
authn_class_ref: str,
227+
cinfo: dict,
228+
**kwargs,
230229
):
231230
"""
232231
Gather information to be used by the authentication method
@@ -522,27 +521,33 @@ def _login_required_error(self, redirect_uri, request):
522521
return _res
523522

524523
def _unwrap_identity(self, identity):
524+
# identity is a dict or a json object
525+
# the value of 'uid' in the dictionary might be a base64 encoded (b64e) json object
525526
if isinstance(identity, dict):
527+
_uid = as_unicode(identity['uid'])
526528
try:
527-
_id = b64d(as_bytes(identity["uid"]))
528-
except BadSyntax:
529+
_id = b64d(as_bytes(_uid))
530+
except Exception as err:
529531
return identity
530532
else:
531533
try:
532534
_id = b64d(as_bytes(identity))
533-
except BadSyntax:
535+
except Exception as err:
534536
return identity
535537

536-
return json.loads(as_unicode(_id))
538+
try:
539+
return json.loads(as_unicode(_id))
540+
except UnicodeDecodeError:
541+
return identity
537542

538543
def setup_auth(
539-
self,
540-
request: Optional[Union[Message, dict]],
541-
redirect_uri: str,
542-
cinfo: dict,
543-
cookie: List[dict] = None,
544-
acr: str = None,
545-
**kwargs,
544+
self,
545+
request: Optional[Union[Message, dict]],
546+
redirect_uri: str,
547+
cinfo: dict,
548+
cookie: List[dict] = None,
549+
acr: str = None,
550+
**kwargs,
546551
) -> dict:
547552
"""
548553
@@ -665,12 +670,12 @@ def aresp_check(self, aresp, request):
665670
return ""
666671

667672
def response_mode(
668-
self,
669-
request: Union[dict, AuthorizationRequest],
670-
response_args: Optional[Union[dict, AuthorizationResponse]] = None,
671-
return_uri: Optional[str] = "",
672-
fragment_enc: Optional[bool] = None,
673-
**kwargs,
673+
self,
674+
request: Union[dict, AuthorizationRequest],
675+
response_args: Optional[Union[dict, AuthorizationResponse]] = None,
676+
return_uri: Optional[str] = "",
677+
fragment_enc: Optional[bool] = None,
678+
**kwargs,
674679
) -> dict:
675680
resp_mode = request["response_mode"]
676681
if resp_mode == "form_post":
@@ -969,10 +974,10 @@ def do_request_user(self, request_info, **kwargs):
969974
return kwargs
970975

971976
def process_request(
972-
self,
973-
request: Optional[Union[Message, dict]] = None,
974-
http_info: Optional[dict] = None,
975-
**kwargs,
977+
self,
978+
request: Optional[Union[Message, dict]] = None,
979+
http_info: Optional[dict] = None,
980+
**kwargs,
976981
):
977982
"""The AuthorizationRequest endpoint
978983

tests/test_server_24_oauth2_authorization_endpoint.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -692,6 +692,17 @@ def test_req_user_no_prompt(self):
692692
res = self.endpoint.setup_auth(request, redirect_uri, cinfo, None, req_user="adam")
693693
assert "error" in res
694694

695+
def test_unwrap_identity(self):
696+
identity = {
697+
'sid':
698+
'Z0FBQUFBQmlZQXFBeDlvSjRENVVYSDBFeTZ6YzVQWTRGVy1laFk2ZmJIbWdPeUhzbVJYbWo5clVPQ045MXpiSVYwS0pfZkREaVUwX2VaVU9HMk9hUktxaGR0R0dQMlRLOXVWQWVTYWJMdDFsVWZJUEItWS1NVi1WQXllNEVlYm9KMDJsSmFYU0pLYWVJeVRKZkJCYmE1T2RpWXRPM3ZmanRlMThfLUNvcnd4ZXVxcFBWdDY0M18tbXNzbjFvbGl4OFdJRTF6YTcwQ3dqNjdsRHdUa1V4ZTlZMjU3SVlXaXdSSTVJSFJJNENwand3a2pOdmV2WGFPRGZhSnZma2NkZ01ZZk1iS3hma1phcQ==',
699+
'state': '80ec120d9a322e70e02503e9a99e734174c1e6cb',
700+
'timestamp': 1650461312,
701+
'uid': '6260077f56d8970e543aa380',
702+
'grant_id': 'c636b820c0ad11ecbdd1acde48001122'}
703+
_id = self.endpoint._unwrap_identity(identity)
704+
assert _id["uid"] == '6260077f56d8970e543aa380'
705+
695706
# def test_sso(self):
696707
# _pr_resp = self.endpoint.parse_request(AUTH_REQ_DICT)
697708
# _resp = self.endpoint.process_request(_pr_resp)

0 commit comments

Comments
 (0)