Skip to content

Commit 655eae5

Browse files
authored
fix the jet response object returned during validate_session_request (#58)
* fix the jet response object returned during validate_session_request so it will now include the adjusted permissions,roles,projectID,userID fields (so it will be just the same as returned from verify_code) * fix pr issues
1 parent 00b96f0 commit 655eae5

File tree

3 files changed

+97
-90
lines changed

3 files changed

+97
-90
lines changed

descope/auth.py

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ def refresh_token(self, refresh_token: str) -> dict:
220220
response = self.do_get(uri, None, None, refresh_token)
221221

222222
resp = response.json()
223-
return self._generate_auth_info(resp, refresh_token)
223+
return self.generate_jwt_response(resp, refresh_token)
224224

225225
def exchange_access_key(self, access_key: str) -> dict:
226226
uri = Auth._compose_exchange_access_key_url()
@@ -321,19 +321,8 @@ def _fetch_public_keys(self) -> None:
321321
# just continue to the next key
322322
pass
323323

324-
def _generate_auth_info(self, response_body: dict, refresh_token: str) -> dict:
325-
jwt_response = {}
326-
st_jwt = response_body.get("sessionJwt", "")
327-
if st_jwt:
328-
jwt_response[SESSION_TOKEN_NAME] = self._validate_token(st_jwt)
329-
rt_jwt = response_body.get("refreshJwt", "")
330-
if refresh_token:
331-
jwt_response[REFRESH_SESSION_TOKEN_NAME] = self._validate_token(
332-
refresh_token
333-
)
334-
elif rt_jwt:
335-
jwt_response[REFRESH_SESSION_TOKEN_NAME] = self._validate_token(rt_jwt)
336-
324+
def adjust_properties(self, jwt_response: dict):
325+
# Save permissions, roles and tenants info from Session token or from refresh token on the json top level
337326
if jwt_response.get(SESSION_TOKEN_NAME, None):
338327
jwt_response["permissions"] = jwt_response.get(SESSION_TOKEN_NAME).get(
339328
"permissions", []
@@ -355,6 +344,33 @@ def _generate_auth_info(self, response_body: dict, refresh_token: str) -> dict:
355344
"tenants", {}
356345
)
357346

347+
# Save the projectID also in the dict top level
348+
jwt_response["projectId"] = jwt_response.get(SESSION_TOKEN_NAME, {}).get(
349+
"iss", None
350+
) or jwt_response.get(REFRESH_SESSION_TOKEN_NAME, {}).get("iss", None)
351+
352+
# Save the userID also in the dict top level
353+
jwt_response["userId"] = jwt_response.get(SESSION_TOKEN_NAME, {}).get(
354+
"sub", None
355+
) or jwt_response.get(REFRESH_SESSION_TOKEN_NAME, {}).get("sub", None)
356+
357+
return jwt_response
358+
359+
def _generate_auth_info(self, response_body: dict, refresh_token: str) -> dict:
360+
jwt_response = {}
361+
st_jwt = response_body.get("sessionJwt", "")
362+
if st_jwt:
363+
jwt_response[SESSION_TOKEN_NAME] = self._validate_token(st_jwt)
364+
rt_jwt = response_body.get("refreshJwt", "")
365+
if refresh_token:
366+
jwt_response[REFRESH_SESSION_TOKEN_NAME] = self._validate_token(
367+
refresh_token
368+
)
369+
elif rt_jwt:
370+
jwt_response[REFRESH_SESSION_TOKEN_NAME] = self._validate_token(rt_jwt)
371+
372+
jwt_response = self.adjust_properties(jwt_response)
373+
358374
jwt_response[COOKIE_DATA_NAME] = {
359375
"exp": response_body.get("cookieExpiration", 0),
360376
"maxAge": response_body.get("cookieMaxAge", 0),
@@ -367,15 +383,6 @@ def _generate_auth_info(self, response_body: dict, refresh_token: str) -> dict:
367383
def generate_jwt_response(self, response_body: dict, refresh_cookie: str) -> dict:
368384
jwt_response = self._generate_auth_info(response_body, refresh_cookie)
369385

370-
projectId = jwt_response.get(SESSION_TOKEN_NAME, {}).get(
371-
"iss", None
372-
) or jwt_response.get(REFRESH_SESSION_TOKEN_NAME, {}).get("iss", None)
373-
user_id = jwt_response.get(SESSION_TOKEN_NAME, {}).get(
374-
"sub", None
375-
) or jwt_response.get(REFRESH_SESSION_TOKEN_NAME, {}).get("sub", None)
376-
377-
jwt_response["projectId"] = projectId
378-
jwt_response["userId"] = user_id
379386
jwt_response["user"] = response_body.get("user", {})
380387
jwt_response["firstSeen"] = response_body.get("firstSeen", True)
381388
return jwt_response

descope/descope_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ def validate_session_request(self, session_token: str, refresh_token: str) -> di
172172
return res
173173
else:
174174
# In such case we return only the data related to the session token
175-
return {SESSION_TOKEN_NAME: res}
175+
return self._auth.adjust_properties({SESSION_TOKEN_NAME: res})
176176

177177
def logout(self, refresh_token: str) -> requests.Response:
178178
"""

0 commit comments

Comments
 (0)