Skip to content

Commit ad0d993

Browse files
committed
fix: Fix overrides not applying correctly in methods called on SessionContainer
1 parent b158b72 commit ad0d993

File tree

5 files changed

+30
-18
lines changed

5 files changed

+30
-18
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
# Changelog
23
All notable changes to this project will be documented in this file.
34

@@ -6,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
67

78
## [unreleased]
89

10+
### Bug fix:
11+
- Fix overrides not applying correctly in methods called on SessionContainer instances
12+
913
## [0.10.2] - 2022-07-14
1014
### Bug fix
1115
- Make `user_context` optional in userroles recipe syncio functions.

supertokens_python/recipe/session/interfaces.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from __future__ import annotations
1515

1616
from abc import ABC, abstractmethod
17-
from typing import TYPE_CHECKING, Any, Dict, List, Union
17+
from typing import TYPE_CHECKING, Any, Dict, List, Union, Callable
1818

1919
from supertokens_python.async_to_sync_wrapper import sync
2020
from supertokens_python.types import APIResponse, GeneralErrorResponse
@@ -219,13 +219,13 @@ async def verify_session(
219219
class SessionContainer(ABC):
220220
def __init__(
221221
self,
222-
recipe_implementation: RecipeInterface,
222+
get_recipe_impl: Callable[[], RecipeInterface],
223223
access_token: str,
224224
session_handle: str,
225225
user_id: str,
226226
access_token_payload: Dict[str, Any],
227227
):
228-
self.recipe_implementation = recipe_implementation
228+
self.get_recipe_impl = get_recipe_impl
229229
self.access_token = access_token
230230
self.session_handle = session_handle
231231
self.access_token_payload = access_token_payload

supertokens_python/recipe/session/recipe.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,9 @@ def __init__(
115115
openid_feature_override,
116116
)
117117
recipe_implementation = RecipeImplementation(
118-
Querier.get_instance(recipe_id), self.config
118+
Querier.get_instance(recipe_id),
119+
self.config,
120+
lambda: self.recipe_implementation,
119121
)
120122
recipe_implementation = get_recipe_implementation_with_jwt(
121123
recipe_implementation,
@@ -124,7 +126,9 @@ def __init__(
124126
)
125127
else:
126128
recipe_implementation = RecipeImplementation(
127-
Querier.get_instance(recipe_id), self.config
129+
Querier.get_instance(recipe_id),
130+
self.config,
131+
lambda: self.recipe_implementation,
128132
)
129133
self.recipe_implementation: RecipeInterface = (
130134
recipe_implementation

supertokens_python/recipe/session/recipe_implementation.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# under the License.
1414
from __future__ import annotations
1515

16-
from typing import TYPE_CHECKING, Any, Dict
16+
from typing import TYPE_CHECKING, Any, Dict, Callable
1717

1818
from supertokens_python.framework.request import BaseRequest
1919
from supertokens_python.logger import log_debug_message
@@ -75,11 +75,17 @@ def get_jwt_signing_public_key_list(self) -> List[Dict[str, Any]]:
7575

7676

7777
class RecipeImplementation(RecipeInterface):
78-
def __init__(self, querier: Querier, config: SessionConfig):
78+
def __init__(
79+
self,
80+
querier: Querier,
81+
config: SessionConfig,
82+
get_recipe_impl_after_overrides: Callable[[], RecipeInterface],
83+
):
7984
super().__init__()
8085
self.querier = querier
8186
self.config = config
8287
self.handshake_info: Union[HandshakeInfo, None] = None
88+
self.get_recipe_impl = get_recipe_impl_after_overrides
8389

8490
async def call_get_handshake_info():
8591
try:
@@ -149,7 +155,7 @@ async def create_new_session(
149155
refresh_token = session["refreshToken"]
150156
id_refresh_token = session["idRefreshToken"]
151157
new_session = Session(
152-
self,
158+
self.get_recipe_impl,
153159
access_token["token"],
154160
session["session"]["handle"],
155161
session["session"]["userId"],
@@ -225,7 +231,7 @@ async def get_session(
225231
if access_token is None:
226232
raise Exception("Should never come here")
227233
session = Session(
228-
self,
234+
self.get_recipe_impl,
229235
access_token,
230236
new_session["session"]["handle"],
231237
new_session["session"]["userId"],
@@ -271,7 +277,7 @@ async def refresh_session(
271277
refresh_token = new_session["refreshToken"]
272278
id_refresh_token = new_session["idRefreshToken"]
273279
session = Session(
274-
self,
280+
self.get_recipe_impl,
275281
access_token["token"],
276282
new_session["session"]["handle"],
277283
new_session["session"]["userId"],

supertokens_python/recipe/session/session_class.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,15 @@ class Session(SessionContainer):
2222
async def revoke_session(self, user_context: Union[Any, None] = None) -> None:
2323
if user_context is None:
2424
user_context = {}
25-
await self.recipe_implementation.revoke_session(
26-
self.session_handle, user_context
27-
)
25+
await self.get_recipe_impl().revoke_session(self.session_handle, user_context)
2826
self.remove_cookies = True
2927

3028
async def get_session_data(
3129
self, user_context: Union[Dict[str, Any], None] = None
3230
) -> Dict[str, Any]:
3331
if user_context is None:
3432
user_context = {}
35-
session_info = await self.recipe_implementation.get_session_information(
33+
session_info = await self.get_recipe_impl().get_session_information(
3634
self.session_handle, user_context
3735
)
3836
if session_info is None:
@@ -47,7 +45,7 @@ async def update_session_data(
4745
) -> None:
4846
if user_context is None:
4947
user_context = {}
50-
updated = await self.recipe_implementation.update_session_data(
48+
updated = await self.get_recipe_impl().update_session_data(
5149
self.session_handle, new_session_data, user_context
5250
)
5351
if not updated:
@@ -60,7 +58,7 @@ async def update_access_token_payload(
6058
) -> None:
6159
if user_context is None:
6260
user_context = {}
63-
response = await self.recipe_implementation.regenerate_access_token(
61+
response = await self.get_recipe_impl().regenerate_access_token(
6462
self.access_token, new_access_token_payload, user_context
6563
)
6664
if response is None:
@@ -94,7 +92,7 @@ async def get_time_created(
9492
) -> int:
9593
if user_context is None:
9694
user_context = {}
97-
session_info = await self.recipe_implementation.get_session_information(
95+
session_info = await self.get_recipe_impl().get_session_information(
9896
self.session_handle, user_context
9997
)
10098
if session_info is None:
@@ -105,7 +103,7 @@ async def get_time_created(
105103
async def get_expiry(self, user_context: Union[Dict[str, Any], None] = None) -> int:
106104
if user_context is None:
107105
user_context = {}
108-
session_info = await self.recipe_implementation.get_session_information(
106+
session_info = await self.get_recipe_impl().get_session_information(
109107
self.session_handle, user_context
110108
)
111109
if session_info is None:

0 commit comments

Comments
 (0)