Skip to content

Commit 5bed0c2

Browse files
Merge pull request #439 from supertokens/fix/authreact-test-0.12
fix: Failing tests in the CI
2 parents e20bcf9 + 02380e3 commit 5bed0c2

File tree

10 files changed

+193
-11
lines changed

10 files changed

+193
-11
lines changed

tests/auth-react/django3x/polls/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
path("ping", views.ping, name="ping"),
99
path("sessionInfo", views.session_info, name="sessionInfo"),
1010
path("token", views.token, name="token"),
11+
path("deleteUser", views.delete_user_api, name="token"),
1112
path("test/setFlow", views.test_set_flow, name="setFlow"),
1213
path("test/getDevice", views.test_get_device, name="getDevice"),
1314
path("test/featureFlags", views.test_feature_flags, name="featureFlags"),

tests/auth-react/django3x/polls/views.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
from supertokens_python.recipe.session import SessionContainer
2525
from supertokens_python.recipe.session.interfaces import SessionClaimValidator
2626
from supertokens_python.recipe.userroles import UserRoleClaim, PermissionClaim
27+
from supertokens_python.syncio import delete_user
28+
from supertokens_python.recipe.emailpassword.syncio import get_user_by_email
2729

2830
mode = os.environ.get("APP_MODE", "asgi")
2931

@@ -146,6 +148,17 @@ def token(request: HttpRequest):
146148
return JsonResponse({"latestURLWithToken": latest_url_with_token})
147149

148150

151+
def delete_user_api(request: HttpRequest):
152+
body = json.loads(request.body)
153+
if body["rid"] != "emailpassword":
154+
return JsonResponse({"message": "Not implemented"}, status_code=400)
155+
156+
user = get_user_by_email(body["email"])
157+
assert user is not None
158+
delete_user(user.user_id)
159+
return HttpResponse("")
160+
161+
149162
def test_get_device(request: HttpRequest):
150163
pre_auth_session_id = request.GET.get("preAuthSessionId", None)
151164
if pre_auth_session_id is None:

tests/auth-react/fastapi-server/app.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@
4646
thirdpartypasswordless,
4747
userroles,
4848
)
49+
from supertokens_python.asyncio import delete_user
50+
from supertokens_python.recipe.emailpassword.asyncio import get_user_by_email
4951
from supertokens_python.recipe.dashboard import DashboardRecipe
5052
from supertokens_python.recipe.emailpassword import EmailPasswordRecipe
5153
from supertokens_python.recipe.emailpassword.interfaces import (
@@ -1036,6 +1038,18 @@ async def get_token():
10361038
return JSONResponse({"latestURLWithToken": latest_url_with_token})
10371039

10381040

1041+
@app.post("/deleteUser")
1042+
async def delete_user_api(request: Request):
1043+
body = await request.json()
1044+
if body["rid"] != "emailpassword":
1045+
return JSONResponse({"message": "Not implemented"}, status_code=400)
1046+
1047+
user = await get_user_by_email(body["email"])
1048+
assert user is not None
1049+
await delete_user(user.user_id)
1050+
return PlainTextResponse()
1051+
1052+
10391053
@app.get("/unverifyEmail")
10401054
async def unverify_email_api(session_: SessionContainer = Depends(verify_session())):
10411055
await unverify_email(session_.get_user_id())

tests/auth-react/flask-server/app.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
thirdpartypasswordless,
3939
userroles,
4040
)
41+
from supertokens_python.syncio import delete_user
42+
from supertokens_python.recipe.emailpassword.syncio import get_user_by_email
4143
from supertokens_python.recipe.dashboard import DashboardRecipe
4244
from supertokens_python.recipe.emailpassword import EmailPasswordRecipe
4345
from supertokens_python.recipe.emailpassword.interfaces import (
@@ -1041,6 +1043,18 @@ def test_feature_flags():
10411043
return jsonify({"available": available})
10421044

10431045

1046+
@app.post("/deleteUser") # type: ignore
1047+
def delete_user_api():
1048+
body = request.get_json() or {}
1049+
if body["rid"] != "emailpassword":
1050+
return jsonify({"message": "Not implemented"}), 400
1051+
1052+
user = get_user_by_email(body["email"])
1053+
assert user is not None
1054+
delete_user(user.user_id)
1055+
return ""
1056+
1057+
10441058
@app.get("/unverifyEmail") # type: ignore
10451059
@verify_session()
10461060
def unverify_email_api():

tests/frontendIntegration/django2x/polls/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
urlpatterns = [ # type: ignore
77
path("index.html", views.send_file, name="index.html"), # type: ignore
88
path("login", views.login, name="login"), # type: ignore
9-
path("login-2.18", views.login_2_18, name="login"), # type: ignore
9+
path("login-2.18", views.login_2_18, name="login_218"), # type: ignore
1010
path("beforeeach", views.before_each, name="beforeeach"), # type: ignore
1111
path("testUserConfig", views.test_config, name="testUserConfig"), # type: ignore
1212
path(

tests/frontendIntegration/django2x/polls/views.py

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424
from supertokens_python import get_all_cors_headers
2525
from supertokens_python import InputAppInfo, Supertokens, SupertokensConfig, init
2626
from supertokens_python.framework import BaseRequest, BaseResponse
27+
from base64 import b64encode
28+
from supertokens_python.utils import get_timestamp_ms
29+
from supertokens_python.async_to_sync_wrapper import sync
30+
from supertokens_python.querier import Querier, NormalisedURLPath
2731
from supertokens_python.recipe import session
2832
from supertokens_python.recipe.session import (
2933
InputErrorHandlers,
@@ -338,12 +342,45 @@ def login(request: HttpRequest):
338342

339343
def login_2_18(request: HttpRequest):
340344
if request.method == "POST":
345+
# This CDI version is no longer supported by this SDK, but
346+
# we want to ensure that sessions keep working after the upgrade
347+
# We can hard-code the structure of the request&response, since
348+
# this is a fixed CDI version and it's not going to change
349+
350+
Querier.api_version = "2.18"
351+
341352
body = json.loads(request.body)
342353
user_id = body["userId"]
343354
payload = body["payload"]
344355

345-
session_ = create_new_session(request, user_id, payload)
346-
return HttpResponse(session_.get_user_id())
356+
legacy_session_res = sync(
357+
Querier.get_instance().send_post_request(
358+
NormalisedURLPath("/recipe/session"),
359+
{
360+
"userId": user_id,
361+
"enableAntiCsrf": False,
362+
"userDataInJWT": payload,
363+
"userDataInDatabase": {},
364+
},
365+
)
366+
)
367+
Querier.api_version = None
368+
369+
legacy_access_token = legacy_session_res["accessToken"]["token"]
370+
legacy_refresh_token = legacy_session_res["refreshToken"]["token"]
371+
372+
front_token = json.dumps(
373+
{"uid": user_id, "ate": get_timestamp_ms() + 3600000, "up": payload}
374+
)
375+
376+
return JsonResponse(
377+
{},
378+
headers={
379+
"st-access-token": legacy_access_token,
380+
"st-refresh-token": legacy_refresh_token,
381+
"front-token": b64encode(front_token.encode()).decode(),
382+
},
383+
)
347384
else:
348385
return send_options_api_response()
349386

tests/frontendIntegration/django3x/polls/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
urlpatterns = [ # type: ignore
77
path("index.html", views.send_file, name="index.html"), # type: ignore
88
path("login", views.login, name="login"), # type: ignore
9-
path("login-2.18", views.login, name="login"), # type: ignore
9+
path("login-2.18", views.login_2_18, name="login_218"), # type: ignore
1010
path("beforeeach", views.before_each, name="beforeeach"), # type: ignore
1111
path("testUserConfig", views.test_config, name="testUserConfig"), # type: ignore
1212
path(

tests/frontendIntegration/django3x/polls/views.py

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
from supertokens_python import get_all_cors_headers
3030
from supertokens_python import InputAppInfo, Supertokens, SupertokensConfig, init
3131
from supertokens_python.framework import BaseRequest, BaseResponse
32+
from base64 import b64encode
33+
from supertokens_python.utils import get_timestamp_ms
34+
from supertokens_python.querier import Querier, NormalisedURLPath
3235
from supertokens_python.recipe import session
3336
from supertokens_python.recipe.session import (
3437
InputErrorHandlers,
@@ -345,12 +348,43 @@ async def login(request: HttpRequest):
345348

346349
async def login_2_18(request: HttpRequest):
347350
if request.method == "POST":
351+
# This CDI version is no longer supported by this SDK, but
352+
# we want to ensure that sessions keep working after the upgrade
353+
# We can hard-code the structure of the request&response, since
354+
# this is a fixed CDI version and it's not going to change
355+
356+
Querier.api_version = "2.18"
357+
348358
body = json.loads(request.body)
349359
user_id = body["userId"]
350360
payload = body["payload"]
351361

352-
session_ = await create_new_session(request, user_id, payload)
353-
return HttpResponse(session_.get_user_id())
362+
legacy_session_res = await Querier.get_instance().send_post_request(
363+
NormalisedURLPath("/recipe/session"),
364+
{
365+
"userId": user_id,
366+
"enableAntiCsrf": False,
367+
"userDataInJWT": payload,
368+
"userDataInDatabase": {},
369+
},
370+
)
371+
Querier.api_version = None
372+
373+
legacy_access_token = legacy_session_res["accessToken"]["token"]
374+
legacy_refresh_token = legacy_session_res["refreshToken"]["token"]
375+
376+
front_token = json.dumps(
377+
{"uid": user_id, "ate": get_timestamp_ms() + 3600000, "up": payload}
378+
)
379+
380+
return JsonResponse(
381+
{},
382+
headers={
383+
"st-access-token": legacy_access_token,
384+
"st-refresh-token": legacy_refresh_token,
385+
"front-token": b64encode(front_token.encode()).decode(),
386+
},
387+
)
354388
else:
355389
return send_options_api_response()
356390

tests/frontendIntegration/fastapi-server/app.py

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
get_all_cors_headers,
3030
init,
3131
)
32+
from base64 import b64encode
33+
from supertokens_python.utils import get_timestamp_ms
34+
from supertokens_python.querier import Querier, NormalisedURLPath
3235
from supertokens_python.framework import BaseRequest, BaseResponse
3336
from supertokens_python.framework.fastapi import get_middleware
3437
from supertokens_python.recipe import session
@@ -221,11 +224,41 @@ async def login(request: Request):
221224

222225
@app.post("/login-2.18")
223226
async def login_2_18(request: Request):
227+
# This CDI version is no longer supported by this SDK, but we want to ensure that sessions keep working after the upgrade
228+
# We can hard-code the structure of the request&response, since this is a fixed CDI version and it's not going to change
229+
230+
Querier.api_version = "2.18"
231+
224232
body = await request.json()
225233
user_id = body["userId"]
226234
payload = body["payload"]
227-
_session = await create_new_session(request, user_id, payload)
228-
return PlainTextResponse(content=_session.get_user_id())
235+
236+
legacy_session_res = await Querier.get_instance().send_post_request(
237+
NormalisedURLPath("/recipe/session"),
238+
{
239+
"userId": user_id,
240+
"enableAntiCsrf": False,
241+
"userDataInJWT": payload,
242+
"userDataInDatabase": {},
243+
},
244+
)
245+
Querier.api_version = None
246+
247+
legacy_access_token = legacy_session_res["accessToken"]["token"]
248+
legacy_refresh_token = legacy_session_res["refreshToken"]["token"]
249+
250+
front_token = json.dumps(
251+
{"uid": user_id, "ate": get_timestamp_ms() + 3600000, "up": payload}
252+
)
253+
254+
return JSONResponse(
255+
content={},
256+
headers={
257+
"st-access-token": legacy_access_token,
258+
"st-refresh-token": legacy_refresh_token,
259+
"front-token": b64encode(front_token.encode()).decode(),
260+
},
261+
)
229262

230263

231264
@app.options("/beforeeach")

tests/frontendIntegration/flask-server/app.py

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@
2828
from flask_cors import CORS
2929
from supertokens_python import InputAppInfo, Supertokens, SupertokensConfig, init
3030
from supertokens_python.framework.flask.flask_middleware import Middleware
31+
from base64 import b64encode
32+
from supertokens_python.utils import get_timestamp_ms
33+
from supertokens_python.async_to_sync_wrapper import sync
34+
from supertokens_python.querier import Querier, NormalisedURLPath
3135
from supertokens_python.recipe import session
3236
from supertokens_python.recipe.session import (
3337
InputErrorHandlers,
@@ -247,11 +251,43 @@ def login():
247251

248252
@app.route("/login-2.18", methods=["POST"]) # type: ignore
249253
def login_2_18():
250-
body: Dict[str, Any] = request.get_json() # type: ignore
254+
# This CDI version is no longer supported by this SDK, but we want to ensure that sessions keep working after the upgrade
255+
# We can hard-code the structure of the request&response, since this is a fixed CDI version and it's not going to change
256+
257+
Querier.api_version = "2.18"
258+
259+
body = request.json or {}
251260
user_id = body["userId"]
252261
payload = body["payload"]
253-
_session = create_new_session(request, user_id, payload)
254-
return _session.get_user_id()
262+
263+
legacy_session_res = sync(
264+
Querier.get_instance().send_post_request(
265+
NormalisedURLPath("/recipe/session"),
266+
{
267+
"userId": user_id,
268+
"enableAntiCsrf": False,
269+
"userDataInJWT": payload,
270+
"userDataInDatabase": {},
271+
},
272+
)
273+
)
274+
Querier.api_version = None
275+
276+
legacy_access_token = legacy_session_res["accessToken"]["token"]
277+
legacy_refresh_token = legacy_session_res["refreshToken"]["token"]
278+
279+
front_token = json.dumps(
280+
{"uid": user_id, "ate": get_timestamp_ms() + 3600000, "up": payload}
281+
)
282+
283+
return Response(
284+
"{}",
285+
headers={
286+
"st-access-token": legacy_access_token,
287+
"st-refresh-token": legacy_refresh_token,
288+
"front-token": b64encode(front_token.encode()).decode(),
289+
},
290+
)
255291

256292

257293
@app.route("/beforeeach", methods=["OPTIONS"]) # type: ignore

0 commit comments

Comments
 (0)