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
Example #3
0
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)