def setup(self):
     """Setup before each method"""
     self._dispatcher = PagerDutyIncidentOutput(REGION, ACCOUNT_ID, FUNCTION_NAME, CONFIG)
     self._dispatcher._base_url = self.CREDS['api']
     remove_temp_secrets()
     output_name = self._dispatcher.output_cred_name(self.DESCRIPTOR)
     put_mock_creds(output_name, self.CREDS, self._dispatcher.secrets_bucket, REGION, KMS_ALIAS)
예제 #2
0
 def setup(self):
     """Setup before each method"""
     self._dispatcher = PagerDutyOutput(REGION, FUNCTION_NAME, CONFIG)
     remove_temp_secrets()
     output_name = self._dispatcher.output_cred_name(self.DESCRIPTOR)
     put_mock_creds(output_name, self.CREDS,
                    self._dispatcher.secrets_bucket, REGION, KMS_ALIAS)
예제 #3
0
 def setup(self):
     """Setup before each method"""
     self._dispatcher = SlackOutput(REGION, ACCOUNT_ID, FUNCTION_NAME, None)
     remove_temp_secrets()
     output_name = self._dispatcher.output_cred_name(self.DESCRIPTOR)
     put_mock_creds(output_name, self.CREDS,
                    self._dispatcher.secrets_bucket, REGION, KMS_ALIAS)
예제 #4
0
 def setup(self):
     """Setup before each method"""
     self._mock_s3 = mock_s3()
     self._mock_s3.start()
     self._mock_kms = mock_kms()
     self._mock_kms.start()
     self._dispatcher = PagerDutyOutputV2(REGION, ACCOUNT_ID, FUNCTION_NAME, None)
     remove_temp_secrets()
     output_name = self._dispatcher.output_cred_name(self.DESCRIPTOR)
     put_mock_creds(output_name, self.CREDS, self._dispatcher.secrets_bucket, REGION, KMS_ALIAS)
예제 #5
0
    def _setup_dispatch(self):
        """Helper for setting up SlackOutput dispatch"""
        remove_temp_secrets()

        output_name = self.__dispatcher.output_cred_name(self.__descriptor)

        creds = {'url': 'https://api.slack.com/web-hook-key'}

        put_mock_creds(output_name, creds, self.__dispatcher.secrets_bucket,
                       REGION, KMS_ALIAS)

        return get_alert()
예제 #6
0
    def _setup_dispatch(self, url):
        """Helper for setting up PhantomOutput dispatch"""
        remove_temp_secrets()

        output_name = self.__dispatcher.output_cred_name(self.__descriptor)

        creds = {'url': url,
                 'ph_auth_token': 'mocked_auth_token'}

        put_mock_creds(output_name, creds, self.__dispatcher.secrets_bucket, REGION, KMS_ALIAS)

        return get_alert()
예제 #7
0
    def test_load_creds(self):
        """OutputDispatcher - Load Credentials"""
        remove_temp_secrets()
        output_name = self._dispatcher.output_cred_name(self._descriptor)

        creds = {'url': 'http://www.foo.bar/test', 'token': 'token_to_encrypt'}

        put_mock_creds(output_name, creds, self._dispatcher.secrets_bucket,
                       REGION, KMS_ALIAS)

        loaded_creds = self._dispatcher._load_creds(self._descriptor)

        assert_is_not_none(loaded_creds)
        assert_equal(len(loaded_creds), 2)
        assert_equal(loaded_creds['url'], u'http://www.foo.bar/test')
        assert_equal(loaded_creds['token'], u'token_to_encrypt')
예제 #8
0
    def _setup_dispatch(self):
        """Helper for setting up PagerDutyOutput dispatch"""
        remove_temp_secrets()

        # Cache the _get_default_properties and set it to return None
        self.__backup_method = self.__dispatcher._get_default_properties
        self.__dispatcher._get_default_properties = lambda: None

        output_name = self.__dispatcher.output_cred_name(self.__descriptor)

        creds = {'url': 'http://pagerduty.foo.bar/create_event.json',
                 'service_key': 'mocked_service_key'}

        put_mock_creds(output_name, creds, self.__dispatcher.secrets_bucket, REGION, KMS_ALIAS)

        return get_alert()
예제 #9
0
    def setup_outputs(self, alert):
        """Helper function to handler any output setup

        Args:
            alert (dict): The alert dictionary containing outputs the need mocking out
        """
        outputs = alert.get('outputs', [])
        # Patch the urllib2.urlopen event to override HTTPStatusCode, etc
        url_mock = Mock()
        patch('urllib2.urlopen', url_mock).start()
        for output in outputs:
            try:
                service, descriptor = output.split(':')
            except ValueError:
                LOGGER_CLI.error(
                    'Outputs should be declared in the format <SERVICE>:<DESCRIPTOR>')
                continue

            if service == 'aws-s3':
                bucket = self.outputs_config[service][descriptor]
                boto3.client('s3', region_name='us-east-1').create_bucket(Bucket=bucket)
            elif service == 'aws-lambda':
                lambda_function = self.outputs_config[service][descriptor]
                parts = lambda_function.split(':')
                if len(parts) == 2 or len(parts) == 8:
                    lambda_function = parts[-2]
                else:
                    lambda_function = parts[-1]
                helpers.create_lambda_function(lambda_function, 'us-east-1')
            elif service == 'pagerduty':
                output_name = '{}/{}'.format(service, descriptor)
                creds = {'service_key': '247b97499078a015cc6c586bc0a92de6'}
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       'us-east-1', self.kms_alias)

                # Set the patched urlopen.getcode return value to 200
                url_mock.return_value.getcode.return_value = 200
            elif service == 'phantom':
                output_name = '{}/{}'.format(service, descriptor)
                creds = {'ph_auth_token': '6c586bc047b9749a92de29078a015cc6',
                         'url': 'phantom.foo.bar'}
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       'us-east-1', self.kms_alias)

                # Set the patched urlopen.getcode return value to 200
                url_mock.return_value.getcode.return_value = 200
                # Phantom needs a container 'id' value in the http response
                url_mock.return_value.read.side_effect = ['{"count": 0, "data": []}',
                                                          '{"id": 1948}']
            elif service == 'slack':
                output_name = '{}/{}'.format(service, descriptor)
                creds = {'url': 'https://api.slack.com/web-hook-key'}
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       'us-east-1', self.kms_alias)

                # Set the patched urlopen.getcode return value to 200
                url_mock.return_value.getcode.return_value = 200
예제 #10
0
    def setup_outputs(self, alert):
        """Helper function to handler any output setup"""
        outputs = alert['metadata'].get('outputs', [])
        # Patch the urllib2.urlopen event to override HTTPStatusCode, etc
        url_mock = Mock()
        patch('urllib2.urlopen', url_mock).start()
        for output in outputs:
            try:
                service, descriptor = output.split(':')
            except ValueError:
                continue

            if service == 'aws-s3':
                bucket = self.outputs_config[service][descriptor]
                boto3.client(
                    's3', region_name='us-east-1').create_bucket(Bucket=bucket)
            elif service == 'aws-lambda':
                function = self.outputs_config[service][descriptor]
                parts = function.split(':')
                if len(parts) == 2 or len(parts) == 8:
                    function = parts[-2]
                else:
                    function = parts[-1]
                helpers.create_lambda_function(function, 'us-east-1')
            elif service == 'pagerduty':
                output_name = ('/').join([service, descriptor])
                creds = {'service_key': '247b97499078a015cc6c586bc0a92de6'}
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       'us-east-1', self.kms_alias)

                # Set the patched urlopen.getcode return value to 200
                url_mock.return_value.getcode.return_value = 200
            elif service == 'phantom':
                output_name = ('/').join([service, descriptor])
                creds = {
                    'ph_auth_token': '6c586bc047b9749a92de29078a015cc6',
                    'url': 'phantom.foo.bar'
                }
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       'us-east-1', self.kms_alias)

                # Set the patched urlopen.getcode return value to 200
                url_mock.return_value.getcode.return_value = 200
                # Phantom needs a container 'id' value in the http response
                url_mock.return_value.read.return_value = '{"id": 1948}'
            elif service == 'slack':
                output_name = ('/').join([service, descriptor])
                creds = {'url': 'https://api.slack.com/web-hook-key'}
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       'us-east-1', self.kms_alias)

                # Set the patched urlopen.getcode return value to 200
                url_mock.return_value.getcode.return_value = 200
예제 #11
0
    def setup_outputs(self, alert):
        """Helper function to handler any output setup

        Args:
            alert (Alert): The Alert instance containing outputs to be mocked out
        """
        # Patch requests.get and requests.post
        self._setup_api_mocks()

        alert_outputs = resources.get_required_outputs()
        alert_outputs.update(alert.outputs)

        for output in alert_outputs:
            try:
                service, descriptor = output.split(':')
            except ValueError:
                LOGGER_CLI.error(
                    'Outputs should be declared in the format <SERVICE>:<DESCRIPTOR>'
                )
                continue

            if service == 'aws-s3':
                bucket = self.outputs_config[service][descriptor]
                client = boto3.client('s3', region_name=self.region)
                try:
                    # Check if the bucket exists before creating it
                    client.head_bucket(Bucket=bucket)
                except ClientError:
                    client.create_bucket(Bucket=bucket)

            elif service == 'aws-firehose':
                stream_name = self.outputs_config[service][descriptor]
                helpers.create_delivery_stream(self.region, stream_name)

            elif service == 'aws-lambda':
                lambda_function = self.outputs_config[service][descriptor]
                parts = lambda_function.split(':')
                if len(parts) == 2 or len(parts) == 8:
                    lambda_function = parts[-2]
                else:
                    lambda_function = parts[-1]
                helpers.create_lambda_function(lambda_function, self.region)

            elif service == 'aws-sns':
                topic_name = self.outputs_config[service][descriptor]
                boto3.client(
                    'sns',
                    region_name=self.region).create_topic(Name=topic_name)

            elif service == 'aws-sqs':
                queue_name = self.outputs_config[service][descriptor]
                boto3.client(
                    'sqs',
                    region_name=self.region).create_queue(QueueName=queue_name)

            elif service == 'carbonblack':
                output_name = '{}/{}'.format(service, descriptor)
                creds = {
                    'token': 'e51273c7c8e0fd9fae431cc019ab244112345678',
                    'url': 'cb.foo.bar'
                }
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       self.region, self.kms_alias)

            elif service == 'komand':
                output_name = '{}/{}'.format(service, descriptor)
                creds = {
                    'komand_auth_token':
                    '00000000-0000-0000-0000-000000000000',
                    'url': 'komand.foo.bar'
                }
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       self.region, self.kms_alias)

            elif service == 'pagerduty':
                output_name = '{}/{}'.format(service, descriptor)
                creds = {'service_key': '247b97499078a015cc6c586bc0a92de6'}
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       self.region, self.kms_alias)

            elif service == 'pagerduty-v2':
                output_name = '{}/{}'.format(service, descriptor)
                creds = {'routing_key': '247b97499078a015cc6c586bc0a92de6'}
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       self.region, self.kms_alias)

            elif service == 'pagerduty-incident':
                output_name = '{}/{}'.format(service, descriptor)
                creds = {
                    'token': '247b97499078a015cc6c586bc0a92de6',
                    'service_name': '247b97499078a015cc6c586bc0a92de6',
                    'service_id': 'SERVICEID123',
                    'escalation_policy': '247b97499078a015cc6c586bc0a92de6',
                    'escalation_policy_id': 'POLICYID123',
                    'email_from': '*****@*****.**',
                    'integration_key': '247b97499078a015cc6c586bc0a92de6'
                }
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       'us-east-1', self.kms_alias)

            elif service == 'phantom':
                output_name = '{}/{}'.format(service, descriptor)
                creds = {
                    'ph_auth_token': '6c586bc047b9749a92de29078a015cc6',
                    'url': 'phantom.foo.bar'
                }
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       self.region, self.kms_alias)

            elif service == 'slack':
                output_name = '{}/{}'.format(service, descriptor)
                creds = {'url': 'https://api.slack.com/web-hook-key'}
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       self.region, self.kms_alias)

            elif service == 'jira':
                output_name = '{}/{}'.format(service, descriptor)
                creds = {
                    'username': '******',
                    'password': '******',
                    'url': 'jira.foo.bar',
                    'project_key': 'foobar',
                    'issue_type': 'Task',
                    'aggregate': 'no'
                }
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       'us-east-1', self.kms_alias)

            elif service == 'github':
                output_name = '{}/{}'.format(service, descriptor)
                creds = {
                    'username': '******',
                    'repository': 'github-user/github-repository',
                    'access_token': 'foobar',
                    'labels': 'test-label'
                }
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       'us-east-1', self.kms_alias)
예제 #12
0
파일: test.py 프로젝트: zackpar/streamalert
    def setup_outputs(self, alert):
        """Helper function to handler any output setup

        Args:
            alert (dict): The alert dictionary containing outputs the need mocking out
        """
        # Patch requests.get and requests.post
        self._setup_requests_mocks()

        for output in alert.get('outputs', []):
            try:
                service, descriptor = output.split(':')
            except ValueError:
                LOGGER_CLI.error(
                    'Outputs should be declared in the format <SERVICE>:<DESCRIPTOR>'
                )
                continue

            if service == 'aws-s3':
                bucket = self.outputs_config[service][descriptor]
                client = boto3.client('s3', region_name=self.region)
                try:
                    # Check if the bucket exists before creating it
                    client.head_bucket(Bucket=bucket)
                except ClientError:
                    client.create_bucket(Bucket=bucket)

            elif service == 'aws-firehose':
                stream_name = self.outputs_config[service][descriptor]
                helpers.create_delivery_stream(self.region, stream_name)

            elif service == 'aws-lambda':
                lambda_function = self.outputs_config[service][descriptor]
                parts = lambda_function.split(':')
                if len(parts) == 2 or len(parts) == 8:
                    lambda_function = parts[-2]
                else:
                    lambda_function = parts[-1]
                helpers.create_lambda_function(lambda_function, self.region)
            elif service == 'pagerduty':
                output_name = '{}/{}'.format(service, descriptor)
                creds = {'service_key': '247b97499078a015cc6c586bc0a92de6'}
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       self.region, self.kms_alias)

            elif service == 'pagerduty-v2':
                output_name = '{}/{}'.format(service, descriptor)
                creds = {'routing_key': '247b97499078a015cc6c586bc0a92de6'}
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       self.region, self.kms_alias)

            elif service == 'pagerduty-incident':
                output_name = '{}/{}'.format(service, descriptor)
                creds = {
                    'token': '247b97499078a015cc6c586bc0a92de6',
                    'service_name': '247b97499078a015cc6c586bc0a92de6',
                    'escalation_policy': '247b97499078a015cc6c586bc0a92de6',
                    'email_from': '*****@*****.**',
                    'integration_key': '247b97499078a015cc6c586bc0a92de6'
                }
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       'us-east-1', self.kms_alias)

            elif service == 'phantom':
                output_name = '{}/{}'.format(service, descriptor)
                creds = {
                    'ph_auth_token': '6c586bc047b9749a92de29078a015cc6',
                    'url': 'phantom.foo.bar'
                }
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       self.region, self.kms_alias)

            elif service == 'slack':
                output_name = '{}/{}'.format(service, descriptor)
                creds = {'url': 'https://api.slack.com/web-hook-key'}
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       self.region, self.kms_alias)

            elif service == 'jira':
                output_name = '{}/{}'.format(service, descriptor)
                creds = {
                    'username': '******',
                    'password': '******',
                    'url': 'jira.foo.bar',
                    'project_key': 'foobar',
                    'issue_type': 'Task',
                    'aggregate': 'no'
                }
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       'us-east-1', self.kms_alias)

            elif service == 'github':
                output_name = '{}/{}'.format(service, descriptor)
                creds = {
                    'username': '******',
                    'repository': 'github-user/github-repository',
                    'access_token': 'foobar',
                    'labels': 'test-label'
                }
                helpers.put_mock_creds(output_name, creds, self.secrets_bucket,
                                       'us-east-1', self.kms_alias)