Source code for cybsi.api.observation.whois_lookup
from typing import Any, Dict, Iterable, Optional
from uuid import UUID
from ..internal import BaseAPI, JsonObjectView
from ..pagination import Cursor, Page
from .view import ObservationHeaderView
[docs]
class WhoisLookupObservationsAPI(BaseAPI):
"""Whois Lookup API."""
_path = "/enrichment/observations/whois-lookups"
[docs]
def filter(
self,
*,
entity_uuid: Optional[UUID] = None,
data_source_uuids: Optional[Iterable[UUID]] = None,
reporter_uuids: Optional[Iterable[UUID]] = None,
cursor: Optional[Cursor] = None,
limit: Optional[int] = None,
) -> Page["WhoisLookupObservationView"]:
"""Get page of filtered whois lookups.
Page's items are sorted in descending order of lookup time.
Note:
Calls `GET /enrichment/observations/whois-lookups`
Args:
entity_uuid: Entity identifier.
Filter lookups of specified DomainName/IPAddress entity.
data_source_uuids: List of data source identifiers.
Filter lookups by original data source identifiers.
reporter_uuids: List of reporter identifiers.
Filter lookups by reporter data source identifiers.
cursor: Page cursor.
limit: Page limit.
Returns:
Page of Whois lookups list and next page cursor.
Raises:
:class:`~cybsi.api.error.SemanticError`: query arguments contain errors.
Note:
Semantic error codes specific for this method:
* :attr:`~cybsi.api.error.SemanticErrorCodes.DataSourceNotFound`
* :attr:`~cybsi.api.error.SemanticErrorCodes.EntityNotFound`
"""
params: Dict[str, Any] = {}
if data_source_uuids is not None:
params["dataSourceUUID"] = [str(u) for u in data_source_uuids]
if reporter_uuids is not None:
params["reporterUUID"] = [str(u) for u in reporter_uuids]
if entity_uuid is not None:
params["entityUUID"] = str(entity_uuid)
if cursor:
params["cursor"] = str(cursor)
if limit:
params["limit"] = str(limit)
resp = self._connector.do_get(self._path, params=params)
page = Page(self._connector.do_get, resp, WhoisLookupObservationView)
return page
[docs]
def view(self, observation_uuid: UUID) -> "WhoisLookupObservationView":
"""Get the Whois lookup view.
Note:
Calls `GET /enrichment/observations/whois-lookups/{observation_uuid}`.
Args:
observation_uuid: Observation uuid.
Returns:
View of the observation.
Raises:
:class:`~cybsi.api.error.NotFoundError`: Whois Lookup not found.
"""
path = f"{self._path}/{observation_uuid}"
r = self._connector.do_get(path)
return WhoisLookupObservationView(r.json())
[docs]
class WhoisLookupObservationView(ObservationHeaderView):
"""Whois Lookup view,
as retrieved by :meth:`WhoisLookupObservationsAPI.view`."""
@property
def content(self) -> "WhoisLookupObservationContentView":
"""Content."""
return WhoisLookupObservationContentView(self._get("content"))
[docs]
class WhoisLookupObservationContentView(JsonObjectView):
"""Whois lookup content.
TODO:
Implement properties.
"""