diff --git a/hypha/apply/activity/messaging.py b/hypha/apply/activity/messaging.py index 5d3813510883e6a7f78aadfd2a7513798977a03f..4a08bb273fc2cd8669aea98e3299726baec85c0c 100644 --- a/hypha/apply/activity/messaging.py +++ b/hypha/apply/activity/messaging.py @@ -467,7 +467,7 @@ class SlackAdapter(AdapterBase): def __init__(self): super().__init__() - self.destination = settings.SLACK_DESTINATION_URL + self.destination = settings.SLACK_ENDPOINT_URL self.target_room = settings.SLACK_DESTINATION_ROOM self.comments_room = settings.SLACK_DESTINATION_ROOM_COMMENTS self.comments_type = settings.SLACK_TYPE_COMMENTS diff --git a/hypha/apply/activity/tests/test_messaging.py b/hypha/apply/activity/tests/test_messaging.py index 9f1106077796c0bba60060b348aff60b0b9e9e90..99cc3281f5864754f5a0307524a2433160f62457 100644 --- a/hypha/apply/activity/tests/test_messaging.py +++ b/hypha/apply/activity/tests/test_messaging.py @@ -337,7 +337,6 @@ class TestSlackAdapter(AdapterMixin, TestCase): token = 'fake-token' @override_settings( - SLACK_DESTINATION_URL=target_url, SLACK_ENDPOINT_URL=target_url, SLACK_DESTINATION_ROOM=None, SLACK_BACKEND=backend, @@ -351,7 +350,6 @@ class TestSlackAdapter(AdapterMixin, TestCase): self.assertEqual(messages, error_message) @override_settings( - SLACK_DESTINATION_URL=None, SLACK_ENDPOINT_URL=None, SLACK_DESTINATION_ROOM=target_room, SLACK_BACKEND=backend, @@ -365,7 +363,6 @@ class TestSlackAdapter(AdapterMixin, TestCase): self.assertEqual(messages, error_message) @override_settings( - SLACK_DESTINATION_URL=target_url, SLACK_ENDPOINT_URL=target_url, SLACK_DESTINATION_ROOM=target_room, SLACK_BACKEND=backend, @@ -379,7 +376,6 @@ class TestSlackAdapter(AdapterMixin, TestCase): self.assertEqual(messages, error_message) @override_settings( - SLACK_DESTINATION_URL=target_url, SLACK_ENDPOINT_URL=target_url, SLACK_DESTINATION_ROOM=target_room, SLACK_BACKEND=backend, @@ -398,7 +394,6 @@ class TestSlackAdapter(AdapterMixin, TestCase): self.assertEqual(message_payload['text'], message) @override_settings( - SLACK_DESTINATION_URL=target_url, SLACK_ENDPOINT_URL=target_url, SLACK_DESTINATION_ROOM=target_room, SLACK_BACKEND=backend, @@ -419,7 +414,6 @@ class TestSlackAdapter(AdapterMixin, TestCase): self.assertEqual(message_payload['channel'], '#dummy') @override_settings( - SLACK_DESTINATION_URL=target_url, SLACK_ENDPOINT_URL=target_url, SLACK_DESTINATION_ROOM=target_room, SLACK_BACKEND=backend, @@ -452,7 +446,6 @@ class TestSlackAdapter(AdapterMixin, TestCase): self.assertTrue(submission.lead.slack in recipients[0]) @override_settings( - SLACK_DESTINATION_URL=target_url, SLACK_ENDPOINT_URL=target_url, SLACK_DESTINATION_ROOM=target_room, SLACK_BACKEND=backend, @@ -467,7 +460,6 @@ class TestSlackAdapter(AdapterMixin, TestCase): self.assertEqual(sent_message.status, '200: OK') @override_settings( - SLACK_DESTINATION_URL=target_url, SLACK_ENDPOINT_URL=target_url, SLACK_DESTINATION_ROOM=target_room, SLACK_BACKEND=backend, @@ -662,7 +654,7 @@ class TestAdaptersForProject(AdapterMixin, TestCase): self.assertEqual(project.submission, activity.related_object) @override_settings( - SLACK_DESTINATION_URL=target_url, + SLACK_ENDPOINT_URL=target_url, SLACK_DESTINATION_ROOM=target_room, SLACK_BACKEND=backend, SLACK_TOKEN=token, @@ -681,11 +673,12 @@ class TestAdaptersForProject(AdapterMixin, TestCase): ) messages = backend.retrieve_messages() self.assertEqual(len(messages), 1) - self.assertIn(str(user), messages[0]['text']) - self.assertIn(str(project), messages[0]['text']) + message_payload = json.loads(messages[0]['payload']) + self.assertIn(str(user), message_payload['text']) + self.assertIn(str(project), message_payload['text']) @override_settings( - SLACK_DESTINATION_URL=target_url, + SLACK_ENDPOINT_URL=target_url, SLACK_DESTINATION_ROOM=target_room, SLACK_BACKEND=backend, SLACK_TOKEN=token, @@ -704,11 +697,12 @@ class TestAdaptersForProject(AdapterMixin, TestCase): ) messages = backend.retrieve_messages() self.assertEqual(len(messages), 1) - self.assertIn(str(user), messages[0]['text']) - self.assertIn(str(project), messages[0]['text']) + message_payload = json.loads(messages[0]['payload']) + self.assertIn(str(user), message_payload['text']) + self.assertIn(str(project), message_payload['text']) @override_settings( - SLACK_DESTINATION_URL=target_url, + SLACK_ENDPOINT_URL=target_url, SLACK_DESTINATION_ROOM=target_room, SLACK_BACKEND=backend, SLACK_TOKEN=token, @@ -730,11 +724,12 @@ class TestAdaptersForProject(AdapterMixin, TestCase): messages = backend.retrieve_messages() self.assertEqual(len(messages), 1) - self.assertIn(str(applicant), messages[0]['text']) - self.assertIn(str(project), messages[0]['text']) + message_payload = json.loads(messages[0]['payload']) + self.assertIn(str(applicant), message_payload['text']) + self.assertIn(str(project), message_payload['text']) @override_settings( - SLACK_DESTINATION_URL=target_url, + SLACK_ENDPOINT_URL=target_url, SLACK_DESTINATION_ROOM=target_room, SLACK_BACKEND=backend, SLACK_TOKEN=token, diff --git a/hypha/apply/utils/notifications.py b/hypha/apply/utils/notifications.py index 13e403e4b1800de4ea94de5e90580cdcdbaf2e30..8b6930af1cf1e7004055709910b3726915c729aa 100644 --- a/hypha/apply/utils/notifications.py +++ b/hypha/apply/utils/notifications.py @@ -1,11 +1,15 @@ -import requests +import logging + from django.conf import settings +from django_slack import slack_message + +logger = logging.getLogger(__name__) class SlackNotifications(): def __init__(self): - self.destination = settings.SLACK_DESTINATION_URL + self.destination = settings.SLACK_ENDPOINT_URL self.target_room = settings.SLACK_DESTINATION_ROOM def __call__(self, *args, recipients=None, related=None, **kwargs): @@ -29,12 +33,14 @@ class SlackNotifications(): return f'<{link}|{title}>' def send_message(self, message, request, recipients=None, related=None, **kwargs): - if not self.destination or not self.target_room: + if not self.destination or not self.target_room or not settings.SLACK_TOKEN: errors = list() if not self.destination: errors.append('Destination URL') if not self.target_room: errors.append('Room ID') + if not settings.SLACK_TOKEN: + errors.append('Slack Token') return 'Missing configuration: {}'.format(', '.join(errors)) slack_users = self.slack_users(recipients) if recipients else '' @@ -44,12 +50,14 @@ class SlackNotifications(): message = ' '.join([slack_users, message, slack_link]).strip() data = { - "room": self.target_room, "message": message, } - response = requests.post(self.destination, json=data) - - return str(response.status_code) + ': ' + response.content.decode() + try: + slack_message('messages/slack_message.html', data, channel=self.target_room) + return '200: OK' + except Exception as e: + logger.exception(e) + return '400: Bad Request' slack_notify = SlackNotifications() diff --git a/hypha/settings/base.py b/hypha/settings/base.py index 7bfb68a5c14b99eacc6121c10da0b24d39e705fd..ba35678a1a8997b1d9e60328d09b65fef8140fa3 100644 --- a/hypha/settings/base.py +++ b/hypha/settings/base.py @@ -520,17 +520,16 @@ if not SEND_MESSAGES: SEND_READY_FOR_REVIEW = env.bool('SEND_READY_FOR_REVIEW', True) -SLACK_DESTINATION_URL = env.str('SLACK_DESTINATION_URL', None) -SLACK_DESTINATION_ROOM = env.str('SLACK_DESTINATION_ROOM', None) -SLACK_DESTINATION_ROOM_COMMENTS = env.str('SLACK_DESTINATION_ROOM_COMMENTS', None) -SLACK_TYPE_COMMENTS = env.list('SLACK_TYPE_COMMENTS', []) - # Django Slack settings SLACK_TOKEN = env.str('SLACK_TOKEN', None) SLACK_USERNAME = env.str('SLACK_USERNAME', 'bot') SLACK_BACKEND = 'django_slack.backends.CeleryBackend' # UrllibBackend can be used for sync -if SLACK_DESTINATION_URL: - SLACK_ENDPOINT_URL = SLACK_DESTINATION_URL +SLACK_ENDPOINT_URL = env.str('SLACK_ENDPOINT_URL', None) + +# Slack settings +SLACK_DESTINATION_ROOM = env.str('SLACK_DESTINATION_ROOM', None) +SLACK_DESTINATION_ROOM_COMMENTS = env.str('SLACK_DESTINATION_ROOM_COMMENTS', None) +SLACK_TYPE_COMMENTS = env.list('SLACK_TYPE_COMMENTS', []) # Automatic transition settings TRANSITION_AFTER_REVIEWS = env.bool('TRANSITION_AFTER_REVIEWS', False)