Skip to content

Commit dac30f0

Browse files
committed
Merge branch 'feat/session-claim-remaining' into feat/session-grants
2 parents a038414 + 200e4c6 commit dac30f0

File tree

18 files changed

+532
-211
lines changed

18 files changed

+532
-211
lines changed

supertokens_python/recipe/emailverification/ev_claim.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,17 @@ def should_refetch(
5353
return (value is None) or (
5454
value is False
5555
and last_refetch_time
56-
< (get_timestamp_ms() - self.refetch_time_on_false_in_ms)
56+
< (
57+
get_timestamp_ms() - self.refetch_time_on_false_in_ms
58+
) # TODO: Default 5 min?
5759
)
5860

5961

6062
class EmailVerificationClaimValidators(BooleanClaimValidators):
6163
def is_verified(
6264
self, refetch_time_on_false_in_seconds: int = 10
6365
) -> SessionClaimValidator:
64-
has_value_res = self.has_value(True, "st-ev-is-verified")
66+
has_value_res = self.has_value(True, id_="st-ev-is-verified")
6567
assert isinstance(self.claim, BooleanClaim)
6668
return IsVerifiedSCV(
6769
self.claim, has_value_res, refetch_time_on_false_in_seconds

supertokens_python/recipe/session/api/implementation.py

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -31,33 +31,23 @@
3131

3232
from typing import Any, Dict
3333

34-
from supertokens_python.recipe.session.exceptions import UnauthorisedError
35-
3634

3735
class APIImplementation(APIInterface):
3836
async def refresh_post(
3937
self, api_options: APIOptions, user_context: Dict[str, Any]
40-
) -> None:
41-
await api_options.recipe_implementation.refresh_session(
38+
) -> SessionContainer:
39+
return await api_options.recipe_implementation.refresh_session(
4240
api_options.request, user_context
4341
)
4442

4543
async def signout_post(
46-
self, api_options: APIOptions, user_context: Dict[str, Any]
44+
self,
45+
api_options: APIOptions,
46+
session: SessionContainer,
47+
user_context: Dict[str, Any],
4748
) -> SignOutOkayResponse:
48-
try:
49-
session = await api_options.recipe_implementation.get_session(
50-
request=api_options.request,
51-
user_context=user_context,
52-
anti_csrf_check=None,
53-
session_required=True,
54-
)
55-
except UnauthorisedError:
56-
return SignOutOkayResponse()
57-
58-
if session is None:
59-
raise Exception("Session is undefined. Should not come here.")
60-
await session.revoke_session(user_context)
49+
if session is not None:
50+
await session.revoke_session(user_context)
6151
return SignOutOkayResponse()
6252

6353
async def verify_session(
@@ -86,6 +76,7 @@ async def verify_session(
8676
api_options.request,
8777
anti_csrf_check,
8878
session_required,
79+
override_global_claim_validators,
8980
user_context,
9081
)
9182

@@ -95,10 +86,6 @@ async def verify_session(
9586
override_global_claim_validators,
9687
user_context,
9788
)
98-
await api_options.recipe_implementation.assert_claims(
99-
session,
100-
claim_validators,
101-
user_context,
102-
)
89+
await session.assert_claims(claim_validators, user_context)
10390

10491
return session

supertokens_python/recipe/session/api/signout.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,16 @@ async def handle_signout_api(api_implementation: APIInterface, api_options: APIO
2929
return None
3030
user_context = default_user_context(api_options.request)
3131

32-
response = await api_implementation.signout_post(api_options, user_context)
32+
session = await api_options.recipe_implementation.get_session(
33+
request=api_options.request,
34+
anti_csrf_check=None, # TODO: What should I pass here?
35+
session_required=False,
36+
override_global_claim_validators=lambda _, __, ___: [],
37+
user_context=user_context,
38+
)
39+
40+
assert session is not None # TODO: Is this okay?
41+
response = await api_implementation.signout_post(api_options, session, user_context)
3342
if api_options.response is None:
3443
raise Exception("Should never come here")
3544
return send_200_response(response.to_json(), api_options.response)

supertokens_python/recipe/session/asyncio/__init__.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,24 @@ async def validate_claims_for_session_handle(
122122
else:
123123
claim_validators = global_claim_validators
124124

125-
return await recipe_impl.validate_claims_for_session_handle(
126-
session_info, claim_validators, user_context
125+
claim_validation_res = await recipe_impl.validate_claims(
126+
session_info.user_id,
127+
session_info.access_token_payload,
128+
claim_validators,
129+
user_context,
127130
)
128131

132+
if claim_validation_res.access_token_payload_update is not None:
133+
updated = await recipe_impl.merge_into_access_token_payload(
134+
session_handle,
135+
claim_validation_res.access_token_payload_update,
136+
user_context,
137+
)
138+
if not updated:
139+
return SessionDoesNotExistError()
140+
141+
return ClaimsValidationResult(claim_validation_res.invalid_claims)
142+
129143

130144
async def validate_claims_in_jwt_payload(
131145
user_id: str,
@@ -245,14 +259,15 @@ async def get_session(
245259
request,
246260
anti_csrf_check,
247261
session_required,
262+
lambda _, __, ___: [],
248263
user_context,
249264
)
250265

251266
if session is not None:
252267
claim_validators = await get_required_claim_validators(
253268
session, override_global_claim_validators, user_context
254269
)
255-
await session_recipe_impl.assert_claims(session, claim_validators, user_context)
270+
await session.assert_claims(claim_validators, user_context)
256271

257272
return session
258273

supertokens_python/recipe/session/claim_base_classes/boolean_claim.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@
2222
class BooleanClaimValidators(PrimitiveClaimValidators[bool]):
2323
def is_true(self, max_age: Optional[int]):
2424
if max_age is not None:
25-
return self.has_fresh_value(True, max_age)
25+
return self.has_value(True, max_age)
2626
return self.has_value(True)
2727

2828
def is_false(self, max_age: Optional[int]):
2929
if max_age is not None:
30-
return self.has_fresh_value(False, max_age)
30+
return self.has_value(False, max_age)
3131
return self.has_value(False)
3232

3333

0 commit comments

Comments
 (0)