1+ from datetime import datetime
12import logging
23import os
34from django .contrib .auth import get_user_model
@@ -35,34 +36,25 @@ def authenticate_by_token(callback_token):
3536 return None
3637
3738
38- def create_callback_token_for_user (user , alias_type , token_type ):
39- token = None
39+ def create_callback_token_for_user (user , alias_type , token_type , to_alias ):
4040 alias_type_u = alias_type .upper ()
41- to_alias_field = getattr (api_settings , f'PASSWORDLESS_USER_{ alias_type_u } _FIELD_NAME' )
42- if user .pk in api_settings .PASSWORDLESS_DEMO_USERS .keys ():
43- token = CallbackToken .objects .filter (user = user ).first ()
44- if token :
45- return token
46- else :
47- return CallbackToken .objects .create (
48- user = user ,
49- key = api_settings .PASSWORDLESS_DEMO_USERS [user .pk ],
50- to_alias_type = alias_type_u ,
51- to_alias = getattr (user , to_alias_field ),
52- type = token_type
53- )
54-
55- token = CallbackToken .objects .create (user = user ,
56- to_alias_type = alias_type_u ,
57- to_alias = getattr (user , to_alias_field ),
58- type = token_type )
59-
60-
61-
62- if token is not None :
41+ demo_key = api_settings .PASSWORDLESS_DEMO_USERS .get (user .pk ) or getattr (
42+ api_settings , f"PASSWORDLESS_DEMO_USERS_{ alias_type_u } "
43+ ).get (to_alias )
44+ if demo_key :
45+ token , _ = CallbackToken .objects .update_or_create (
46+ user = user ,
47+ key = demo_key ,
48+ to_alias_type = alias_type_u ,
49+ to_alias = to_alias ,
50+ type = token_type ,
51+ defaults = {"is_active" : True , "created_at" : datetime .now ()})
6352 return token
6453
65- return None
54+ return CallbackToken .objects .create (user = user ,
55+ to_alias_type = alias_type_u ,
56+ to_alias = to_alias ,
57+ type = token_type )
6658
6759
6860def validate_token_age (callback_token ):
@@ -74,7 +66,9 @@ def validate_token_age(callback_token):
7466 token = CallbackToken .objects .get (key = callback_token , is_active = True )
7567 seconds = (timezone .now () - token .created_at ).total_seconds ()
7668 token_expiry_time = api_settings .PASSWORDLESS_TOKEN_EXPIRE_TIME
77- if token .user .pk in api_settings .PASSWORDLESS_DEMO_USERS .keys ():
69+ if token .user .pk in api_settings .PASSWORDLESS_DEMO_USERS or token .to_alias in getattr (
70+ api_settings , f"PASSWORDLESS_DEMO_USERS_{ token .to_alias_type } "
71+ ):
7872 return True
7973 if seconds <= token_expiry_time :
8074 return True
0 commit comments