Skip to content

Commit c99b38f

Browse files
committed
Update and add tests
1 parent 6852bbb commit c99b38f

File tree

2 files changed

+179
-10
lines changed

2 files changed

+179
-10
lines changed

backend/apps/slack/common/handlers/calendar_events.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,17 @@
88
from apps.common.constants import NL
99
from apps.slack.blocks import get_pagination_buttons, markdown
1010

11+
PERMISSIONS_BLOCK = [markdown("*You do not have the permission to access calendar events.*")]
12+
1113

1214
def get_cancel_reminder_blocks(reminder_schedule_id: int, slack_user_id: str) -> list[dict]:
1315
"""Get the blocks for canceling a reminder."""
16+
from apps.nest.auth.calendar_events import has_calendar_events_permission
1417
from apps.nest.models.reminder_schedule import ReminderSchedule
1518
from apps.nest.schedulers.calendar_events.slack import SlackScheduler
1619

20+
if not has_calendar_events_permission(slack_user_id):
21+
return PERMISSIONS_BLOCK
1722
try:
1823
reminder_schedule = ReminderSchedule.objects.get(pk=reminder_schedule_id)
1924
except ReminderSchedule.DoesNotExist:
@@ -31,18 +36,26 @@ def get_cancel_reminder_blocks(reminder_schedule_id: int, slack_user_id: str) ->
3136

3237
def get_events_blocks(slack_user_id: str, presentation, page: int = 1) -> list[dict]:
3338
"""Get Google Calendar events blocks for Slack home view."""
39+
from apps.nest.auth.calendar_events import has_calendar_events_permission
3440
from apps.nest.clients.google_calendar import GoogleCalendarClient
3541
from apps.nest.models.google_account_authorization import GoogleAccountAuthorization
3642
from apps.owasp.models.event import Event
3743

44+
if not has_calendar_events_permission(slack_user_id):
45+
return PERMISSIONS_BLOCK
46+
47+
# Authorize with Google
3848
auth = GoogleAccountAuthorization.authorize(slack_user_id)
49+
# If not authorized, we will get a tuple with the authorization URL
3950
if not isinstance(auth, GoogleAccountAuthorization):
4051
return [markdown(f"*Please sign in with Google first through this <{auth[0]}|link>*")]
4152
try:
53+
# Get a 24-hour window of events
4254
client = GoogleCalendarClient(auth)
4355
min_time = timezone.now() + timezone.timedelta(days=(page - 1))
4456
max_time = min_time + timezone.timedelta(days=1)
4557
events = client.get_events(min_time=min_time, max_time=max_time)
58+
# Catch network errors
4659
except ServerNotFoundError:
4760
return [markdown("*Please check your internet connection.*")]
4861
parsed_events = Event.parse_google_calendar_events(events)
@@ -58,7 +71,11 @@ def get_events_blocks(slack_user_id: str, presentation, page: int = 1) -> list[d
5871
)
5972
]
6073
for i, event in enumerate(parsed_events):
74+
# We will need this number later to set reminders
75+
# We are multiplying by 1000 to avoid collisions between pages
76+
# as we don't get the length of events list from Google Calendar API.
6177
event_number = (i + 1) + 1000 * (page - 1)
78+
# We will show the user the event number and cache the event ID for later use.
6279
cache.set(f"{slack_user_id}_{event_number}", event.google_calendar_id, timeout=3600)
6380
blocks.append(
6481
markdown(
@@ -82,8 +99,12 @@ def get_events_blocks(slack_user_id: str, presentation, page: int = 1) -> list[d
8299

83100
def get_reminders_blocks(slack_user_id: str) -> list[dict]:
84101
"""Get reminders blocks for Slack home view."""
102+
from apps.nest.auth.calendar_events import has_calendar_events_permission
85103
from apps.nest.models.reminder_schedule import ReminderSchedule
86104

105+
if not has_calendar_events_permission(slack_user_id):
106+
return PERMISSIONS_BLOCK
107+
87108
reminders_schedules = ReminderSchedule.objects.filter(
88109
reminder__member__slack_user_id=slack_user_id,
89110
).order_by("scheduled_time")
@@ -106,9 +127,13 @@ def get_reminders_blocks(slack_user_id: str) -> list[dict]:
106127

107128
def get_setting_reminder_blocks(args, slack_user_id: str) -> list[dict]:
108129
"""Get the blocks for setting a reminder."""
130+
from apps.nest.auth.calendar_events import has_calendar_events_permission
109131
from apps.nest.handlers.calendar_events import set_reminder
110132
from apps.nest.schedulers.calendar_events.slack import SlackScheduler
111133

134+
if not has_calendar_events_permission(slack_user_id):
135+
return PERMISSIONS_BLOCK
136+
112137
try:
113138
reminder_schedule = set_reminder(
114139
channel=args.channel,

0 commit comments

Comments
 (0)