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)
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)
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()
def check_health(self): url = join_url(self.api_url, 'v2.0', 'ip') return self._get(url)
def get_auth0_response(self, observable): url = join_url(self.api_url, 'v2.0', 'ip', observable['value']) return self._get(url)