44
55from datetime import datetime , timedelta
66
7+ from django .conf import settings
8+
79from rest_framework_simplejwt .tokens import AccessToken
810
911from joanie .core import models
12+ from joanie .core .authentication import KeycloakAccessToken
1013
1114
1215def generate_jwt_token_from_user (
1316 user : models .User , expires_at : datetime = None
14- ) -> AccessToken :
17+ ) -> AccessToken | KeycloakAccessToken :
1518 """
1619 Generate a jwt token used to authenticate a user from a user registered in
1720 the database
@@ -24,15 +27,45 @@ def generate_jwt_token_from_user(
2427 token, the jwt token generated as it should
2528 """
2629 issued_at = datetime .utcnow ()
27- token = AccessToken ()
28- token .payload .update (
29- {
30- "email" : user .email ,
31- "exp" : expires_at or issued_at + timedelta (days = 2 ),
32- "iat" : issued_at ,
33- "language" : user .language ,
34- "username" : user .username ,
35- "full_name" : user .get_full_name (),
36- }
37- )
30+ if issuer := settings .SIMPLE_JWT .get ("ISSUER" ):
31+ token = KeycloakAccessToken ()
32+ token .payload .update (
33+ {
34+ "exp" : expires_at or issued_at + timedelta (days = 2 ),
35+ "iat" : issued_at ,
36+ "auth_time" : 1768924092 ,
37+ "jti" : "c7ee46da-8127-51d1-35b1-3f07fa1a49a5" ,
38+ "iss" : issuer ,
39+ "aud" : "keycloak-client" ,
40+ "sub" : "095009db-b774-4e26-ab58-5e55c1474d98" ,
41+ "typ" : "ID" ,
42+ "azp" : "keycloak-client" ,
43+ "nonce" : "1a21d63a-930b-457f-9445-0858645f77ba" ,
44+ "sid" : "9f00242d-9199-80d8-178a-5f9c73968385" ,
45+ "at_hash" : "SPRUypol4zCSgENoM3764g" ,
46+ "acr" : "0" ,
47+ "s_hash" : "YFa348xSzi5FBMi4x9w6jg" ,
48+ "email_verified" : False ,
49+ "name" : user .get_full_name (),
50+ "preferred_username" : user .username ,
51+ "given_name" : user .first_name ,
52+ "family_name" : user .last_name ,
53+ "email" : user .email ,
54+ "locale" : user .language ,
55+ }
56+ )
57+ backend = token .get_token_backend ()
58+ backend .algorithm = "HS256"
59+ else :
60+ token = AccessToken ()
61+ token .payload .update (
62+ {
63+ "email" : user .email ,
64+ "exp" : expires_at or issued_at + timedelta (days = 2 ),
65+ "iat" : issued_at ,
66+ "language" : user .language ,
67+ "username" : user .username ,
68+ "full_name" : user .get_full_name (),
69+ }
70+ )
3871 return token
0 commit comments