@@ -183,43 +183,81 @@ def _calculate_session_expiry(self, request, user_info):
183
183
id_token_expiry_timestamp = self ._get_id_token_expiry (user_info )
184
184
now_in_seconds = int (time .time ())
185
185
186
+ # Log token expiration details
187
+ logger .debug (
188
+ "Token expiration details - Access token: %s (%s), ID token: %s (%s), Current time: %s" ,
189
+ access_token_expiry_timestamp ,
190
+ time .strftime ("%Y-%m-%d %H:%M:%S" , time .localtime (access_token_expiry_timestamp )),
191
+ id_token_expiry_timestamp ,
192
+ time .strftime ("%Y-%m-%d %H:%M:%S" , time .localtime (id_token_expiry_timestamp )),
193
+ time .strftime ("%Y-%m-%d %H:%M:%S" , time .localtime (now_in_seconds )),
194
+ )
195
+
186
196
# The session length is set to match whichever token expiration time is closer.
187
197
earliest_expiration_timestamp = min (
188
198
access_token_expiry_timestamp , id_token_expiry_timestamp
189
199
)
190
200
seconds_until_expiry = earliest_expiration_timestamp - now_in_seconds
191
201
192
202
if seconds_until_expiry <= 0 :
203
+ logger .error (
204
+ "Session expiry time has already passed! Current time exceeds token expiration."
205
+ )
193
206
raise AuthError ("Session expiry time has already passed!" )
194
207
195
208
return seconds_until_expiry
196
209
197
210
def authenticate (self , request ):
198
- access_token = self ._get_access_token (request )
199
- id_token = self ._get_id_token (request )
200
-
201
- user_info = self ._get_user_info (access_token , id_token )
202
- username = self ._get_username_from_userinfo (user_info )
203
- is_sheriff = self ._get_is_sheriff_from_userinfo (user_info )
204
-
205
- seconds_until_expiry = self ._calculate_session_expiry (request , user_info )
206
- logger .debug ("Updating session to expire in %i seconds" , seconds_until_expiry )
207
- request .session .set_expiry (seconds_until_expiry )
208
-
211
+ logger .debug ("Authentication attempt started" )
209
212
try :
210
- user = User .objects .get (username = username )
211
- if user .is_staff != is_sheriff :
212
- user .is_staff = is_sheriff
213
- user .save ()
214
- return user
215
- except ObjectDoesNotExist :
216
- # The user doesn't already exist, so create it since we allow
217
- # anyone with SSO access to create an account on Treeherder.
218
- logger .debug ("Creating new user: %s" , username )
219
- return User .objects .create_user (
220
- username , email = user_info ["email" ], password = None , is_staff = is_sheriff
213
+ access_token = self ._get_access_token (request )
214
+ id_token = self ._get_id_token (request )
215
+ logger .debug ("Authentication tokens retrieved successfully" )
216
+
217
+ user_info = self ._get_user_info (access_token , id_token )
218
+ username = self ._get_username_from_userinfo (user_info )
219
+ is_sheriff = self ._get_is_sheriff_from_userinfo (user_info )
220
+ logger .debug ("User info retrieved for: %s" , username )
221
+
222
+ seconds_until_expiry = self ._calculate_session_expiry (request , user_info )
223
+ logger .debug (
224
+ "Updating session to expire in %i seconds for user %s" ,
225
+ seconds_until_expiry ,
226
+ username ,
221
227
)
222
228
229
+ # Convert seconds to more readable format
230
+ hours = seconds_until_expiry // 3600
231
+ minutes = (seconds_until_expiry % 3600 ) // 60
232
+ logger .debug ("Session will expire in %d hours and %d minutes" , hours , minutes )
233
+
234
+ request .session .set_expiry (seconds_until_expiry )
235
+
236
+ try :
237
+ user = User .objects .get (username = username )
238
+ logger .debug ("Existing user authenticated: %s" , username )
239
+ if user .is_staff != is_sheriff :
240
+ user .is_staff = is_sheriff
241
+ user .save ()
242
+ logger .debug ("Updated staff status for user %s to %s" , username , is_sheriff )
243
+ return user
244
+ except ObjectDoesNotExist :
245
+ # The user doesn't already exist, so create it since we allow
246
+ # anyone with SSO access to create an account on Treeherder.
247
+ logger .debug ("Creating new user: %s" , username )
248
+ return User .objects .create_user (
249
+ username , email = user_info ["email" ], password = None , is_staff = is_sheriff
250
+ )
251
+ except AuthenticationFailed as e :
252
+ logger .error ("Authentication failed: %s" , str (e ))
253
+ raise
254
+ except AuthError as e :
255
+ logger .error ("Auth error during authentication: %s" , str (e ))
256
+ raise
257
+ except Exception as e :
258
+ logger .error ("Unexpected error during authentication: %s" , str (e ))
259
+ raise
260
+
223
261
def get_user (self , user_id ):
224
262
try :
225
263
return User ._default_manager .get (pk = user_id )
0 commit comments