Skip to content

Commit f2eeaa5

Browse files
Merge pull request #486 from supertokens/django-rest-framework-fix-for-middleware
Fixes integration with django rest framework where session token modifications were being missed out.
2 parents 1053e03 + e1f1f49 commit f2eeaa5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+107080
-2
lines changed

.circleci/config_continue.yml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,32 @@ jobs:
6666
- run: make with-django
6767
- run: (cd .circleci/ && ./websiteDjango.sh)
6868
- slack/status
69+
test-website-drf-async:
70+
docker:
71+
- image: rishabhpoddar/supertokens_python_driver_testing
72+
resource_class: large
73+
steps:
74+
- checkout
75+
- run: update-alternatives --install "/usr/bin/java" "java" "/usr/java/jdk-15.0.1/bin/java" 2
76+
- run: update-alternatives --install "/usr/bin/javac" "javac" "/usr/java/jdk-15.0.1/bin/javac" 2
77+
- run: git config --global url."https://github.com/".insteadOf ssh://[email protected]/
78+
- run: echo "127.0.0.1 localhost.org" >> /etc/hosts
79+
- run: make with-django
80+
- run: (cd .circleci/ && ./websiteDrfAsync.sh)
81+
- slack/status
82+
test-website-drf-sync:
83+
docker:
84+
- image: rishabhpoddar/supertokens_python_driver_testing
85+
resource_class: large
86+
steps:
87+
- checkout
88+
- run: update-alternatives --install "/usr/bin/java" "java" "/usr/java/jdk-15.0.1/bin/java" 2
89+
- run: update-alternatives --install "/usr/bin/javac" "javac" "/usr/java/jdk-15.0.1/bin/javac" 2
90+
- run: git config --global url."https://github.com/".insteadOf ssh://[email protected]/
91+
- run: echo "127.0.0.1 localhost.org" >> /etc/hosts
92+
- run: make with-django
93+
- run: (cd .circleci/ && ./websiteDrfSync.sh)
94+
- slack/status
6995
test-website-django2x:
7096
docker:
7197
- image: rishabhpoddar/supertokens_python_driver_testing
@@ -248,6 +274,26 @@ workflows:
248274
only: /dev-v[0-9]+(\.[0-9]+)*/
249275
branches:
250276
only: /test-cicd\/.*/
277+
- test-website-drf-async:
278+
requires:
279+
- test-dev-tag-as-not-passed
280+
context:
281+
- slack-notification
282+
filters:
283+
tags:
284+
only: /dev-v[0-9]+(\.[0-9]+)*/
285+
branches:
286+
only: /test-cicd\/.*/
287+
- test-website-drf-sync:
288+
requires:
289+
- test-dev-tag-as-not-passed
290+
context:
291+
- slack-notification
292+
filters:
293+
tags:
294+
only: /dev-v[0-9]+(\.[0-9]+)*/
295+
branches:
296+
only: /test-cicd\/.*/
251297
- test-website-django2x:
252298
requires:
253299
- test-dev-tag-as-not-passed
@@ -303,6 +349,8 @@ workflows:
303349
- test-website-fastapi
304350
- test-website-flask
305351
- test-website-django
352+
- test-website-drf-async
353+
- test-website-drf-sync
306354
- test-website-django2x
307355
- test-authreact-fastapi
308356
- test-authreact-flask
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
coreInfo=`curl -s -X GET \
2+
"https://api.supertokens.io/0/core/latest?password=$SUPERTOKENS_API_KEY&planType=FREE&mode=DEV&version=$1" \
3+
-H 'api-version: 0'`
4+
if [[ `echo $coreInfo | jq .tag` == "null" ]]
5+
then
6+
echo "fetching latest X.Y.Z version for core, X.Y version: $1, planType: FREE gave response: $coreInfo"
7+
exit 1
8+
fi
9+
coreTag=$(echo $coreInfo | jq .tag | tr -d '"')
10+
coreVersion=$(echo $coreInfo | jq .version | tr -d '"')
11+
12+
pluginInterfaceVersionXY=`curl -s -X GET \
13+
"https://api.supertokens.io/0/core/dependency/plugin-interface/latest?password=$SUPERTOKENS_API_KEY&planType=FREE&mode=DEV&version=$1" \
14+
-H 'api-version: 0'`
15+
if [[ `echo $pluginInterfaceVersionXY | jq .pluginInterface` == "null" ]]
16+
then
17+
echo "fetching latest X.Y version for plugin-interface, given core X.Y version: $1, planType: FREE gave response: $pluginInterfaceVersionXY"
18+
exit 1
19+
fi
20+
pluginInterfaceVersionXY=$(echo $pluginInterfaceVersionXY | jq .pluginInterface | tr -d '"')
21+
22+
pluginInterfaceInfo=`curl -s -X GET \
23+
"https://api.supertokens.io/0/plugin-interface/latest?password=$SUPERTOKENS_API_KEY&planType=FREE&mode=DEV&version=$pluginInterfaceVersionXY" \
24+
-H 'api-version: 0'`
25+
if [[ `echo $pluginInterfaceInfo | jq .tag` == "null" ]]
26+
then
27+
echo "fetching latest X.Y.Z version for plugin-interface, X.Y version: $pluginInterfaceVersionXY, planType: FREE gave response: $pluginInterfaceInfo"
28+
exit 1
29+
fi
30+
pluginInterfaceTag=$(echo $pluginInterfaceInfo | jq .tag | tr -d '"')
31+
pluginInterfaceVersion=$(echo $pluginInterfaceInfo | jq .version | tr -d '"')
32+
33+
echo "Testing with frontend website: $2, FREE core: $coreVersion, plugin-interface: $pluginInterfaceVersion"
34+
35+
cd ../../
36+
git clone [email protected]:supertokens/supertokens-root.git
37+
cd supertokens-root
38+
echo -e "core,$1\nplugin-interface,$pluginInterfaceVersionXY" > modules.txt
39+
./loadModules --ssh
40+
cd supertokens-core
41+
git checkout $coreTag
42+
cd ../supertokens-plugin-interface
43+
git checkout $pluginInterfaceTag
44+
cd ../
45+
echo $SUPERTOKENS_API_KEY > apiPassword
46+
./utils/setupTestEnvLocal
47+
cd ../
48+
git clone [email protected]:supertokens/supertokens-website.git
49+
cd supertokens-website
50+
git checkout $2
51+
cd ../project/tests/frontendIntegration/drf_async
52+
export PYTHONPATH="${PYTHONPATH}:/root/project"
53+
uvicorn mysite.asgi:application --port 8080 &
54+
pid=$!
55+
uvicorn mysite.asgi:application --port 8082 &
56+
pid2=$!
57+
cd ../../../../supertokens-website/test/server
58+
npm i git+https://github.com:supertokens/supertokens-node.git#$3
59+
npm i
60+
cd ../../
61+
npm i
62+
SUPERTOKENS_CORE_TAG=$coreTag NODE_PORT=8081 INSTALL_PATH=../supertokens-root npm test
63+
if [[ $? -ne 0 ]]
64+
then
65+
echo "test failed... killing $pid, $pid2 and exiting!"
66+
kill -9 $pid
67+
kill -9 $pid2
68+
rm -rf ./test/server/node_modules/supertokens-node
69+
git checkout HEAD -- ./test/server/package.json
70+
exit 1
71+
fi
72+
echo "all tests passed, killing processes: $pid and $pid2"
73+
kill -9 $pid
74+
kill -9 $pid2
75+
rm -rf ./test/server/node_modules/supertokens-node
76+
git checkout HEAD -- ./test/server/package.json
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
coreInfo=`curl -s -X GET \
2+
"https://api.supertokens.io/0/core/latest?password=$SUPERTOKENS_API_KEY&planType=FREE&mode=DEV&version=$1" \
3+
-H 'api-version: 0'`
4+
if [[ `echo $coreInfo | jq .tag` == "null" ]]
5+
then
6+
echo "fetching latest X.Y.Z version for core, X.Y version: $1, planType: FREE gave response: $coreInfo"
7+
exit 1
8+
fi
9+
coreTag=$(echo $coreInfo | jq .tag | tr -d '"')
10+
coreVersion=$(echo $coreInfo | jq .version | tr -d '"')
11+
12+
pluginInterfaceVersionXY=`curl -s -X GET \
13+
"https://api.supertokens.io/0/core/dependency/plugin-interface/latest?password=$SUPERTOKENS_API_KEY&planType=FREE&mode=DEV&version=$1" \
14+
-H 'api-version: 0'`
15+
if [[ `echo $pluginInterfaceVersionXY | jq .pluginInterface` == "null" ]]
16+
then
17+
echo "fetching latest X.Y version for plugin-interface, given core X.Y version: $1, planType: FREE gave response: $pluginInterfaceVersionXY"
18+
exit 1
19+
fi
20+
pluginInterfaceVersionXY=$(echo $pluginInterfaceVersionXY | jq .pluginInterface | tr -d '"')
21+
22+
pluginInterfaceInfo=`curl -s -X GET \
23+
"https://api.supertokens.io/0/plugin-interface/latest?password=$SUPERTOKENS_API_KEY&planType=FREE&mode=DEV&version=$pluginInterfaceVersionXY" \
24+
-H 'api-version: 0'`
25+
if [[ `echo $pluginInterfaceInfo | jq .tag` == "null" ]]
26+
then
27+
echo "fetching latest X.Y.Z version for plugin-interface, X.Y version: $pluginInterfaceVersionXY, planType: FREE gave response: $pluginInterfaceInfo"
28+
exit 1
29+
fi
30+
pluginInterfaceTag=$(echo $pluginInterfaceInfo | jq .tag | tr -d '"')
31+
pluginInterfaceVersion=$(echo $pluginInterfaceInfo | jq .version | tr -d '"')
32+
33+
echo "Testing with frontend website: $2, FREE core: $coreVersion, plugin-interface: $pluginInterfaceVersion"
34+
35+
cd ../../
36+
git clone [email protected]:supertokens/supertokens-root.git
37+
cd supertokens-root
38+
echo -e "core,$1\nplugin-interface,$pluginInterfaceVersionXY" > modules.txt
39+
./loadModules --ssh
40+
cd supertokens-core
41+
git checkout $coreTag
42+
cd ../supertokens-plugin-interface
43+
git checkout $pluginInterfaceTag
44+
cd ../
45+
echo $SUPERTOKENS_API_KEY > apiPassword
46+
./utils/setupTestEnvLocal
47+
cd ../
48+
git clone [email protected]:supertokens/supertokens-website.git
49+
cd supertokens-website
50+
git checkout $2
51+
cd ../project/tests/frontendIntegration/drf_sync
52+
export PYTHONPATH="${PYTHONPATH}:/root/project"
53+
python manage.py runserver 8080 &
54+
pid=$!
55+
python manage.py runserver 8082 &
56+
pid2=$!
57+
cd ../../../../supertokens-website/test/server
58+
npm i git+https://github.com:supertokens/supertokens-node.git#$3
59+
npm i
60+
cd ../../
61+
npm i
62+
SUPERTOKENS_CORE_TAG=$coreTag NODE_PORT=8081 INSTALL_PATH=../supertokens-root npm test
63+
if [[ $? -ne 0 ]]
64+
then
65+
echo "test failed... killing $pid, $pid2 and exiting!"
66+
kill -9 $pid
67+
kill -9 $pid2
68+
rm -rf ./test/server/node_modules/supertokens-node
69+
git checkout HEAD -- ./test/server/package.json
70+
exit 1
71+
fi
72+
echo "all tests passed, killing processes: $pid and $pid2"
73+
kill -9 $pid
74+
kill -9 $pid2
75+
rm -rf ./test/server/node_modules/supertokens-node
76+
git checkout HEAD -- ./test/server/package.json

.circleci/websiteDrfAsync.sh

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
coreDriverJson=`cat ../coreDriverInterfaceSupported.json`
2+
coreDriverLength=`echo $coreDriverJson | jq ".versions | length"`
3+
coreDriverArray=`echo $coreDriverJson | jq ".versions"`
4+
echo "got core driver relations"
5+
6+
frontendDriverJson=`cat ../frontendDriverInterfaceSupported.json`
7+
frontendDriverLength=`echo $frontendDriverJson | jq ".versions | length"`
8+
frontendDriverArray=`echo $frontendDriverJson | jq ".versions"`
9+
echo "got frontend driver relations"
10+
11+
# get driver version
12+
version=`cat ../setup.py | grep -e 'version='`
13+
while IFS='"' read -ra ADDR; do
14+
counter=0
15+
for i in "${ADDR[@]}"; do
16+
if [ $counter == 1 ]
17+
then
18+
version=$i
19+
fi
20+
counter=$(($counter+1))
21+
done
22+
done <<< "$version"
23+
24+
someFrontendTestsRan=false
25+
i=0
26+
coreDriverVersion=`echo $coreDriverArray | jq ". | last"`
27+
coreDriverVersion=`echo $coreDriverVersion | tr -d '"'`
28+
coreFree=`curl -s -X GET \
29+
"https://api.supertokens.io/0/core-driver-interface/dependency/core/latest?password=$SUPERTOKENS_API_KEY&planType=FREE&mode=DEV&version=$coreDriverVersion&driverName=python" \
30+
-H 'api-version: 1'`
31+
if [[ `echo $coreFree | jq .core` == "null" ]]
32+
then
33+
echo "fetching latest X.Y version for core given core-driver-interface X.Y version: $coreDriverVersion, planType: FREE gave response: $coreFree. Please make sure all relevant cores have been pushed."
34+
exit 1
35+
fi
36+
coreFree=$(echo $coreFree | jq .core | tr -d '"')
37+
while [ $i -lt $frontendDriverLength ]; do
38+
frontendDriverVersion=`echo $frontendDriverArray | jq ".[$i]"`
39+
frontendDriverVersion=`echo $frontendDriverVersion | tr -d '"'`
40+
i=$((i+1))
41+
42+
if [[ $frontendDriverVersion == '1.0' ]]; then
43+
continue
44+
fi
45+
46+
frontendVersionXY=`curl -s -X GET \
47+
"https://api.supertokens.io/0/frontend-driver-interface/dependency/frontend/latest?password=$SUPERTOKENS_API_KEY&frontendName=website&mode=DEV&version=$frontendDriverVersion&driverName=python" \
48+
-H 'api-version: 1'`
49+
if [[ `echo $frontendVersionXY | jq .frontend` == "null" ]]
50+
then
51+
echo "fetching latest X.Y version for frontend given frontend-driver-interface X.Y version: $frontendDriverVersion, name: webiste gave response: $frontend. Please make sure all relevant versions have been pushed."
52+
exit 1
53+
fi
54+
frontendVersionXY=$(echo $frontendVersionXY | jq .frontend | tr -d '"')
55+
56+
frontendInfo=`curl -s -X GET \
57+
"https://api.supertokens.io/0/driver/latest?password=$SUPERTOKENS_API_KEY&mode=DEV&version=$frontendVersionXY&name=website" \
58+
-H 'api-version: 0'`
59+
if [[ `echo $frontendInfo | jq .tag` == "null" ]]
60+
then
61+
echo "fetching latest X.Y.Z version for frontend, X.Y version: $frontendVersionXY gave response: $frontendInfo"
62+
exit 1
63+
fi
64+
frontendTag=$(echo $frontendInfo | jq .tag | tr -d '"')
65+
frontendVersion=$(echo $frontendInfo | jq .version | tr -d '"')
66+
67+
nodeVersionXY=`curl -s -X GET \
68+
"https://api.supertokens.io/0/frontend-driver-interface/dependency/driver/latest?password=$SUPERTOKENS_API_KEY&mode=DEV&version=$frontendDriverVersion&driverName=node&frontendName=website" \
69+
-H 'api-version: 1'`
70+
if [[ `echo $nodeVersionXY | jq .driver` == "null" ]]
71+
then
72+
echo "fetching latest X.Y version for driver given frontend-driver-interface X.Y version: $frontendDriverVersion gave response: $nodeVersionXY. Please make sure all relevant drivers have been pushed."
73+
exit 1
74+
fi
75+
nodeVersionXY=$(echo $nodeVersionXY | jq .driver | tr -d '"')
76+
77+
nodeInfo=`curl -s -X GET \
78+
"https://api.supertokens.io/0/driver/latest?password=$SUPERTOKENS_API_KEY&mode=DEV&version=$nodeVersionXY&name=node" \
79+
-H 'api-version: 0'`
80+
if [[ `echo $nodeInfo | jq .tag` == "null" ]]
81+
then
82+
echo "fetching latest X.Y.Z version for driver, X.Y version: $nodeVersionXY gave response: $nodeInfo"
83+
exit 1
84+
fi
85+
nodeTag=$(echo $nodeInfo | jq .tag | tr -d '"')
86+
87+
someFrontendTestsRan=true
88+
89+
tries=1
90+
while [ $tries -le 3 ]
91+
do
92+
tries=$(( $tries + 1 ))
93+
./setupAndTestWithFrontendWithDrfAsync.sh $coreFree $frontendTag $nodeTag
94+
if [[ $? -ne 0 ]]
95+
then
96+
if [[ $tries -le 3 ]]
97+
then
98+
rm -rf ../../supertokens-root
99+
rm -rf ../../supertokens-website
100+
echo "failed test.. retrying!"
101+
else
102+
echo "test failed for website tests... exiting!"
103+
exit 1
104+
fi
105+
else
106+
rm -rf ../../supertokens-root
107+
rm -rf ../../supertokens-website
108+
break
109+
fi
110+
done
111+
done
112+
113+
if [[ $someFrontendTestsRan = "false" ]]
114+
then
115+
echo "no tests ran... failing!"
116+
exit 1
117+
fi

0 commit comments

Comments
 (0)