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)
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)
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)
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)
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()
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()
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')
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()
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
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
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)
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)