def get_action(self, **kwargs): client = ActionsClient(self.username, self.apikey) keys = ['query', 'tags', 'classification', 'monitor', 'sinkhole', 'dynamic_dns', 'ever_compromised', 'metadata'] params = self._cleanup_params(keys, **kwargs) res = None if params.get('tags'): params['tags'] = [tag.strip() for tag in params['tags'].split(',')] if kwargs.get('add_tags'): res = client.add_tags(**params) elif kwargs.get('remove_tags'): res = client.remove_tags(**params) elif kwargs.get('set_tags'): res = client.set_tags(**params) else: self.stoq.log.error("No tags provided.") if params.get('classification'): res = client.set_classification_status(**params) if params.get('monitor'): params['status'] = to_bool(params['monitor']) res = client.set_monitor_status(**params) if params.get('sinkhole'): params['status'] = to_bool(params['sinkhole']) res = client.set_sinkhole_status(**params) if params.get('dynamic_dns'): params['status'] = to_bool(params['dynamic_dns']) res = client.set_dynamic_dns_status(**params) if params.get('ever_compromised'): params['status'] = to_bool(params['ever_compromised']) res = client.set_ever_compromised_status(**params) if params.get('metadata'): res = client.get_metadata(**params) return res
def get_action(self, **kwargs): client = ActionsClient(self.username, self.apikey) keys = ['query', 'tags', 'classification', 'monitor', 'sinkhole', 'dynamic_dns', 'ever_compromised', 'metadata'] params = self._cleanup_params(keys, **kwargs) res = None if params.get('tags'): params['tags'] = [tag.strip() for tag in params['tags'].split(',')] if kwargs.get('add_tags'): res = client.add_tags(**params) elif kwargs.get('remove_tags'): res = client.remove_tags(**params) elif kwargs.get('set_tags'): res = client.set_tags(**params) else: self.log.error("No tags provided.") if params.get('classification'): res = client.set_classification_status(**params) if params.get('monitor'): params['status'] = to_bool(params['monitor']) res = client.set_monitor_status(**params) if params.get('sinkhole'): params['status'] = to_bool(params['sinkhole']) res = client.set_sinkhole_status(**params) if params.get('dynamic_dns'): params['status'] = to_bool(params['dynamic_dns']) res = client.set_dynamic_dns_status(**params) if params.get('ever_compromised'): params['status'] = to_bool(params['ever_compromised']) res = client.set_ever_compromised_status(**params) if params.get('metadata'): res = client.get_metadata(**params) return res
class ActionsTestCase(unittest.TestCase): """Test case for action methods.""" def setup_class(self): self.patch_get = patch('passivetotal.api.Client._get', fake_request) self.patch_set = patch('passivetotal.api.Client._send_data', fake_request) self.patch_get.start() self.patch_set.start() self.client = ActionsClient('--No-User--', '--No-Key--') def teardown_class(self): self.patch_get.stop() self.patch_set.stop() def test_dynamic_dns(self): """Test various actions for dynamic DNS.""" payload = {'query': 'passivetotal.org'} response = self.client.get_dynamic_dns_status(**payload) assert not (response['dynamicDns']) payload = {'query': 'passivetotal.org', 'status': 'false'} response = self.client.set_dynamic_dns_status(**payload) assert not (response['dynamicDns']) with pytest.raises(MISSING_FIELD) as excinfo: def missing_field(): payload = {'query': 'passivetotal.org', 'no-status': 'false'} self.client.set_dynamic_dns_status(**payload) missing_field() assert 'field is required' in str(excinfo.value) def test_sinkhole(self): """Test various actions for sinkhole.""" payload = {'query': 'passivetotal.org'} response = self.client.get_sinkhole_status(**payload) assert not (response['sinkhole']) payload = {'query': 'passivetotal.org', 'status': 'false'} response = self.client.set_sinkhole_status(**payload) assert not (response['sinkhole']) with pytest.raises(MISSING_FIELD) as excinfo: def missing_field(): payload = {'query': 'passivetotal.org', 'no-status': 'false'} self.client.set_sinkhole_status(**payload) missing_field() assert 'field is required' in str(excinfo.value) def test_ever_compromised(self): """Test various actions for ever compromised.""" payload = {'query': 'passivetotal.org'} response = self.client.get_ever_compromised_status(**payload) assert not (response['everCompromised']) payload = {'query': 'passivetotal.org', 'status': 'false'} response = self.client.set_ever_compromised_status(**payload) assert not (response['everCompromised']) with pytest.raises(MISSING_FIELD) as excinfo: def missing_field(): payload = {'query': 'passivetotal.org', 'no-status': 'false'} self.client.set_ever_compromised_status(**payload) missing_field() assert 'field is required' in str(excinfo.value) def test_monitor(self): """Test various actions for monitors.""" payload = {'query': 'passivetotal.org'} response = self.client.get_monitor_status(**payload) assert not (response['monitor']) payload = {'query': 'passivetotal.org', 'status': 'false'} response = self.client.set_monitor_status(**payload) assert not (response['monitor']) with pytest.raises(MISSING_FIELD) as excinfo: def missing_field(): payload = {'query': 'passivetotal.org', 'no-status': 'false'} self.client.set_monitor_status(**payload) missing_field() assert 'field is required' in str(excinfo.value) def test_classification(self): """Test various actions for classifications.""" payload = {'query': 'passivetotal.org'} response = self.client.get_classification_status(**payload) assert (response['classification']) == 'non-malicious' payload = {'query': 'passivetotal.org', 'classification': 'non-malicious'} response = self.client.set_classification_status(**payload) assert (response['classification']) == 'non-malicious' with pytest.raises(MISSING_FIELD) as excinfo: def missing_field(): payload = {'query': 'passivetotal.org', 'no-classification': 'unknown'} self.client.set_classification_status(**payload) missing_field() assert 'field is required' in str(excinfo.value) with pytest.raises(INVALID_VALUE_TYPE) as excinfo: def invalid_field(): payload = {'query': 'passivetotal.org', 'classification': '_'} self.client.set_classification_status(**payload) invalid_field() assert 'must be one of the following' in str(excinfo.value) def test_tags(self): """Test various actions for tags.""" payload = {'query': 'passivetotal.org'} response = self.client.get_tags(**payload) assert (response['tags']) assert ('security' in response['tags']) payload = {'query': 'passivetotal.org', 'tags': 'vendor,security'} response = self.client.add_tags(**payload) assert (response['tags']) response = self.client.remove_tags(**payload) assert (response['tags']) response = self.client.set_tags(**payload) assert (response['tags']) with pytest.raises(INVALID_VALUE_TYPE) as excinfo: def invalid_field(): payload = {'query': 'passivetotal.org', 'tags': {}} self.client.add_tags(**payload) invalid_field() assert 'must be a list' in str(excinfo.value)