Skip to content

Commit 5bebf8c

Browse files
authored
Merge pull request strongdm#314 from strongdm/feat/fix-wrong-sender-email-on-msteams
Fix wrong sender email when using ms teams alternative emails
2 parents 9020d7f + 5168b21 commit 5bebf8c

File tree

5 files changed

+23
-15
lines changed

5 files changed

+23
-15
lines changed

e2e/slack/test_accessbot_slack_access.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -783,7 +783,7 @@ def mocked_testbot(self, testbot, mocked_user_profile):
783783
config['SENDER_EMAIL_OVERRIDE'] = None
784784
testbot.bot.sender.userid = 'XXX'
785785
testbot.bot.find_user_profile = MagicMock(return_value=mocked_user_profile)
786-
return inject_config(testbot, config)
786+
return inject_config(testbot, config, account_email=alternative_email)
787787

788788
def test_alternative_email(self, mocked_testbot):
789789
mocked_testbot.push_message("access to Xxx")
@@ -801,7 +801,7 @@ class Test_override_email(ErrBotExtraTestSettings):
801801
def mocked_testbot(self, testbot):
802802
config = create_config()
803803
config['SENDER_EMAIL_OVERRIDE'] = self.override_email
804-
return inject_config(testbot, config)
804+
return inject_config(testbot, config, account_email=self.override_email)
805805

806806
def test_override_email(self, mocked_testbot):
807807
mocked_testbot.push_message("access to Xxx")
@@ -822,7 +822,7 @@ def mocked_testbot(self, testbot):
822822
config['SENDER_EMAIL_OVERRIDE'] = None
823823
config['SENDER_NICK_OVERRIDE'] = None
824824
config['EMAIL_SUBADDRESS'] = self.email_subaddress
825-
return inject_config(testbot, config, admins=[f'@{account_name}'])
825+
return inject_config(testbot, config, admins=[f'@{account_name}'], account_email=self.account_name_with_subaddress)
826826

827827
def test_email_subaddress(self, mocked_testbot):
828828
mocked_testbot._bot.callback_message = MagicMock(side_effect=callback_message_fn(
@@ -1150,7 +1150,7 @@ def test_dont_delete_account_grant_when_flag_is_disabled(self, mocked_testbot):
11501150

11511151
# pylint: disable=dangerous-default-value
11521152
def inject_config(testbot, config, admins=["gbin@localhost"], tags={}, resources_by_role=[], account_grant_exists=False,
1153-
resources=[], account_tags={}):
1153+
resources=[], account_tags={}, account_email=account_name):
11541154
accessbot = testbot.bot.plugin_manager.plugins['AccessBot']
11551155
accessbot.config = config
11561156
# The default implementation is not compatible with the backend identifier.
@@ -1159,8 +1159,9 @@ def inject_config(testbot, config, admins=["gbin@localhost"], tags={}, resources
11591159
accessbot.get_admins = MagicMock(return_value=admins)
11601160
accessbot.get_api_access_key = MagicMock(return_value="api-access_key")
11611161
accessbot.get_api_secret_key = MagicMock(return_value="c2VjcmV0LWtleQ==") # valid base64 string
1162-
accessbot.get_sdm_service = MagicMock(
1163-
return_value=create_sdm_service_mock(tags, resources_by_role, account_grant_exists, resources, account_tags))
1162+
accessbot.get_sdm_service = MagicMock(return_value=create_sdm_service_mock(
1163+
tags, resources_by_role, account_grant_exists, resources, account_tags, account_email=account_email
1164+
))
11641165
accessbot.get_resource_grant_helper = MagicMock(return_value=create_resource_grant_helper(accessbot))
11651166
accessbot.get_approve_helper = MagicMock(return_value=create_approve_helper(accessbot))
11661167
testbot._bot.init_access_form_bot = MagicMock(return_value=None)
@@ -1174,13 +1175,13 @@ def create_resource_grant_helper(accessbot):
11741175
def create_approve_helper(accessbot):
11751176
return ApproveHelper(accessbot)
11761177

1177-
def create_sdm_service_mock(tags, resources_by_role, account_grant_exists, resources, account_tags):
1178+
def create_sdm_service_mock(tags, resources_by_role, account_grant_exists, resources, account_tags, account_email=account_name):
11781179
mock = MagicMock()
11791180
if len(resources) > 0:
11801181
mock.get_resource_by_name = MagicMock(side_effect=raise_no_resource_found)
11811182
else:
11821183
mock.get_resource_by_name = MagicMock(return_value=create_resource_mock(tags))
1183-
mock.get_account_by_email = MagicMock(return_value=create_account_mock(account_tags=account_tags))
1184+
mock.get_account_by_email = MagicMock(return_value=create_account_mock(account_tags=account_tags, account_email=account_email))
11841185
mock.grant_temporary_access = MagicMock()
11851186
mock.get_all_resources_by_role = MagicMock(return_value=resources_by_role)
11861187
mock.account_grant_exists = MagicMock(return_value=account_grant_exists)

plugins/sdm/accessbot.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,3 +484,6 @@ def __get_account_alternative_emails(self, frm):
484484

485485
def user_is_member_of_channel(self, user, channel):
486486
return self.__platform.user_is_member_of_channel(user, channel)
487+
488+
def get_platform(self):
489+
return self.__platform

plugins/sdm/lib/helper/approve_helper.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def __approve_assign_role(self, grant_request):
3131
yield str(e)
3232
return
3333
self._bot.add_thumbsup_reaction(grant_request['message'])
34-
yield from self.__notify_assign_role_request_granted(grant_request['message'], grant_request['sdm_object'].name)
34+
yield from self.__notify_assign_role_request_granted(grant_request)
3535
self._bot.get_metrics_helper().increment_manual_approvals()
3636

3737
def __approve_access_resource(self, grant_request):
@@ -45,7 +45,7 @@ def __approve_access_resource(self, grant_request):
4545
self.__grant_temporal_access(grant_request['sdm_object'], grant_request['sdm_account'].id, duration)
4646
self._bot.add_thumbsup_reaction(grant_request['message'])
4747
self._bot.remove_grant_request(grant_request['id'])
48-
yield from self.__notify_access_request_granted(grant_request['message'], resource, duration, needs_renewal)
48+
yield from self.__notify_access_request_granted(grant_request, resource, duration, needs_renewal)
4949
self._bot.get_metrics_helper().increment_manual_approvals()
5050

5151
def __grant_temporal_access_by_role(self, role_name, account_id):
@@ -74,8 +74,9 @@ def __grant_temporal_access(self, resource, account_id: str, duration: str):
7474
grant_valid_until = grant_start_from + datetime.timedelta(minutes=self.__get_resource_grant_timeout(resource, duration=duration))
7575
self.__sdm_service.grant_temporary_access(resource.id, account_id, grant_start_from, grant_valid_until)
7676

77-
def __notify_access_request_granted(self, message, resource, duration: str, is_renewal: bool):
78-
sender_email = self._bot.get_sender_email(message.frm)
77+
def __notify_access_request_granted(self, grant_request, resource, duration: str, is_renewal: bool):
78+
message = grant_request['message']
79+
sender_email = grant_request['sdm_account'].email
7980
sender_nick = self._bot.get_sender_nick(message.frm)
8081
if duration:
8182
duration_flag_timedelta = convert_duration_flag_to_timedelta(duration)
@@ -88,8 +89,10 @@ def __notify_access_request_granted(self, message, resource, duration: str, is_r
8889
' was created, you might need to reconnect to the resource.')
8990
yield f"{sender_nick}: Granting {sender_email} access to '{resource.name}' for {grant_timeout} minutes"
9091

91-
def __notify_assign_role_request_granted(self, message, role_name):
92-
sender_email = self._bot.get_sender_email(message.frm)
92+
def __notify_assign_role_request_granted(self, grant_request):
93+
message = grant_request['message']
94+
role_name = grant_request['sdm_object'].name
95+
sender_email = grant_request['sdm_account'].email
9396
sender_nick = self._bot.get_sender_nick(message.frm)
9497
yield f"{sender_nick}: Granting {sender_email} access to resources in role '{role_name}' for {self._bot.config['GRANT_TIMEOUT']} minutes"
9598

plugins/sdm/lib/helper/base_evaluate_request_helper.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import shortuuid
22
from abc import ABC, abstractmethod
33

4+
from ..platform.ms_teams_platform import MSTeamsPlatform
45
from ..util import get_approvers_channel
56

67

plugins/sdm/lib/helper/deny_helper.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ def evaluate(self, request_id, **kwargs):
1010
def __notify_access_request_denied(self, admin, denial_reason, grant_request):
1111
requester = grant_request['message'].frm
1212
sdm_object_name = grant_request['sdm_object'].name
13-
sender_email = self._bot.get_sender_email(requester)
13+
sender_email = grant_request['sdm_account'].email
1414
sender_nick = self._bot.get_sender_nick(requester)
1515
admin_nick = self._bot.get_sender_nick(admin)
1616
denial_message = f"Your request **{grant_request['id']}** has been denied by admin {admin_nick}"

0 commit comments

Comments
 (0)