Source code for cybsi.api.observation.dns_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 DNSLookupObservationsAPI(BaseAPI): """DNS Lookup API.""" _path = "/enrichment/observations/dns-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["DNSLookupObservationView"]: """Get page of filtered DNS lookups. Page's items are sorted in descending order of lookup time. Note: Calls `GET /enrichment/observations/dns-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 DNS 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, DNSLookupObservationView) return page
[docs] def view(self, observation_uuid: UUID) -> "DNSLookupObservationView": """Get the DNS lookup view. Note: Calls `GET /enrichment/observations/dns-lookups/{observation_uuid}`. Args: observation_uuid: Observation uuid. Returns: View of the observation. Raises: :class:`~cybsi.api.error.NotFoundError`: DNS Lookup not found. """ path = f"{self._path}/{observation_uuid}" r = self._connector.do_get(path) return DNSLookupObservationView(r.json())
[docs] class DNSLookupObservationView(ObservationHeaderView): """DNS Lookup view, as retrieved by :meth:`DNSLookupObservationsAPI.view`.""" @property def content(self) -> "DNSLookupObservationContentView": """Content.""" return DNSLookupObservationContentView(self._get("content"))
[docs] class DNSLookupObservationContentView(JsonObjectView): """DNS lookup content. TODO: Implement properties. """