Skip to content

Commit f29f86c

Browse files
authored
chore: Add enhanced authentication logging (#8879)
1 parent ee8df3d commit f29f86c

File tree

1 file changed

+60
-22
lines changed

1 file changed

+60
-22
lines changed

treeherder/auth/backends.py

Lines changed: 60 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -183,43 +183,81 @@ def _calculate_session_expiry(self, request, user_info):
183183
id_token_expiry_timestamp = self._get_id_token_expiry(user_info)
184184
now_in_seconds = int(time.time())
185185

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+
186196
# The session length is set to match whichever token expiration time is closer.
187197
earliest_expiration_timestamp = min(
188198
access_token_expiry_timestamp, id_token_expiry_timestamp
189199
)
190200
seconds_until_expiry = earliest_expiration_timestamp - now_in_seconds
191201

192202
if seconds_until_expiry <= 0:
203+
logger.error(
204+
"Session expiry time has already passed! Current time exceeds token expiration."
205+
)
193206
raise AuthError("Session expiry time has already passed!")
194207

195208
return seconds_until_expiry
196209

197210
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")
209212
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,
221227
)
222228

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+
223261
def get_user(self, user_id):
224262
try:
225263
return User._default_manager.get(pk=user_id)

0 commit comments

Comments
 (0)