Esempio n. 1
0
    def refer_link(ui_url, observable):
        observable_type = observable['type']

        if observable_type == DOMAIN:
            return join_url(ui_url, f'/domain/{observable["value"]}/dns')

        if observable_type in (IP, IPV6):
            return join_url(ui_url, f'/list/ip/{observable["value"]}')
    def _request_farsight(self,
                          observable,
                          action,
                          number_of_days_to_filter=None,
                          limit=None):

        path = self._path(observable['type'])
        time_filter = self._time_filter(
            number_of_days_to_filter) if number_of_days_to_filter else ''

        url = join_url(self.base_url, action, path, observable["value"],
                       '?humantime=True&aggr=False',
                       f'&limit={limit}' if limit else '', time_filter)
        try:
            response = requests.get(url, headers=self.headers)
        except SSLError as error:
            raise FarsightSSLError(error)

        if response.status_code == HTTPStatus.FORBIDDEN:
            raise AuthorizationError(response.text)

        if response.ok:
            return [json.loads(raw) for raw in response.iter_lines()]

        if response.status_code in NOT_CRITICAL_ERRORS:
            return []

        raise CriticalFarsightResponseError(response)
Esempio n. 3
0
    def _request(self,
                 path,
                 method='GET',
                 body=None,
                 page=1,
                 data_extractor=lambda r: r.json()):
        params = {'page': page}
        url = join_url(self.base_url, path)

        try:
            response = requests.request(method,
                                        url,
                                        headers=self.headers,
                                        json=body,
                                        params=params)
        except SSLError as error:
            raise SecurityTrailsSSLError(error)

        # catch wrong API key
        if response.status_code == HTTPStatus.FORBIDDEN:
            raise AuthorizationError(response.json().get('message')
                                     or response.text)

        if response.ok:
            return data_extractor(response)

        if response.status_code in NOT_CRITICAL_ERRORS:
            return {}

        raise CriticalSecurityTrailsResponseError(response)
    def _request_chronicle(self,
                           path,
                           observable,
                           number_of_days_to_filter=None,
                           page_size=None):

        time_filter = (self._time_filter(number_of_days_to_filter)
                       if number_of_days_to_filter is not None else '')

        page_size_filter = ("&page_size=" +
                            str(page_size) if page_size is not None else '')

        url = join_url(
            self.base_url, f'{path}?{self._artifact_filter(observable)}'
            f'{time_filter}'
            f'{page_size_filter}')
        try:
            response, body = self.client.request(
                url,
                'GET',
                headers={
                    'Content-Type': 'application/json',
                    'Accept': 'application/json',
                    'User-Agent': current_app.config['USER_AGENT']
                })
        except SSLCertVerificationError as error:
            raise ChronicleSSLError(error)
        except tuple(EXPECTED_AUTH_ERRORS) as error:
            raise AuthorizationError(EXPECTED_AUTH_ERRORS[error.__class__])

        if response.status == HTTPStatus.OK:
            return json.loads(body)

        if response.status in NOT_CRITICAL_ERRORS:
            return {}

        raise UnexpectedChronicleResponseError(response, body)
Esempio n. 5
0
 def get_details_of_the_list(self, blocklist_type, blocklist_id):
     url = join_url(
         self.api_url, 'metadata', blocklist_type, 'lists', blocklist_id
     )
     response = requests.get(url, headers=self.headers)
     return response.json()
Esempio n. 6
0
 def check_health(self):
     url = join_url(self.api_url, 'v2.0', 'ip')
     return self._get(url)
Esempio n. 7
0
 def get_auth0_response(self, observable):
     url = join_url(self.api_url, 'v2.0', 'ip', observable['value'])
     return self._get(url)