Skip to content

Commit a78dabe

Browse files
authored
Merge pull request #115 from lionick/add_handle_errors
Handle errors related to refresh token and client redirect URI
2 parents 977323d + 7170edc commit a78dabe

File tree

5 files changed

+24
-12
lines changed

5 files changed

+24
-12
lines changed

src/idpyoidc/server/oauth2/authorization.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,11 @@ def verify_uri(
125125
client_info = context.cdb.get(client_id)
126126
if not client_info:
127127
logger.error("No client info found")
128-
raise KeyError("No client info found")
128+
raise UnknownClient("No client info found")
129129

130130
req_redirect_uri_quoted = request.get(uri_type)
131131
if req_redirect_uri_quoted is None:
132-
raise ValueError(f"Wrong uri_type: {uri_type}")
132+
raise URIError(f"Wrong uri_type: {uri_type}")
133133

134134
req_redirect_uri = unquote(req_redirect_uri_quoted)
135135
req_redirect_uri_obj = urlparse(req_redirect_uri)
@@ -558,7 +558,7 @@ def _post_parse_request(self, request, client_id, context, **kwargs):
558558
# Get a verified redirect URI
559559
try:
560560
redirect_uri = get_uri(context, request, "redirect_uri", self.endpoint_type)
561-
except (RedirectURIError, ParameterError) as err:
561+
except (RedirectURIError, ParameterError, URIError, UnknownClient) as err:
562562
return self.authentication_error_response(
563563
request,
564564
error="invalid_request",

src/idpyoidc/server/oidc/token_helper/refresh_token.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
from cryptojwt.jws.exception import NoSuitableSigningKeys
88
from cryptojwt.jwt import utc_time_sans_frac
99

10+
from ...exception import InvalidBranchID
11+
from idpyoidc.exception import MissingRequiredAttribute
1012
from idpyoidc.message import Message
1113
from idpyoidc.message.oidc import RefreshAccessTokenRequest
1214
from idpyoidc.server.oauth2.token_helper import TokenEndpointHelper
@@ -140,16 +142,19 @@ def post_parse_request(
140142
request = RefreshAccessTokenRequest(**request.to_dict())
141143
_context = self.endpoint.upstream_get("context")
142144

143-
request.verify(
144-
keyjar=self.endpoint.upstream_get("attribute", "keyjar"), opponent_id=client_id
145-
)
145+
try:
146+
request.verify(
147+
keyjar=self.endpoint.upstream_get("attribute", "keyjar"), opponent_id=client_id
148+
)
149+
except MissingRequiredAttribute as e:
150+
return self.error_cls(error="invalid_grant", error_description=str(e))
146151

147152
_mngr = _context.session_manager
148153
try:
149154
_session_info = _mngr.get_session_info_by_token(
150155
request["refresh_token"], handler_key="refresh_token", grant=True
151156
)
152-
except (KeyError, UnknownToken, BadSyntax):
157+
except (KeyError, UnknownToken, BadSyntax, InvalidBranchID):
153158
logger.error("Refresh token invalid")
154159
return self.error_cls(error="invalid_grant", error_description="Invalid refresh token")
155160

src/idpyoidc/server/session/manager.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
from idpyoidc.server.exception import ConfigurationError
1414
from idpyoidc.server.session.grant_manager import GrantManager
1515
from idpyoidc.util import rndstr
16+
1617
from .database import Database
18+
from ..exception import InvalidBranchID
1719
from .grant import Grant
1820
from .grant import SessionToken
1921
from .info import ClientSessionInfo
@@ -480,8 +482,13 @@ def get_session_info(
480482
:param authorization_request: Whether the authorization_request should part of the response
481483
:return: A dictionary with session information
482484
"""
483-
res = self.branch_info(session_id)
484-
485+
try:
486+
res = self.branch_info(session_id)
487+
except InvalidBranchID as e:
488+
# Log the exception if needed
489+
logging.error(f"InvalidBranchID error: {str(e)}")
490+
raise
491+
485492
if authentication_event:
486493
res["authentication_event"] = res["grant"].authentication_event
487494

tests/test_server_24_oauth2_authorization_endpoint.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ def test_verify_uri_noregistered(self):
348348
_context = self.endpoint.upstream_get("context")
349349
request = {"redirect_uri": "https://rp.example.com/cb"}
350350

351-
with pytest.raises(KeyError):
351+
with pytest.raises(UnknownClient):
352352
verify_uri(_context, request, "redirect_uri", "client_id")
353353

354354
def test_verify_uri_unregistered(self):
@@ -553,7 +553,7 @@ def test_verify_uri_wrong_uri_type(self):
553553
_context.cdb["client_id"] = {"redirect_uris": [("https://rp.example.com/cb", {})]}
554554

555555
request = {"redirect_uri": "https://rp.example.com/cb?foo=bob"}
556-
with pytest.raises(ValueError):
556+
with pytest.raises(URIError):
557557
verify_uri(_context, request, "post_logout_redirect_uri", "client_id")
558558

559559
def test_verify_uri_none_registered(self):

tests/test_server_24_oidc_authorization_endpoint.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,7 @@ def test_verify_uri_noregistered(self):
447447
_ec = self.endpoint.upstream_get("context")
448448
request = {"redirect_uri": "https://rp.example.com/cb"}
449449

450-
with pytest.raises(KeyError):
450+
with pytest.raises(UnknownClient):
451451
verify_uri(_ec, request, "redirect_uri", "client_id")
452452

453453
def test_verify_uri_unregistered(self):

0 commit comments

Comments
 (0)