Skip to content

Commit

Permalink
Store email address in medperf database (#511)
Browse files Browse the repository at this point in the history
* add logic to save user email in medperf database

* modify client mocked tokens

* modify function name
  • Loading branch information
hasan7n authored Dec 8, 2023
1 parent de0ec67 commit d0dd5a5
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 7 deletions.
2 changes: 1 addition & 1 deletion mock_tokens/generate_tokens.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

def token_payload(user):
return {
"custom_claims/email": f"{user}@example.com",
"https://medperf.org/email": f"{user}@example.com",
"iss": "https://localhost:8000/",
"sub": user,
"aud": "https://localhost-localdev/",
Expand Down
8 changes: 4 additions & 4 deletions mock_tokens/tokens.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"[email protected]": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJjdXN0b21fY2xhaW1zL2VtYWlsIjoidGVzdGFkbWluQGV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6ODAwMC8iLCJzdWIiOiJ0ZXN0YWRtaW4iLCJhdWQiOiJodHRwczovL2xvY2FsaG9zdC1sb2NhbGRldi8iLCJpYXQiOjE2OTA1NTIxMjQsImV4cCI6MTE2OTA1NTIxMjR9.PbAxtzBxPfipnuYGPx90P2_K-2V7jPSdPEhzHEW6u4KnUQU8Gul6xrwLsGlgdD19A6EzUtgfQxW2Lk2OITcOD0nbXcjUgPyduLozMXDdTwom19429g7Q5eWOppWdMImirX3OygWaqx587Q_OL73HZuCjFcEWwyGnhB62oruVRcM6uDWz4xVmGcAwdtMzCBYvQj9_C-Hnt9IYPgnKesXPr_AP98-bdQx2EBahXtQW1HaARgabZp3SLaCDY9I6h91B7NQ-PDWpuDxd0UamHSaq9dNPbd0SsR6ajl80wOKQaZF3be_TKJW0e0l7L4tnsbbSW23fR1utSH2PlNFPBx3uGGe2Aqirdq16fAWqvDNO8-kiVRpeikp0ze17lTYqtw2-GZIxXyc8rG-NPxz7R5lMg7ARu99e5nLGFHpV5sMNUoXKx5zoPO7Y7cO5mdzm0C_2DARB7imagKsL5eLc5fcYDEZBl0FtkDgT_CY3FEuH_X3DgPwEP6wE2IFGnU1zEXtuNd1XSUxvxxZ0_afoX54qNuz3m9qzAKuYJkkziiApdIPE_bXX2ox3-Z_Q5RfqvtLRJoE64FaOMr_6xCq_77hpPDpWACQaXCwn736-Jl8nP1HcGvdDa980dzKaih4mQ-FtFZ8xhMXU7jA_Bur9e2tg51TxBzAyd4t4NNk-gYaSUPU",
"[email protected]": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJjdXN0b21fY2xhaW1zL2VtYWlsIjoidGVzdGJvQGV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6ODAwMC8iLCJzdWIiOiJ0ZXN0Ym8iLCJhdWQiOiJodHRwczovL2xvY2FsaG9zdC1sb2NhbGRldi8iLCJpYXQiOjE2OTA1NTIxMjQsImV4cCI6MTE2OTA1NTIxMjR9.c5dnk-e8ys8MpaRzBkFe_RQTjGLKQlGSkJVNBhiKbzJV6565iHQ1HvFp88q-6ldGIwVWw9ZyY6QH2EWbPYfLF69-KnNcxUbDOJe9jBX0UAfaUsrcsaVoxLJPCojnjqKoIKgu_NM5PlEvsn4ojYA8Q-DxJ7r9RexnhxG0TxU_CwjhYuzV9RQsE3phWbHmcFv1-OIGWr72q1p8QwfaQp42K4iyUC7u4Buk6we9V4NJIJPPjjadkmdsYnm3pJxYVhKZx1pTkGnHTt6YEilQM9Iwgw_1mA5o1AYkwTm-_9lMxbSiwMzdxZmM1S_L-XoVlrWmyxeu2-BdLMIt49LS3fSXXDkcGyLboxLlg8v5rCMkhpUvDvw-dwpVUi1Y6QIVIqQocDJ3Bj1K-5SbGISc2wU7Aa9GNXe7GcEFn9DoeCthy3aLfucc3l8usZagopkAjVSGmClSJNw90VoWA7kER31E7Ehas5mnlJedGeyNV1wm5r2sMJfUsnoVqaCMHNFE4SQJaMVkGQOS4gn-G_8_WMLVrvfT1f_dg-dvISWrvhZ7-Uow-gi9-px2oY3Ehk2b82CPRMf3O20HOppLTg7ETqm77wQq9Elqrn2KoAYgc5Rlr-JZEq76NI37AgYRDIRistLI9_-UzJmY-YYbep2PsiWBx8WrUqm8uDIKDoGhfjBElQo",
"[email protected]": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJjdXN0b21fY2xhaW1zL2VtYWlsIjoidGVzdG1vQGV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6ODAwMC8iLCJzdWIiOiJ0ZXN0bW8iLCJhdWQiOiJodHRwczovL2xvY2FsaG9zdC1sb2NhbGRldi8iLCJpYXQiOjE2OTA1NTIxMjQsImV4cCI6MTE2OTA1NTIxMjR9.FOKlc3ZKH193-cINs9fxIPitsPeE2RZYl_H96xWaKIGOYOec55hR1WgybXD47czGUuTLS8NQGnFcTf-CGABWhFs7f3oTWKxpqo98sOGIhXxASgktfKmqL8tZCv-a4LCUoGFfeekWCvSo_fezkFnxZT1090JpPYpwcbjbTPY4u0JSU4XbaQh4y7N0lJXlmaZuAb13ncur7uY4A6Onl3u49m3tRjbg36r8fyzUwKppMyo5JdLS4h8099ZW7B6v32Xsr4TEz-UOA88YF_mmgK1P9BaFL7aQuARqsqvIQgdmH4JYxnoyng-UiroANy_HeeMJjhDtkuAVUsF6UOG_excgC9jA53GKNCSxxqERD-mxvZ5juWyL86fTSwuaBALWVv5HFUjHbxsA-2JzKt-ZrSD93Q-DqTi36f1WGfwphypc-2W201d4l1EJSg2b4FAqqt2dDDV4deGg3FCkR4vHXdA5aWIihZWmtSLsCylkg9bJiR0iZp6w-6I4R-8KDTG10UgFLPQDS95yLhClcjUjFnmI-xs5rLJvfuIbQU58yoOlBNwVPEm-G7vfTpw7kl_x3qjV_mOw2QSJE0_iQ_gi_YZ1Lzh4ueEgBFYF7VPrLV4x2djJ-Yd1Qb--YQaBRTTFpZ1A8EqUQ-BCn0K9FoWgT2ChZj-B_Oks6z5Z2sqXyauYFU8",
"[email protected]": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJjdXN0b21fY2xhaW1zL2VtYWlsIjoidGVzdGRvQGV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6ODAwMC8iLCJzdWIiOiJ0ZXN0ZG8iLCJhdWQiOiJodHRwczovL2xvY2FsaG9zdC1sb2NhbGRldi8iLCJpYXQiOjE2OTA1NTIxMjQsImV4cCI6MTE2OTA1NTIxMjR9.PPfm_uOpz0SuAUEVKE-630mSDuboRUUliSoL5CiE2gUmzxHW5iyJ-37pOfuO5e6y0A4YMnh_xTv3yxgnG5OOB_6ZLD_KF6e5BRJWkZhqKixGLDpQReUv9PadR02eMgtaQBKNuy9Ey8EV8mtyeIUH1JDoIwO4Lt17XHzvYwM7JdCH3TguxPYvCMORoLwKFfhPUlBeMDnjQBnOiw7gv46CdoXHAUqj7k87gp04opgSaeA1tsJIzakZiwXLK4CJvTo_jIhd_w4RNXYHiacI5AtoI8zJKzIdmptkJKcJv2yWq8nFpBlpAr09X-c4haBB4xGeX4743yOBQ6jMdW2f6mqOPTypbEn94_tbn-HaqbZJoclSwByDX0AN3j5KZ0-W-zR3CkPazkCqIWNLO9dte1fz2iocmsAmYdxmvcCN-uAMFI1tRaYHHTd3lyv-GOOllhs-Pc-H5fBfuN-H-l1LejdtdIN9qAxx5BgGVla_ac1mdHEqljO4AuppK4dMcSzw3BUHU4R0uqZ81-a-RoahG8SiPvihjl8foWCaB86qCBJDGItJno2Zdnw4Qpk-EeVSCnQAz0PzVhw9hhhNlAeO8GvKL1-OR1aiXn126empXYM7-wDjs8aAEY4oCo5987GU-pbdVwE8As2FCFI6vbW2B3JBmKideidFpeT92JWqeXv8Q_M"
"[email protected]": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwczovL21lZHBlcmYub3JnL2VtYWlsIjoidGVzdGFkbWluQGV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6ODAwMC8iLCJzdWIiOiJ0ZXN0YWRtaW4iLCJhdWQiOiJodHRwczovL2xvY2FsaG9zdC1sb2NhbGRldi8iLCJpYXQiOjE3MDEwMzY3NjEsImV4cCI6MTE3MDEwMzY3NjF9.iZwlrNHjT90aZt_puWQnNke-7IrtQQ5FXsxpGfrYQjRGGXG4mgAvqI-9o-D4MWw8zdO0pDNddbQI44aoXDa_oOUpo23qhqjo-AahIKKUGu4W166cV6G8lseza7xr7WtZqEn_WA2qJR-IcqZvu80Lt6nURR-7tl80cLK4NdD5TmOvTOZdn4psgQg1uWrfWCLcQvjvfEtGPxHij1zu2usv5FuyDytp49xjFbH90bnepkIV0Jr_BfUZEm75sRf1wfj8c-t3IhqdWySfR0gSC4UW9ieaG_h7_kxRI_J3qfUwBklbtCMkOnApA4FaRUnv48fRBWCGxtU_1AVHbUwwPldMfUd8cDf_76Ipi31nIX5PVw7g7O00L23-CyjGf23U2j4Srz1xBHG_u3HAoT7XXOPpjaLGI0y021e9x7i1GWHMzqzcGcNUlJj8GMfocTJOLR1y4UNYvvWFuhaeqOHpVclcJ22Mo9JjsFLfy5D5TPetk2vBD0bExCgAOmAmhdnSEY96OxItjWYfSlZuBen29JD9NaUCwK4knQm2NODnKeTIS034EQsWGqXT-84VUdR_pJr_-seNzrmLxD9pLNfW3XARgscE-7Rfg29cdADj0RU_KNblkyNjwJzn1XxUI54IRlj3oYTQ8R4VzFag2NbJgqDpg6EQYg8Ii2X1v-8QN3tvuQQ",
"[email protected]": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwczovL21lZHBlcmYub3JnL2VtYWlsIjoidGVzdGJvQGV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6ODAwMC8iLCJzdWIiOiJ0ZXN0Ym8iLCJhdWQiOiJodHRwczovL2xvY2FsaG9zdC1sb2NhbGRldi8iLCJpYXQiOjE3MDEwMzY3NjEsImV4cCI6MTE3MDEwMzY3NjF9.BPDuCCa5akAzJmM7qSuUB7A0fmSkGGOKl4bCdRkyeYBCYuPofLHXCeEuILw9iZxKIKGpxiOal-6JLWlo6cteW4-ebcby3u7zV2rc0pWWvsezsFuYQt8FojAi6Knv5R0BbgSLtVxc_BGR7vK0apVEc9VU4ootfDitdHDHFGo2QO90RIIIg1toWIK5NkK39WQLvvUnEXhtvrhejeqFPpJj7SgrggytoW1ZZqGmtFDKhJii1cKdW5anNOsUdD5L386lgh5K5n_nxim63MrZI8wdJvLW16_NcvVRYOrgfEP7jp1kyb5Vmv_NQaS9CsnSMewv-JA4lP9LC3bs1YixOEcHYP6T9z1g6hhV96RkpCjIZuo5QbBYKVsONscePZDLTdlj2NrfMuyjt7NbrJWJpmaOCmqKvnQDIo1gdDd940_kBgcLgrjtTn6LfndXsAWM6U6_x78uKL73XoJwQwPXVwF2_hyo6vEHufx9rfo7WyPD5vTHb_1FrZQE-FZ_0DmOpe4tVaDy9nkfcZzu_jlYMnFMTJSn8te3hs9JWyfDGTwLY9r0WW5htRAS8dHSOGRzXpMCD6gHvcbYEpcEewGGJiaWombVUOCJg-x1Ax8zXx2-k4vFol0_7jYPw0EsduqTtjXChdw8NGDVUKLjjLlAZ_oUAYRCaYOdBpBNFFKKIfJ6oGw",
"[email protected]": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwczovL21lZHBlcmYub3JnL2VtYWlsIjoidGVzdG1vQGV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6ODAwMC8iLCJzdWIiOiJ0ZXN0bW8iLCJhdWQiOiJodHRwczovL2xvY2FsaG9zdC1sb2NhbGRldi8iLCJpYXQiOjE3MDEwMzY3NjEsImV4cCI6MTE3MDEwMzY3NjF9.ZDTNB9UAMnTA67QQXBBqPBjG96QJbFfPweL0AEioSMu-VzZTQlSdmgmXR36Li8opkBwxaVpWKCyP95eCgEAZ6Fdr_kE259kHJxHTD8UrejN8vj0ramqmXfd2xIxEN7q8YGzt4USGXFVII_iCehPandtuXfsqvQrcuu-dlfbsb85Azphi_6SWM3-2U5Vit7bDOeP218XHBy78uhW9mLZt6d838Hk97U9tr2vlhrO7bCOhy5SHSP4svhkF-wIglxarIxPu7RUsYshJp21aY976tJ39_RDS9ResIytYZGrAUacKGU5OJihyaaR_WNoppXGPxJsfbGyqylj_XC9_jgsnZCyfztahzOeWyCjjQeosSiB6dc7cmzlgeDcBtXAvkEtYg6B8SFR-c-NM6Wy0Wd4L4UQW175ySCBRwfuGUlKTszwG7LyRcxolui7ESc8E1PynczfOXxdXut1mxtrXrfKX90jgIV_wVR9LGYF0IVteJS-kudpabyDG65-LAli15ZwYbNYDaFLSit6j4W_sVeN9zZPA6cm37hfzI6pqf1J42R6_hmL1lmdv2Aq_6kumDShxVDugpjpnCt6vaZFphqJR5F_MIW587brzrbVVVNuaD1T1Gf0WJgX9-FaFsvRwXMhEdTfyXDPcnIdYH83T-tNNFyZCJek64-e--WSnSrRrQYs",
"[email protected]": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwczovL21lZHBlcmYub3JnL2VtYWlsIjoidGVzdGRvQGV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6ODAwMC8iLCJzdWIiOiJ0ZXN0ZG8iLCJhdWQiOiJodHRwczovL2xvY2FsaG9zdC1sb2NhbGRldi8iLCJpYXQiOjE3MDEwMzY3NjEsImV4cCI6MTE3MDEwMzY3NjF9.A-6hIS7Ua0nXr89Percg0YVjYmWFcpQSK66URRAjByTuLnvfOokfEyTULpdjB9uNOSEwIOoH55Y3o2lNG5_M9PVshScnPXR8YR0Ow7elU0GIfdcv3YDYu-YzH0iTbrVEc0X91J_SPp2vN5dSO0UVLHE9fQxxL1OzYeu2w9yHTu5OdEpJC7yPLPUu3dbKhknhwO4OGt_9hBD4b8X85f8js89d9YA9gl7XJydwNjdnNfv8ZUXwDP9b77h0RBeGGNkyYNNkRAex35g5D4Xd9evPsf7obHZkRTjiF-RMToCeJNnjv0BzHlsiz66qAONjW6LCcAwW7-ACS282YYP1yRhr4NXQinfBBo62auYa25sRTHv6uRV7IMrw01OovbVb4lbuKWTZQ0TUmW_UlQujv_EpzoXHcC__ZvMVRG9einjLdj2MfUHuvmxLeM2OYK75VzjP63YKP_67O9hAbAzyn1Z6-CQAgom8coGUV8Mdwz-L-VmvpYMdmCFohYRTqspluj-O-hrMNKexycdbbuflodkRhn8Pi35fUqb2UP5eQvhXusX7ob-YB7PHaka6xY8Wsndb_blEoTkSUmbxeSWt8QKz_n6AWBO6LCgOCG1LyAv2_DaL2M00sJ9oLCGDYnkDRoc_Aq45GEHxIS8cEQL2siFQbrH-KPT8PlKshNjMLtyNcO8"
}
1 change: 1 addition & 0 deletions server/medperf/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -286,3 +286,4 @@
"TOKEN_TYPE_CLAIM": None, # Currently expected auth tokens don't contain such a claim
"JTI_CLAIM": None, # Currently expected auth tokens don't contain such a claim
}
TOKEN_USER_EMAIL_CLAIM = "https://medperf.org/email"
2 changes: 1 addition & 1 deletion server/medperf/testing_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def generate_key_pair():

def generate_test_jwt(username):
payload = {
"custom_claims/email": f"{username}@example.com",
"https://medperf.org/email": f"{username}@example.com",
"iss": "https://localhost:8000/",
"sub": username,
"aud": "https://localhost-unittests/",
Expand Down
11 changes: 10 additions & 1 deletion server/user/backends.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
from rest_framework_simplejwt.authentication import JWTAuthentication
from rest_framework_simplejwt.exceptions import AuthenticationFailed, InvalidToken
from rest_framework_simplejwt.settings import api_settings
from django.conf import settings
from django.utils.translation import gettext_lazy as _
from drf_spectacular.extensions import OpenApiAuthenticationExtension
from drf_spectacular.plumbing import build_bearer_security_scheme_object


def get_email_from_token(validated_token):
try:
return validated_token[settings.TOKEN_USER_EMAIL_CLAIM]
except KeyError:
raise InvalidToken(_("Token must contain the user email address"))


class JWTAuthenticateOrCreateUser(JWTAuthentication):
def get_user(self, validated_token):
try:
Expand All @@ -16,8 +24,9 @@ def get_user(self, validated_token):
try:
user = self.user_model.objects.get(**{api_settings.USER_ID_FIELD: user_id})
except self.user_model.DoesNotExist:
user_email = get_email_from_token(validated_token)
user = self.user_model.objects.create_user(
**{api_settings.USER_ID_FIELD: user_id}
**{api_settings.USER_ID_FIELD: user_id}, email=user_email
)

if not user.is_active:
Expand Down

0 comments on commit d0dd5a5

Please sign in to comment.