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

Commit c3a2977

Browse files
committed
Using shelve based db for sso and session db.
1 parent 133be36 commit c3a2977

File tree

4 files changed

+1158
-2
lines changed

4 files changed

+1158
-2
lines changed

src/oidcendpoint/endpoint_context.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,9 +241,21 @@ def __init__(
241241
self.httpc_params = {"verify": conf.get("verify_ssl")}
242242

243243
def set_session_db(self, sso_db=None, db=None):
244-
sso_db = sso_db or SSODb()
244+
if sso_db is None and self.conf.get("sso_db"):
245+
_spec = self.conf.get("sso_db")
246+
_kwargs = _spec.get("kwargs", {})
247+
_db = importer(_spec["class"])(**_kwargs)
248+
sso_db = SSODb(_db)
249+
else:
250+
sso_db = sso_db or SSODb()
251+
252+
if db is None and self.conf.get("session_db"):
253+
_spec = self.conf.get("session_db")
254+
_kwargs = _spec.get("kwargs", {})
255+
db = importer(_spec["class"])(**_kwargs)
256+
245257
self.do_session_db(sso_db, db)
246-
# append useinfo db to the session db
258+
# append userinfo db to the session db
247259
self.do_userinfo()
248260
logger.debug("Session DB: {}".format(self.sdb.__dict__))
249261

tests/test_05_sso_db.py

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import pytest
2+
3+
from oidcendpoint.shelve_db import ShelveDataBase
24
from oidcendpoint.sso_db import SSODb
35

46

@@ -115,3 +117,120 @@ def test_get_sub_by_uid_different_sub(self):
115117
res = self.sso_db.get_subs_by_uid("Lizz")
116118

117119
assert set(res) == {"abcdefgh", "012346789"}
120+
121+
122+
class TestSessionShelveDB(object):
123+
@pytest.fixture(autouse=True)
124+
def create_sdb(self):
125+
# Create fresh database each time
126+
_db = ShelveDataBase(filename='shelf', flag='n', writeback=True)
127+
self.sso_db = SSODb(_db)
128+
129+
def test_map_sid2uid(self):
130+
self.sso_db.map_sid2uid("session id 1", "Lizz")
131+
assert self.sso_db.get_sids_by_uid("Lizz") == ["session id 1"]
132+
133+
def test_missing_map(self):
134+
assert self.sso_db.get_sids_by_uid("Lizz") is None
135+
136+
def test_multiple_map_sid2uid(self):
137+
self.sso_db.map_sid2uid("session id 1", "Lizz")
138+
self.sso_db.map_sid2uid("session id 2", "Lizz")
139+
assert set(self.sso_db.get_sids_by_uid("Lizz")) == {
140+
"session id 1",
141+
"session id 2",
142+
}
143+
144+
def test_map_unmap_sid2uid(self):
145+
self.sso_db.map_sid2uid("session id 1", "Lizz")
146+
self.sso_db.map_sid2uid("session id 2", "Lizz")
147+
assert set(self.sso_db.get_sids_by_uid("Lizz")) == {
148+
"session id 1",
149+
"session id 2",
150+
}
151+
152+
self.sso_db.remove_sid2uid("session id 1", "Lizz")
153+
assert self.sso_db.get_sids_by_uid("Lizz") == ["session id 2"]
154+
155+
def test_get_uid_by_sid(self):
156+
self.sso_db.map_sid2uid("session id 1", "Lizz")
157+
self.sso_db.map_sid2uid("session id 2", "Lizz")
158+
159+
assert self.sso_db.get_uid_by_sid("session id 1") == "Lizz"
160+
assert self.sso_db.get_uid_by_sid("session id 2") == "Lizz"
161+
162+
def test_remove_uid(self):
163+
self.sso_db.map_sid2uid("session id 1", "Lizz")
164+
self.sso_db.map_sid2uid("session id 2", "Diana")
165+
166+
self.sso_db.remove_uid("Lizz")
167+
assert self.sso_db.get_uid_by_sid("session id 1") is None
168+
assert self.sso_db.get_sids_by_uid("Lizz") is None
169+
170+
def test_map_sid2sub(self):
171+
self.sso_db.map_sid2sub("session id 1", "abcdefgh")
172+
assert self.sso_db.get_sids_by_sub("abcdefgh") == ["session id 1"]
173+
174+
def test_missing_sid2sub_map(self):
175+
assert self.sso_db.get_sids_by_sub("abcdefgh") is None
176+
177+
def test_multiple_map_sid2sub(self):
178+
self.sso_db.map_sid2sub("session id 1", "abcdefgh")
179+
self.sso_db.map_sid2sub("session id 2", "abcdefgh")
180+
assert set(self.sso_db.get_sids_by_sub("abcdefgh")) == {
181+
"session id 1",
182+
"session id 2",
183+
}
184+
185+
def test_map_unmap_sid2sub(self):
186+
self.sso_db.map_sid2sub("session id 1", "abcdefgh")
187+
self.sso_db.map_sid2sub("session id 2", "abcdefgh")
188+
assert set(self.sso_db.get_sids_by_sub("abcdefgh")) == {
189+
"session id 1",
190+
"session id 2",
191+
}
192+
193+
self.sso_db.remove_sid2sub("session id 1", "abcdefgh")
194+
assert self.sso_db.get_sids_by_sub("abcdefgh") == ["session id 2"]
195+
196+
def test_get_sub_by_sid(self):
197+
self.sso_db.map_sid2sub("session id 1", "abcdefgh")
198+
self.sso_db.map_sid2sub("session id 2", "abcdefgh")
199+
200+
assert set(self.sso_db.get_sids_by_sub("abcdefgh")) == {
201+
"session id 1",
202+
"session id 2",
203+
}
204+
205+
def test_remove_sub(self):
206+
self.sso_db.map_sid2sub("session id 1", "abcdefgh")
207+
self.sso_db.map_sid2sub("session id 2", "012346789")
208+
209+
self.sso_db.remove_sub("abcdefgh")
210+
assert self.sso_db.get_sub_by_sid("session id 1") is None
211+
assert self.sso_db.get_sids_by_sub("abcdefgh") is None
212+
# have not touched the others
213+
assert self.sso_db.get_sub_by_sid("session id 2") == "012346789"
214+
assert self.sso_db.get_sids_by_sub("012346789") == ["session id 2"]
215+
216+
def test_get_sub_by_uid_same_sub(self):
217+
self.sso_db.map_sid2sub("session id 1", "abcdefgh")
218+
self.sso_db.map_sid2sub("session id 2", "abcdefgh")
219+
220+
self.sso_db.map_sid2uid("session id 1", "Lizz")
221+
self.sso_db.map_sid2uid("session id 2", "Lizz")
222+
223+
res = self.sso_db.get_subs_by_uid("Lizz")
224+
225+
assert set(res) == {"abcdefgh"}
226+
227+
def test_get_sub_by_uid_different_sub(self):
228+
self.sso_db.map_sid2sub("session id 1", "abcdefgh")
229+
self.sso_db.map_sid2sub("session id 2", "012346789")
230+
231+
self.sso_db.map_sid2uid("session id 1", "Lizz")
232+
self.sso_db.map_sid2uid("session id 2", "Lizz")
233+
234+
res = self.sso_db.get_subs_by_uid("Lizz")
235+
236+
assert set(res) == {"abcdefgh", "012346789"}

0 commit comments

Comments
 (0)