def get_email_to_addrs_to_resources_map(self, queue_message):
        email_to_addrs_to_resources_map = {}
        targets = queue_message['action']['to']

        for resource in queue_message['resources']:
            # this is the list of emails that will be sent for this resource
            resource_emails = []

            for target in targets:
                if target.startswith('tag:') and 'tags' in resource:
                    tag_name = target.split(':', 1)[1]
                    result = resource.get('tags', {}).get(tag_name, None)
                    if is_email(result):
                        resource_emails.append(result)
                elif is_email(target):
                    resource_emails.append(target)

            resource_emails = tuple(sorted(set(resource_emails)))

            if resource_emails:
                email_to_addrs_to_resources_map.setdefault(resource_emails, []).append(resource)

        if email_to_addrs_to_resources_map == {}:
            self.logger.debug('Found no email addresses, sending no emails.')
        # eg: { ('*****@*****.**', '*****@*****.**'): [resource1, resource2, etc] }
        return email_to_addrs_to_resources_map
Ejemplo n.º 2
0
 def get_event_owner_email(self, targets, event):
     if 'event-owner' in targets:
         aws_username = self.get_aws_username_from_event(event)
         if aws_username:
             # is using SSO, the target might already be an email
             if is_email(aws_username):
                 return [aws_username]
             # if the LDAP config is set, lookup in ldap
             elif self.config.get('ldap_uri', False):
                 return self.ldap_lookup.get_email_to_addrs_from_uid(aws_username)
             # the org_domain setting is configured, append the org_domain
             # to the username from AWS
             elif self.config.get('org_domain', False):
                 org_domain = self.config.get('org_domain', False)
                 self.logger.info('adding email %s to targets.', aws_username + '@' + org_domain)
                 return [aws_username + '@' + org_domain]
             else:
                 self.logger.warning('unable to lookup owner email. \
                         Please configure LDAP or org_domain')
         else:
             self.logger.info('no aws username in event')
     return []
Ejemplo n.º 3
0
 def get_event_owner_email(self, targets, event):
     if 'event-owner' in targets:
         aws_username = self.get_aws_username_from_event(event)
         if aws_username:
             # is using SSO, the target might already be an email
             if is_email(aws_username):
                 return [aws_username]
             # if the LDAP config is set, lookup in ldap
             elif self.config.get('ldap_uri', False):
                 return self.ldap_lookup.get_email_to_addrs_from_uid(
                     aws_username)
             # the org_domain setting is configured, append the org_domain
             # to the username from AWS
             elif self.config.get('org_domain', False):
                 org_domain = self.config.get('org_domain', False)
                 self.logger.info('adding email %s to targets.',
                                  aws_username + '@' + org_domain)
                 return [aws_username + '@' + org_domain]
             else:
                 self.logger.warning('unable to lookup owner email. \
                         Please configure LDAP or org_domain')
         else:
             self.logger.info('no aws username in event')
     return []
Ejemplo n.º 4
0
    def get_to_addrs_slack_messages_map(self, sqs_message):
        resource_list = []
        for resource in sqs_message['resources']:
            resource_list.append(resource)

        slack_messages = {}

        # Check for Slack targets in 'to' action and render appropriate template.
        for target in sqs_message.get('action', ()).get('to'):
            if target == 'slack://owners':
                to_addrs_to_resources_map = \
                    self.email_handler.get_email_to_addrs_to_resources_map(sqs_message)
                for to_addrs, resources in six.iteritems(
                        to_addrs_to_resources_map):

                    resolved_addrs = self.retrieve_user_im(list(to_addrs))

                    if not resolved_addrs:
                        continue

                    for address, slack_target in resolved_addrs.items():
                        slack_messages[address] = get_rendered_jinja(
                            slack_target, sqs_message, resources, self.logger,
                            'slack_template', 'slack_default',
                            self.config['templates_folders'])
                self.logger.debug(
                    "Generating messages for recipient list produced by resource owner resolution."
                )
            elif target.startswith('https://hooks.slack.com/'):
                slack_messages[target] = get_rendered_jinja(
                    target, sqs_message, resource_list, self.logger,
                    'slack_template', 'slack_default',
                    self.config['templates_folders'])
            elif target.startswith('slack://webhook/#') and self.config.get(
                    'slack_webhook'):
                webhook_target = self.config.get('slack_webhook')
                slack_messages[webhook_target] = get_rendered_jinja(
                    target.split('slack://webhook/#', 1)[1], sqs_message,
                    resource_list, self.logger, 'slack_template',
                    'slack_default', self.config['templates_folders'])
                self.logger.debug("Generating message for webhook %s." %
                                  self.config.get('slack_webhook'))
            elif target.startswith('slack://') and is_email(
                    target.split('slack://', 1)[1]):
                resolved_addrs = self.retrieve_user_im(
                    [target.split('slack://', 1)[1]])
                for address, slack_target in resolved_addrs.items():
                    slack_messages[address] = get_rendered_jinja(
                        slack_target, sqs_message, resource_list, self.logger,
                        'slack_template', 'slack_default',
                        self.config['templates_folders'])
            elif target.startswith('slack://#'):
                resolved_addrs = target.split('slack://#', 1)[1]
                slack_messages[resolved_addrs] = get_rendered_jinja(
                    resolved_addrs, sqs_message, resource_list, self.logger,
                    'slack_template', 'slack_default',
                    self.config['templates_folders'])
            elif target.startswith('slack://tag/') and 'tags' in resource:
                tag_name = target.split('tag/', 1)[1]
                result = resource.get('tags', {}).get(tag_name, None)
                resolved_addrs = result
                slack_messages[resolved_addrs] = get_rendered_jinja(
                    resolved_addrs, sqs_message, resource_list, self.logger,
                    'slack_template', 'slack_default',
                    self.config['templates_folders'])
                self.logger.debug(
                    "Generating message for specified Slack channel.")
        return slack_messages
Ejemplo n.º 5
0
 def test_valid_email(self):
     self.assertFalse(is_email('foobar'))
     self.assertFalse(is_email('foo@bar'))
     self.assertFalse(is_email('slack://[email protected]'))
     self.assertTrue(is_email('*****@*****.**'))
Ejemplo n.º 6
0
 def get_valid_emails_from_list(self, targets):
     emails = []
     for target in targets:
         if is_email(target):
             emails.append(target)
     return emails
Ejemplo n.º 7
0
 def get_valid_emails_from_list(self, targets):
     emails = []
     for target in targets:
         if is_email(target):
             emails.append(target)
     return emails
Ejemplo n.º 8
0
    def get_to_addrs_slack_messages_map(self, sqs_message):
        resource_list = []
        for resource in sqs_message['resources']:
            resource_list.append(resource)

        slack_messages = {}

        # Check for Slack targets in 'to' action and render appropriate template.
        for target in sqs_message.get('action', ()).get('to'):
            if target == 'slack://owners':
                to_addrs_to_resources_map = \
                    self.email_handler.get_email_to_addrs_to_resources_map(sqs_message)
                for to_addrs, resources in six.iteritems(to_addrs_to_resources_map):

                    resolved_addrs = self.retrieve_user_im(list(to_addrs))

                    if not resolved_addrs:
                        continue

                    for address, slack_target in resolved_addrs.items():
                        slack_messages[address] = get_rendered_jinja(
                            slack_target, sqs_message, resources,
                            self.logger, 'slack_template', 'slack_default',
                            self.config['templates_folders'])
                self.logger.debug(
                    "Generating messages for recipient list produced by resource owner resolution.")
            elif target.startswith('https://hooks.slack.com/'):
                slack_messages[target] = get_rendered_jinja(
                    target, sqs_message,
                    resource_list,
                    self.logger, 'slack_template', 'slack_default',
                    self.config['templates_folders'])
            elif target.startswith('slack://webhook/#') and self.config.get('slack_webhook'):
                webhook_target = self.config.get('slack_webhook')
                slack_messages[webhook_target] = get_rendered_jinja(
                    target.split('slack://webhook/#', 1)[1], sqs_message,
                    resource_list,
                    self.logger, 'slack_template', 'slack_default',
                    self.config['templates_folders'])
                self.logger.debug(
                    "Generating message for webhook %s." % self.config.get('slack_webhook'))
            elif target.startswith('slack://') and is_email(target.split('slack://', 1)[1]):
                resolved_addrs = self.retrieve_user_im([target.split('slack://', 1)[1]])
                for address, slack_target in resolved_addrs.items():
                    slack_messages[address] = get_rendered_jinja(
                        slack_target, sqs_message, resource_list,
                        self.logger, 'slack_template', 'slack_default',
                        self.config['templates_folders'])
            elif target.startswith('slack://#'):
                resolved_addrs = target.split('slack://#', 1)[1]
                slack_messages[resolved_addrs] = get_rendered_jinja(
                    resolved_addrs, sqs_message,
                    resource_list,
                    self.logger, 'slack_template', 'slack_default',
                    self.config['templates_folders'])
            elif target.startswith('slack://tag/') and 'tags' in resource:
                tag_name = target.split('tag/', 1)[1]
                result = resource.get('tags', {}).get(tag_name, None)
                resolved_addrs = result
                slack_messages[resolved_addrs] = get_rendered_jinja(
                    resolved_addrs, sqs_message,
                    resource_list,
                    self.logger, 'slack_template', 'slack_default',
                    self.config['templates_folders'])
                self.logger.debug("Generating message for specified Slack channel.")
        return slack_messages
Ejemplo n.º 9
0
 def test_valid_email(self):
     self.assertFalse(is_email('foobar'))
     self.assertFalse(is_email('foo@bar'))
     self.assertFalse(is_email('slack://[email protected]'))
     self.assertTrue(is_email('*****@*****.**'))