示例#1
0
 def test_wrong_file(self):
     """Check if non existing json file was provided."""
     from umbr_api._key import get_key
     with self.assertRaises(SystemExit) as expected_exc:
         get_key(key=None, filename='unique12345.json')
         # check exit code
     self.assertEqual(expected_exc.exception.code, 2)
示例#2
0
文件: get.py 项目: fossabot/umbr_api
def get_list(page=1, limit=10, key=None):
    """Return response tuple as response to API call.

    Note:
        Up to 200 records can be returned by API.

    Args:
        page (int): Page # to request.
        limit (int): Limit number of records to request.
        key (str): API key, if not specify obtain via `key` module.

    Returns:
        Return ``requests.Response`` object.
        http://docs.python-requests.org/en/master/api/#requests.Response

    """
    assert isinstance(page, int)
    assert isinstance(limit, int)

    key = get_key(key=key)
    response = None

    api_uri = 'https://s-platform.api.opendns.com/1.0/' + \
              'domains?customerKey=' + key
    api_uri += '&page={0}&limit={1}'.format(page, limit)

    response = send_get(url=api_uri)

    format_response(response.status_code, json.loads(response.text))

    return response
示例#3
0
    def test_incorrect_json(self):
        """Check if incorrect json was provided."""
        import os.path
        from unittest import mock

        from umbr_api._key import get_key

        json_test_file = os.path.join(os.path.dirname(__file__), 'data',
                                      'customer_key_incorrect.json')

        with mock.patch('os.path.join') as mock_path_join:
            mock_path_join.return_value = json_test_file

            with self.assertRaises(SystemExit) as expected_exc:
                get_key(filename='customer_key_incorrect.json')
                # check exit code
            self.assertEqual(expected_exc.exception.code, 1)
示例#4
0
def add(domain=None, url=None, key=None, bypass=False):
    """Add domain name to block list."""
    assert domain and url
    assert isinstance(domain, str)
    assert isinstance(url, str)

    if domain != url:
        if url[0:7] == 'http://' or url[0:8] == 'https://':
            check_url = urlparse(url).hostname
        else:
            check_url = urlparse('http://' + url).hostname

        if domain != check_url:
            logger.warning('Domain name part from URL '
                           'doesn\'t match DNS domain name')
            logger.warning('DNS domain name: %s', domain)
            logger.warning('URL domain name: %s', check_url)

    key = get_key(key=key)
    response = None

    time_str = (datetime.utcnow()).isoformat(sep='T') + 'Z'
    api_uri = 'https://s-platform.api.opendns.com/1.0/events?customerKey=' + \
              key

    if bypass:
        bypass_str = 'true'
    else:
        bypass_str = 'false'

    block_request_txt = """
    {{
        "alertTime": "{alertTime}",
        "deviceId": "ba6a59f4-e692-4724-ba36-c28132a761de",
        "deviceVersion": "{deviceVersion}",
        "dstDomain": "{dstDomain}",
        "dstUrl": "{dstUrl}",
        "eventTime": "{eventTime}",
        "protocolVersion": "1.0a",
        "providerName": "Security Platform",
        "disableDstSafeguards": {disableDstSafeguards}
    }}""".format(alertTime=time_str,
                 deviceVersion=umbr_api.__version__,
                 dstDomain=domain,
                 dstUrl=url,
                 eventTime=time_str,
                 disableDstSafeguards=bypass_str)

    response = send_post(api_uri,
                         data=block_request_txt,
                         headers={'Content-Type': 'application/json'})
    format_response(response)

    return response
示例#5
0
def remove(record_id=None, key=None):
    """Remove a record from the policy."""
    key = get_key(key=key)
    response = None

    if record_id:
        api_uri = """https://s-platform.api.opendns.com/1.0/domains/""" + \
                  """{0}?customerKey={1}""".format(record_id, key)
        response = send_delete(api_uri, headers=APP_JSON)

    format_response(response)

    return response
示例#6
0
    def test_keyring_general(self):
        """Save a key in the keyring, read back and compare."""
        import keyring
        import umbr_api
        from umbr_api.umbrella import save_key
        from umbr_api._key import get_key

        # check existing key
        old_key = get_key(keyring.get_password('python', umbr_api.__title__))

        # save new test key
        code = save_key('YOUR-CUSTOMER-KEY-IS-HERE-0123456789')
        assert code == 0

        code = save_key(old_key)
        assert code == 0
示例#7
0
 def test_get_key_from_api_call(self):
     """Check if key returns."""
     from umbr_api._key import get_key
     assert get_key(key='123456789012345678901234567890123456') == \
         '123456789012345678901234567890123456'
示例#8
0
 def test_key_2(self):
     """Check reading from file if key=None."""
     from umbr_api._key import get_key
     assert get_key(key=None, filename='customer_key_example.json') == \
         'YOUR-CUSTOMER-KEY-IS-HERE-0123456789'
示例#9
0
 def test_key_length_2(self):
     """Check for a shorter key."""
     from umbr_api._key import get_key
     with self.assertRaises(SystemExit) as expected_exc:
         get_key(key='12345678901234567890123456789012345')
     self.assertEqual(expected_exc.exception.code, 1)
示例#10
0
 def test_key_incorrect_chars(self):
     """Check for incorrect chars in the key."""
     from umbr_api._key import get_key
     with self.assertRaises(SystemExit) as expected_exc:
         get_key(key='12345678901234567890123456789012345+')
     self.assertEqual(expected_exc.exception.code, 1)
示例#11
0
 def test_get_key_from_file(self):
     """Check if key will be read from the file."""
     from umbr_api._key import get_key
     assert get_key(filename='customer_key_example.json') == \
         'YOUR-CUSTOMER-KEY-IS-HERE-0123456789'