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

Commit 3abbb14

Browse files
committed
Fixed cookie_info().
Added tests and fixed a test result.
1 parent 768dc30 commit 3abbb14

4 files changed

Lines changed: 109 additions & 12 deletions

File tree

src/oidcop/user_authn/user.py

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -102,17 +102,14 @@ def done(self, areq):
102102

103103
def cookie_info(self, cookie: List[dict], client_id: str) -> dict:
104104
_context = self.server_get("endpoint_context")
105-
if cookie and "value" in cookie[0]:
106-
vals = cookie
107-
else:
108-
try:
109-
logger.debug("parse_cookie@UserAuthnMethod")
110-
vals = _context.cookie_handler.parse_cookie(
111-
cookies=cookie, name=_context.cookie_handler.name["session"]
112-
)
113-
except (InvalidCookieSign, AssertionError, AttributeError) as err:
114-
logger.warning(err)
115-
vals = None
105+
try:
106+
logger.debug("parse_cookie@UserAuthnMethod")
107+
vals = _context.cookie_handler.parse_cookie(
108+
cookies=cookie, name=_context.cookie_handler.name["session"]
109+
)
110+
except (InvalidCookieSign, AssertionError, AttributeError) as err:
111+
logger.warning(err)
112+
vals = []
116113

117114
logger.debug("Value cookies: {}".format(vals))
118115

tests/test_12_user_authn.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,8 @@ def test_authenticated_as_with_cookie(self):
100100
)
101101

102102
_info, _time_stamp = method.authenticated_as("client 12345", [_cookie])
103-
assert set(_info.keys()) == {"sub", "sid", "state", "client_id"}
103+
assert set(_info.keys()) == {'sub', 'uid', 'state', 'grant_id', 'timestamp', 'sid',
104+
'client_id'}
104105
assert _info["sub"] == "diana"
105106

106107
def test_userpassjinja2(self):

tests/test_24_oauth2_token_endpoint.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,3 +648,53 @@ def test_configure_grant_types(self):
648648
assert len(self.token_endpoint.helper) == 1
649649
assert "access_token" in self.token_endpoint.helper
650650
assert "refresh_token" not in self.token_endpoint.helper
651+
652+
def test_token_request_other_client(self):
653+
_context = self.endpoint_context
654+
_context.cdb["client_2"] = _context.cdb["client_1"]
655+
session_id = self._create_session(AUTH_REQ)
656+
grant = self.session_manager[session_id]
657+
code = self._mint_code(grant, AUTH_REQ["client_id"])
658+
659+
_token_request = TOKEN_REQ_DICT.copy()
660+
_token_request["client_id"] = "client_2"
661+
_token_request["code"] = code.value
662+
663+
_req = self.token_endpoint.parse_request(_token_request)
664+
_resp = self.token_endpoint.process_request(request=_req)
665+
666+
assert isinstance(_resp, TokenErrorResponse)
667+
assert _resp.to_dict() == {
668+
"error": "invalid_grant", "error_description": "Wrong client"
669+
}
670+
671+
def test_refresh_token_request_other_client(self):
672+
_context = self.endpoint_context
673+
_context.cdb["client_2"] = _context.cdb["client_1"]
674+
session_id = self._create_session(AUTH_REQ)
675+
grant = self.session_manager[session_id]
676+
code = self._mint_code(grant, AUTH_REQ["client_id"])
677+
678+
_token_request = TOKEN_REQ_DICT.copy()
679+
_token_request["code"] = code.value
680+
681+
_req = self.token_endpoint.parse_request(_token_request)
682+
_resp = self.token_endpoint.process_request(
683+
request=_req, issue_refresh=True
684+
)
685+
686+
_request = REFRESH_TOKEN_REQ.copy()
687+
_request["client_id"] = "client_2"
688+
_request["refresh_token"] = _resp["response_args"]["refresh_token"]
689+
690+
_token_value = _resp["response_args"]["refresh_token"]
691+
_session_info = self.session_manager.get_session_info_by_token(_token_value)
692+
_token = self.session_manager.find_token(_session_info["session_id"], _token_value)
693+
_token.usage_rules["supports_minting"] = ["access_token", "refresh_token"]
694+
695+
_req = self.token_endpoint.parse_request(_request.to_json())
696+
_resp = self.token_endpoint.process_request(request=_req, )
697+
assert isinstance(_resp, TokenErrorResponse)
698+
assert _resp.to_dict() == {
699+
"error": "invalid_grant", "error_description": "Wrong client"
700+
}

tests/test_35_oidc_token_endpoint.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -838,6 +838,55 @@ def test_access_token_lifetime(self):
838838

839839
assert access_token["exp"] - access_token["iat"] == lifetime
840840

841+
def test_token_request_other_client(self):
842+
_context = self.endpoint_context
843+
_context.cdb["client_2"] = _context.cdb["client_1"]
844+
session_id = self._create_session(AUTH_REQ)
845+
grant = self.session_manager[session_id]
846+
code = self._mint_code(grant, AUTH_REQ["client_id"])
847+
848+
_token_request = TOKEN_REQ_DICT.copy()
849+
_token_request["client_id"] = "client_2"
850+
_token_request["code"] = code.value
851+
852+
_req = self.token_endpoint.parse_request(_token_request)
853+
_resp = self.token_endpoint.process_request(request=_req)
854+
855+
assert isinstance(_resp, TokenErrorResponse)
856+
assert _resp.to_dict() == {
857+
"error": "invalid_grant", "error_description": "Wrong client"
858+
}
859+
860+
def test_refresh_token_request_other_client(self):
861+
_context = self.endpoint_context
862+
_context.cdb["client_2"] = _context.cdb["client_1"]
863+
session_id = self._create_session(AUTH_REQ)
864+
grant = self.session_manager[session_id]
865+
code = self._mint_code(grant, AUTH_REQ["client_id"])
866+
867+
_token_request = TOKEN_REQ_DICT.copy()
868+
_token_request["code"] = code.value
869+
870+
_req = self.token_endpoint.parse_request(_token_request)
871+
_resp = self.token_endpoint.process_request(
872+
request=_req, issue_refresh=True
873+
)
874+
875+
_request = REFRESH_TOKEN_REQ.copy()
876+
_request["client_id"] = "client_2"
877+
_request["refresh_token"] = _resp["response_args"]["refresh_token"]
878+
879+
_token_value = _resp["response_args"]["refresh_token"]
880+
_session_info = self.session_manager.get_session_info_by_token(_token_value)
881+
_token = self.session_manager.find_token(_session_info["session_id"], _token_value)
882+
_token.usage_rules["supports_minting"] = ["access_token", "refresh_token"]
883+
884+
_req = self.token_endpoint.parse_request(_request.to_json())
885+
_resp = self.token_endpoint.process_request(request=_req,)
886+
assert isinstance(_resp, TokenErrorResponse)
887+
assert _resp.to_dict() == {
888+
"error": "invalid_grant", "error_description": "Wrong client"
889+
}
841890

842891
class TestOldTokens(object):
843892
@pytest.fixture(autouse=True)

0 commit comments

Comments
 (0)