Skip to content
This repository was archived by the owner on Jun 12, 2021. It is now read-only.

Commit c5dd9ec

Browse files
committed
Graceful handling of no sessions available for a user.
1 parent 311899f commit c5dd9ec

2 files changed

Lines changed: 48 additions & 0 deletions

File tree

src/oidcendpoint/oidc/session.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,16 @@ def logout_all_clients(self, sid, client_id):
134134

135135
# Find all RPs this user has logged it from
136136
uid = _sso_db.get_uid_by_sid(sid)
137+
if uid is None:
138+
logger.debug("Can not translate sid:%s into a user id", sid)
139+
return {}
140+
137141
_client_sid = {}
138142
usids = _sso_db.get_sids_by_uid(uid)
143+
if usids is None:
144+
logger.debug("No sessions found for uid: %s", uid)
145+
return {}
146+
139147
for usid in usids:
140148
_client_sid[_sdb[usid]["authn_req"]["client_id"]] = usid
141149

tests/test_30_oidc_end_session.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,3 +530,43 @@ def test_do_verified_logout(self):
530530

531531
res = self.session_endpoint.do_verified_logout(_sid, "client_1")
532532
assert res == []
533+
534+
def test_logout_from_client_unknow_sid(self):
535+
self._code_auth("1234567")
536+
self._code_auth2("abcdefg")
537+
538+
# client0
539+
self.session_endpoint.endpoint_context.cdb["client_1"][
540+
"backchannel_logout_uri"
541+
] = "https://example.com/bc_logout"
542+
self.session_endpoint.endpoint_context.cdb["client_1"]["client_id"] = "client_1"
543+
self.session_endpoint.endpoint_context.cdb["client_2"][
544+
"frontchannel_logout_uri"
545+
] = "https://example.com/fc_logout"
546+
self.session_endpoint.endpoint_context.cdb["client_2"]["client_id"] = "client_2"
547+
548+
_sid = 'sid'
549+
550+
res = self.session_endpoint.logout_all_clients(_sid, "client_1")
551+
assert res == {}
552+
553+
def test_logout_from_client_no_session(self):
554+
self._code_auth("1234567")
555+
self._code_auth2("abcdefg")
556+
557+
# client0
558+
self.session_endpoint.endpoint_context.cdb["client_1"][
559+
"backchannel_logout_uri"
560+
] = "https://example.com/bc_logout"
561+
self.session_endpoint.endpoint_context.cdb["client_1"]["client_id"] = "client_1"
562+
self.session_endpoint.endpoint_context.cdb["client_2"][
563+
"frontchannel_logout_uri"
564+
] = "https://example.com/fc_logout"
565+
self.session_endpoint.endpoint_context.cdb["client_2"]["client_id"] = "client_2"
566+
567+
_sid = self._get_sid()
568+
569+
self.session_endpoint.endpoint_context.sdb.sso_db.delete('uid2sid', 'diana')
570+
571+
res = self.session_endpoint.logout_all_clients(_sid, "client_1")
572+
assert res == {}

0 commit comments

Comments
 (0)