Skip to content

Commit

Permalink
fix(slack): email not in profile dict (#5638)
Browse files Browse the repository at this point in the history
  • Loading branch information
whitdog47 authored Dec 20, 2024
1 parent ff0ac89 commit 6ee9b19
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 28 deletions.
2 changes: 1 addition & 1 deletion src/dispatch/plugins/dispatch_slack/case/interactive.py
Original file line number Diff line number Diff line change
Expand Up @@ -1697,7 +1697,7 @@ def handle_user_mention(
users_not_in_case = []
for user_id in mentioned_users:
user_email = dispatch_slack_service.get_user_email(client, user_id)
if not participant_service.get_by_case_id_and_email(
if user_email and not participant_service.get_by_case_id_and_email(
db_session=db_session, case_id=context["subject"].id, email=user_email
):
users_not_in_case.append(user_email)
Expand Down
60 changes: 35 additions & 25 deletions src/dispatch/plugins/dispatch_slack/incident/interactive.py
Original file line number Diff line number Diff line change
Expand Up @@ -794,9 +794,12 @@ def handle_timeline_added_event(
# if user is not found, we default to "Unknown"
try:
message_sender_email = get_user_email(client=client, user_id=message_sender_id)
individual = individual_service.get_by_email_and_project(
db_session=db_session, email=message_sender_email, project_id=incident.project.id
)
if message_sender_email:
individual = individual_service.get_by_email_and_project(
db_session=db_session,
email=message_sender_email,
project_id=incident.project.id,
)
except Exception:
individual = None

Expand Down Expand Up @@ -1076,12 +1079,13 @@ def handle_member_joined_channel(
if inviter and inviter_is_user:
# Participant is added into the incident channel using an @ message or /invite command.
inviter_email = get_user_email(client=client, user_id=inviter)
added_by_participant = participant_service.get_by_incident_id_and_email(
db_session=db_session, incident_id=context["subject"].id, email=inviter_email
)
participant.added_by = added_by_participant
if inviter_email:
added_by_participant = participant_service.get_by_incident_id_and_email(
db_session=db_session, incident_id=context["subject"].id, email=inviter_email
)
participant.added_by = added_by_participant

else:
if not participant.added_by:
# User joins via the `join` button on Web Application or Slack.
# We default to the incident commander when we don't know who added the user or the user is the Dispatch bot.
incident = incident_service.get(
Expand Down Expand Up @@ -1129,14 +1133,15 @@ def handle_member_joined_channel(
if inviter and inviter_is_user:
# Participant is added into the incident channel using an @ message or /invite command.
inviter_email = get_user_email(client=client, user_id=inviter)
added_by_participant = participant_service.get_by_case_id_and_email(
db_session=db_session,
case_id=context["subject"].id,
email=inviter_email,
)
participant.added_by = added_by_participant
if inviter_email:
added_by_participant = participant_service.get_by_case_id_and_email(
db_session=db_session,
case_id=context["subject"].id,
email=inviter_email,
)
participant.added_by = added_by_participant

else:
if not participant.added_by:
# User joins via the `join` button on Web Application or Slack.
# We default to the incident commander when we don't know who added the user or the user is the Dispatch bot.
participant.added_by = case.assignee
Expand Down Expand Up @@ -1565,7 +1570,9 @@ def handle_assign_role_submission_event(
ack_assign_role_submission_event(ack=ack)
assignee_user_id = form_data[AssignRoleBlockIds.user]["value"]
assignee_role = form_data[AssignRoleBlockIds.role]["value"]
assignee_email = get_user_email(client=client, user_id=assignee_user_id)
assignee_email = (
get_user_email(client=client, user_id=assignee_user_id) or "[email protected]"
)

# we assign the role
incident_flows.incident_assign_role_flow(
Expand Down Expand Up @@ -2548,15 +2555,18 @@ def handle_incident_notification_subscribe_button_click(
user_id = context["user_id"]
user_email = get_user_email(client=client, user_id=user_id)

if incident.tactical_group:
group_flows.update_group(
subject=incident,
group=incident.tactical_group,
group_action=GroupAction.add_member,
group_member=user_email,
db_session=db_session,
)
message = f"Success! We've subscribed you to incident {incident.name}. You will start receiving all tactical reports about this incident via email."
if not user_email:
message = "Sorry, we can't invite you to this incident. There was a problem finding your user."
else:
if incident.tactical_group:
group_flows.update_group(
subject=incident,
group=incident.tactical_group,
group_action=GroupAction.add_member,
group_member=user_email,
db_session=db_session,
)
message = f"Success! We've subscribed you to incident {incident.name}. You will start receiving all tactical reports about this incident via email."

respond(text=message, response_type="ephemeral", replace_original=False, delete_original=False)

Expand Down
4 changes: 2 additions & 2 deletions src/dispatch/plugins/dispatch_slack/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -274,10 +274,10 @@ def get_user_profile_by_email(client: WebClient, email: str) -> SlackResponse:
return _get_user_profile_by_email(WebClientWrapper(client), email)


def get_user_email(client: WebClient, user_id: str) -> str:
def get_user_email(client: WebClient, user_id: str) -> str | None:
"""Gets the user's email."""
user_info = get_user_info_by_id(client, user_id)
return user_info["profile"]["email"]
return user_info["profile"].get("email")


def get_user_avatar_url(client: WebClient, email: str) -> str:
Expand Down

0 comments on commit 6ee9b19

Please sign in to comment.