Skip to content

Commit 462b5c6

Browse files
committed
Dealt with Giuseppes comments.
1 parent 943bd07 commit 462b5c6

File tree

4 files changed

+19
-20
lines changed

4 files changed

+19
-20
lines changed

src/idpyoidc/server/oauth2/token_helper.py

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -620,20 +620,13 @@ def _validate_configuration(self, config):
620620
)
621621

622622
def get_handler_key(self, request, endpoint_context):
623-
if "token_exchange" in endpoint_context.cdb[request["client_id"]]:
624-
try:
625-
default_requested_token_type = endpoint_context.cdb[request["client_id"]][
626-
"token_exchange"]["default_requested_token_type"]
627-
except KeyError:
628-
try:
629-
default_requested_token_type = self.config["default_requested_token_type"]
630-
except:
631-
default_requested_token_type = DEFAULT_REQUESTED_TOKEN_TYPE
632-
else:
633-
try:
634-
default_requested_token_type = self.config["default_requested_token_type"]
635-
except KeyError:
636-
default_requested_token_type = DEFAULT_REQUESTED_TOKEN_TYPE
623+
client_info = endpoint_context.cdb.get(request["client_id"], {})
624+
625+
default_requested_token_type = (
626+
client_info.get("token_exchange", {}).get("default_requested_token_type", None)
627+
or
628+
self.config.get("default_requested_token_type", DEFAULT_REQUESTED_TOKEN_TYPE)
629+
)
637630

638631
requested_token_type = request.get("requested_token_type", default_requested_token_type)
639632
return TOKEN_TYPES_MAPPING[requested_token_type]
@@ -667,7 +660,7 @@ def validate_token_exchange_policy(request, context, subject_token, **kwargs):
667660
return TokenErrorResponse(
668661
error="invalid_request",
669662
error_description=f"Exchange {request['subject_token_type']} to refresh token "
670-
f"forbbiden",
663+
f"forbidden",
671664
)
672665

673666
if "scope" in request:

src/idpyoidc/server/session/database.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,14 @@ def decrypt_branch_id(self, key: str) -> List[str]:
7070
logger.error(f"cryptography.fernet.InvalidToken: {key}")
7171
raise ValueError(err)
7272
except Exception as err:
73+
logger.error(f"Other decrypt error ({err}), key={key}")
7374
raise ValueError(err)
7475
# order: rnd, type, sid
7576
return self.unpack_branch_key(lv_unpack(as_unicode(plain))[1])
7677

7778
def set(self, path: List[str], value: Union[NodeInfo, Grant]):
7879
"""
79-
Assign a value to an node in the database.
80+
Assign a value to a node in the database.
8081
As a side effect create a list of nodes (the branch) leading up to the leaf node.
8182
8283
:param path: a list of identifiers. root -> .. -> leaf
@@ -107,9 +108,8 @@ def set(self, path: List[str], value: Union[NodeInfo, Grant]):
107108
_info = value # overwrite old value
108109

109110
if _superior:
110-
if hasattr(_superior, "subordinate"):
111-
if _key not in _superior.subordinate:
112-
_superior.add_subordinate(_key)
111+
if _key not in getattr(_superior, "subordinate", {}):
112+
_superior.add_subordinate(_key)
113113

114114
self.db[_key] = _info
115115
_superior = _info

src/idpyoidc/server/session/grant_manager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ def get_subordinates(self, path: List[str]) -> List[Union[NodeInfo, Grant]]:
204204
:return:
205205
"""
206206
session_info = self.get(path)
207-
return [self.db[gid] for gid in session_info.subordinate]
207+
return [self.db[gid] for gid in session_info.subordinate if gid in self.db]
208208

209209
def get_grant_argument(self, branch_id: str, arg: str):
210210
grant = self[branch_id]

src/idpyoidc/server/session/manager.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,12 @@ def __init__(
9898
super(SessionManager, self).__init__(handler, _crypt_config)
9999

100100
self.node_type = session_params.get("node_type", ["user", "client", "grant"])
101+
# Make sure node_type is a list and must contain at least one element.
102+
if not isinstance(self.node_type, list):
103+
raise ValueError("Wrong type of value for SessionManager node_type")
104+
if len(self.node_type) == 0:
105+
raise ValueError("SessionManager node_type must at least contain one value")
106+
101107
self.node_info_class = session_params.get("node_info_class",
102108
{
103109
"user": UserSessionInfo,

0 commit comments

Comments
 (0)