Skip to content

Commit 8b7057f

Browse files
implemented suggested changes
1 parent 6cd299c commit 8b7057f

File tree

1 file changed

+13
-15
lines changed

1 file changed

+13
-15
lines changed

src/pretalx/agenda/views/schedule.py

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
import textwrap
55
from contextlib import suppress
66
from urllib.parse import unquote, urlencode, urlparse, urlunparse
7+
from datetime import timedelta
78

89
from django.contrib import messages
910
from django.core import signing
1011
from django.utils import timezone
11-
from datetime import timedelta
1212
from django.http import (
1313
Http404,
1414
HttpResponse,
@@ -84,7 +84,7 @@ def parse_ics_token(token):
8484
raise ValueError("Token expired")
8585
return value["user_id"]
8686
except (signing.BadSignature, signing.SignatureExpired, KeyError, ValueError) as e:
87-
logger.warning(f"Failed to parse ICS token: {e}")
87+
logger.warning('Failed to parse ICS token: %s', e)
8888
return None
8989

9090
@staticmethod
@@ -99,14 +99,10 @@ def check_token_expiry(token):
9999
try:
100100
value = signing.loads(token, salt="my-starred-ics")
101101
expiry_date = timezone.datetime.fromtimestamp(value["exp"], tz=timezone.utc)
102-
days_until_expiry = (expiry_date - timezone.now()).days
103-
104-
# Token is valid but check if it's expiring soon
105-
if days_until_expiry < 4:
106-
return False # Valid but expiring soon
107-
return True # Valid and not expiring soon
108-
except (signing.BadSignature, KeyError, ValueError) as e:
109-
logger.warning(f"Failed to check token expiry: {e}")
102+
time_until_expiry = expiry_date - timezone.now()
103+
return time_until_expiry >= timedelta(days=4)
104+
except Exception as e:
105+
logger.warning('Failed to check token expiry: %s', e)
110106
return None # Invalid token
111107

112108
class ExporterView(EventPermissionRequired, ScheduleMixin, TemplateView):
@@ -365,6 +361,8 @@ class ChangelogView(EventPermissionRequired, TemplateView):
365361

366362

367363
class GoogleCalendarRedirectView(EventPermissionRequired, ScheduleMixin, TemplateView):
364+
# Define constant for session key
365+
MY_STARRED_ICS_TOKEN_SESSION_KEY = 'my_starred_ics_token'
368366
permission_required = "agenda.view_schedule"
369367

370368
def get(self, request, *args, **kwargs):
@@ -375,22 +373,22 @@ def get(self, request, *args, **kwargs):
375373
if not request.user.is_authenticated:
376374
return HttpResponseRedirect(self.request.event.urls.login)
377375

378-
# Get existing token from session if available
379-
existing_token = request.session.get('my_starred_ics_token')
376+
# Use constant instead of hardcoded string
377+
existing_token = request.session.get(self.MY_STARRED_ICS_TOKEN_SESSION_KEY)
380378
generate_new_token = True
381379

382380
# If we have an existing token, check if it's still valid and not expiring soon
383381
if existing_token:
384382
token_status = self.check_token_expiry(existing_token)
385-
if token_status is True: # Token is valid and not expiring soon
383+
if token_status is True:
386384
token = existing_token
387385
generate_new_token = False
388386

389387
# Generate a new token if needed
390388
if generate_new_token:
391389
token = self.generate_ics_token(request.user.id)
392-
# Store the token in the session for future use
393-
request.session['my_starred_ics_token'] = token
390+
# Use constant here too
391+
request.session[self.MY_STARRED_ICS_TOKEN_SESSION_KEY] = token
394392

395393
ics_url = request.build_absolute_uri(
396394
reverse('agenda:export-tokenized', kwargs={

0 commit comments

Comments
 (0)