o
    ɶdO                     @   s   d dl mZ d dlmZ d dlmZ d dlmZmZ d dlm	Z	 d dl
mZmZ d dlmZ d dlmZmZmZ d	d
lmZ edZG dd deZdS )    )absolute_import)requests)six)retrycircuit_breaker)
BaseClient)get_config_value_or_defaultvalidate_config)Signer)Sentinel#get_signer_from_authentication_typeAUTHENTICATION_TYPE_FIELD_NAME   ) threat_intelligence_type_mappingZMissingc                   @   s@   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dS )ThreatintelClienta  
    Use the Threat Intelligence API to search for information about known threat indicators, including suspicious IP addresses, domain names, and other digital fingerprints. Threat Intelligence is a managed database of curated threat intelligence that comes from first party Oracle security insights, open source feeds, and vendor-procured data. For more information, see the [Threat Intelligence documentation](/iaas/Content/threat-intel/home.htm).
    c              
   K   s  t ||dd d|v r|d }n"t|v rt|}nt|d |d |d |dt|d|dd	}d
|dddi |dd|dtj|dd}d|v rY|d|d< |ddu retj|d< d|v rp|d|d< t	d||t
fi || _|d| _|d| _dS )a  
        Creates a new service client

        :param dict config:
            Configuration keys and values as per `SDK and Tool Configuration <https://docs.cloud.oracle.com/Content/API/Concepts/sdkconfig.htm>`__.
            The :py:meth:`~oci.config.from_file` method can be used to load configuration from a file. Alternatively, a ``dict`` can be passed. You can validate_config
            the dict using :py:meth:`~oci.config.validate_config`

        :param str service_endpoint: (optional)
            The endpoint of the service to call using this client. For example ``https://iaas.us-ashburn-1.oraclecloud.com``. If this keyword argument is
            not provided then it will be derived using the region in the config parameter. You should only provide this keyword argument if you have an explicit
            need to specify a service endpoint.

        :param timeout: (optional)
            The connection and read timeouts for the client. The default values are connection timeout 10 seconds and read timeout 60 seconds. This keyword argument can be provided
            as a single float, in which case the value provided is used for both the read and connection timeouts, or as a tuple of two floats. If
            a tuple is provided then the first value is used as the connection timeout and the second value as the read timeout.
        :type timeout: float or tuple(float, float)

        :param signer: (optional)
            The signer to use when signing requests made by the service client. The default is to use a :py:class:`~oci.signer.Signer` based on the values
            provided in the config parameter.

            One use case for this parameter is for `Instance Principals authentication <https://docs.cloud.oracle.com/Content/Identity/Tasks/callingservicesfrominstances.htm>`__
            by passing an instance of :py:class:`~oci.auth.signers.InstancePrincipalsSecurityTokenSigner` as the value for this keyword argument
        :type signer: :py:class:`~oci.signer.AbstractBaseSigner`

        :param obj retry_strategy: (optional)
            A retry strategy to apply to all calls made by this service client (i.e. at the client level). There is no retry strategy applied by default.
            Retry strategies can also be applied at the operation level by passing a ``retry_strategy`` keyword argument as part of calling the operation.
            Any value provided at the operation level will override whatever is specified at the client level.

            This should be one of the strategies available in the :py:mod:`~oci.retry` module. A convenience :py:data:`~oci.retry.DEFAULT_RETRY_STRATEGY`
            is also available. The specifics of the default retry strategy are described `here <https://docs.oracle.com/en-us/iaas/tools/python/latest/sdk_behaviors/retries.html>`__.

        :param obj circuit_breaker_strategy: (optional)
            A circuit breaker strategy to apply to all calls made by this service client (i.e. at the client level).
            This client uses :py:data:`~oci.circuit_breaker.DEFAULT_CIRCUIT_BREAKER_STRATEGY` as default if no circuit breaker strategy is provided.
            The specifics of circuit breaker strategy are described `here <https://docs.oracle.com/en-us/iaas/tools/python/latest/sdk_behaviors/circuit_breakers.html>`__.

        :param function circuit_breaker_callback: (optional)
            Callback function to receive any exceptions triggerred by the circuit breaker.

        :param bool client_level_realm_specific_endpoint_template_enabled: (optional)
            A boolean flag to indicate whether or not this client should be created with realm specific endpoint template enabled or disable. By default, this will be set as None.

        :param allow_control_chars: (optional)
            allow_control_chars is a boolean to indicate whether or not this client should allow control characters in the response object. By default, the client will not
            allow control characters to be in the response object.
        signer)r   tenancyuserfingerprintZkey_filepass_phraseZkey_content)r   r   r   Zprivate_key_file_locationr   Zprivate_key_contentTservice_endpointz	/20220901z8https://api-threatintel.{region}.oci.{secondLevelDomain}skip_deserializationFcircuit_breaker_strategy5client_level_realm_specific_endpoint_template_enabled)Zregional_clientr   	base_pathZservice_endpoint_templateZ#service_endpoint_template_per_realmr   r   r   timeoutNallow_control_charsZthreatintelretry_strategycircuit_breaker_callback)r	   getr   r   r
   r   r   ZGLOBAL_CIRCUIT_BREAKER_STRATEGYZ DEFAULT_CIRCUIT_BREAKER_STRATEGYr   r   base_clientr   r   )selfconfigkwargsr   Zbase_client_init_kwargs r$   Nusr/lib/python3.10/site-packages/oci/threat_intelligence/threatintel_client.py__init__   s>   3





zThreatintelClient.__init__c                    s  ddg}d}d}d}d}g d  fdd	t |D }	|	r%td
|	d|i}
dd t |
D }
t |
D ]\}}|du sNt|t jrUt| dkrUtd|q8d|i}dd t |D }dd|	dt
d}dd t |D }| jj|	d| jd}|du rtj}|rt|tjs| j| || j |j| jj|||
||d|	d|||dS | jj|||
||d|	d|||d
S )a  
        Get detailed information about a threat indicator with a given identifier.


        :param str indicator_id: (required)
            The unique identifier (OCID) of the threat indicator.

        :param str compartment_id: (required)
            The OCID of the tenancy (root compartment) that is used to filter results.

        :param str opc_request_id: (optional)
            The client request ID for tracing.

        :param obj retry_strategy: (optional)
            A retry strategy to apply to this specific operation/call. This will override any retry strategy set at the client-level.

            This should be one of the strategies available in the :py:mod:`~oci.retry` module. This operation uses :py:data:`~oci.retry.DEFAULT_RETRY_STRATEGY` as default if no retry strategy is provided.
            The specifics of the default retry strategy are described `here <https://docs.oracle.com/en-us/iaas/tools/python/latest/sdk_behaviors/retries.html>`__.

            To have this operation explicitly not perform any retries, pass an instance of :py:class:`~oci.retry.NoneRetryStrategy`.

        :param bool allow_control_chars: (optional)
            allow_control_chars is a boolean to indicate whether or not this request should allow control characters in the response object.
            By default, the response will not allow control characters in strings

        :return: A :class:`~oci.response.Response` object with data of type :class:`~oci.threat_intelligence.models.Indicator`
        :rtype: :class:`~oci.response.Response`

        :example:
        Click `here <https://docs.cloud.oracle.com/en-us/iaas/tools/python-sdk-examples/latest/threatintelligence/get_indicator.py.html>`__ to see an example of how to use get_indicator API.
        ZindicatorIdcompartmentIdz/indicators/{indicatorId}GETget_indicatorzRhttps://docs.oracle.com/iaas/api/#/en/threat-intel/20220901/Indicator/GetIndicator)r   r   opc_request_idc                       g | ]}| vr|qS r$   r$   .0_keyZexpected_kwargsr$   r%   
<listcomp>       z3ThreatintelClient.get_indicator.<locals>.<listcomp>z&get_indicator got unknown kwargs: {!r}c                 S   s   i | ]\}}|t ur||qS r$   missingr-   kvr$   r$   r%   
<dictcomp>   s    z3ThreatintelClient.get_indicator.<locals>.<dictcomp>Nr   z7Parameter {} cannot be None, whitespace or empty stringc                 S   &   i | ]\}}|t ur|d ur||qS Nr2   r4   r$   r$   r%   r7         & application/jsonr*   acceptzcontent-typezopc-request-idc                 S   r8   r9   r2   r4   r$   r$   r%   r7      r:   r   Zoperation_retry_strategyZclient_retry_strategyZ	Indicatorr   )
resource_pathmethodpath_paramsquery_paramsheader_paramsresponse_typer   operation_nameapi_reference_linkrequired_arguments)r   iterkeys
ValueErrorformat	iteritems
isinstanceZstring_typeslenstripr   r3   r    get_preferred_retry_strategyr   r   DEFAULT_RETRY_STRATEGYNoneRetryStrategyadd_opc_client_retries_headeradd_circuit_breaker_callbackr   make_retrying_callcall_api)r!   Zindicator_idcompartment_idr#   rG   r?   r@   rE   rF   extra_kwargsrA   r5   r6   rB   rC   r   r$   r/   r%   r)   r   sz   !$
zThreatintelClient.get_indicatorc                    sZ  dg}d}d}d}d}g d  fddt |D }|r$td	|d
|v r9ddg}	|d
 |	vr9td|	||d
td}
dd t |
D }
dd|dtd}dd t |D }| jj|d| j	d}|du rst
j}|rt|t
js| j| || j |j| jj|||
|d|d|||d
S | jj|||
|d|d|||d	S )ac  
        Get the current count of each threat indicator type. Indicator counts can be sorted in ascending or descending order.


        :param str compartment_id: (required)
            The OCID of the tenancy (root compartment) that is used to filter results.

        :param str opc_request_id: (optional)
            The client request ID for tracing.

        :param str sort_order: (optional)
            The sort order to use, either 'ASC' or 'DESC'.

            Allowed values are: "ASC", "DESC"

        :param obj retry_strategy: (optional)
            A retry strategy to apply to this specific operation/call. This will override any retry strategy set at the client-level.

            This should be one of the strategies available in the :py:mod:`~oci.retry` module. This operation uses :py:data:`~oci.retry.DEFAULT_RETRY_STRATEGY` as default if no retry strategy is provided.
            The specifics of the default retry strategy are described `here <https://docs.oracle.com/en-us/iaas/tools/python/latest/sdk_behaviors/retries.html>`__.

            To have this operation explicitly not perform any retries, pass an instance of :py:class:`~oci.retry.NoneRetryStrategy`.

        :param bool allow_control_chars: (optional)
            allow_control_chars is a boolean to indicate whether or not this request should allow control characters in the response object.
            By default, the response will not allow control characters in strings

        :return: A :class:`~oci.response.Response` object with data of type :class:`~oci.threat_intelligence.models.IndicatorCountCollection`
        :rtype: :class:`~oci.response.Response`

        :example:
        Click `here <https://docs.cloud.oracle.com/en-us/iaas/tools/python-sdk-examples/latest/threatintelligence/list_indicator_counts.py.html>`__ to see an example of how to use list_indicator_counts API.
        r'   z/indicatorCountsr(   list_indicator_countszhhttps://docs.oracle.com/iaas/api/#/en/threat-intel/20220901/IndicatorCountCollection/ListIndicatorCounts)r   r   r*   
sort_orderc                    r+   r$   r$   r,   r/   r$   r%   r0     r1   z;ThreatintelClient.list_indicator_counts.<locals>.<listcomp>z.list_indicator_counts got unknown kwargs: {!r}rY   ASCDESC2Invalid value for `sort_order`, must be one of {0})r'   	sortOrderc                 S   r8   r9   r2   r4   r$   r$   r%   r7     r:   z;ThreatintelClient.list_indicator_counts.<locals>.<dictcomp>r;   r*   r<   c                 S   r8   r9   r2   r4   r$   r$   r%   r7   %  r:   r   r>   NZIndicatorCountCollectionr   	r?   r@   rB   rC   rD   r   rE   rF   rG   r   rH   rI   rJ   r   r3   rK   r    rO   r   r   rP   rL   rQ   rR   rS   r   rT   rU   r!   rV   r#   rG   r?   r@   rE   rF   rW   sort_order_allowed_valuesrB   rC   r   r$   r/   r%   rX      sv   #

z'ThreatintelClient.list_indicator_countsc                    s<  dg}d}d}d}d}g d  fddt |D }|r$td	|d
|v r9g d}	|d
 |	vr9td|	d|v rNddg}
|d |
vrNtd|
d|v rcg d}|d |vrctd||| j|dtd|d
t|dt|dt|dt|dt|dt|dt|dt|dt|dt|dt|dt|dtd }d!d" t |D }d#d#|d$td%}d&d" t |D }| jj	|d'| j
d(}|d)u rtj}|rt|tjs| j| || j |j| jj||||d*|d+|||d,
S | jj||||d*|d+|||d,	S )-a  
        Get a list of threat indicator summaries based on the search criteria.


        :param str compartment_id: (required)
            The OCID of the tenancy (root compartment) that is used to filter results.

        :param list[str] threat_type_name: (optional)
            The threat type of entites to be returned. To filter for multiple threat types, repeat this parameter.

        :param str type: (optional)
            The indicator type of entities to be returned.

            Allowed values are: "DOMAIN_NAME", "FILE_NAME", "MD5_HASH", "SHA1_HASH", "SHA256_HASH", "IP_ADDRESS", "URL"

        :param str value: (optional)
            The indicator value of entities to be returned.

        :param int confidence_greater_than_or_equal_to: (optional)
            The minimum confidence score of entities to be returned.

        :param datetime time_updated_greater_than_or_equal_to: (optional)
            The oldest update time of entities to be returned.

        :param datetime time_updated_less_than: (optional)
            Return indicators updated before the provided time.

        :param datetime time_last_seen_greater_than_or_equal_to: (optional)
            The oldest last seen time of entities to be returned.

        :param datetime time_last_seen_less_than: (optional)
            Return indicators last seen before the provided time.

        :param datetime time_created_greater_than_or_equal_to: (optional)
            The oldest created/first seen time of entities to be returned.

        :param datetime time_created_less_than: (optional)
            Return indicators created/first seen before the provided time.

        :param int limit: (optional)
            The maximum number of items to return.

        :param str page: (optional)
            A token representing the position at which to start retrieving results. This must come from the `opc-next-page` header field of a previous response.

        :param str sort_order: (optional)
            The sort order to use, either 'ASC' or 'DESC'.

            Allowed values are: "ASC", "DESC"

        :param str sort_by: (optional)
            The field to sort by. Only one field to sort by may be provided.

            Allowed values are: "confidence", "timeCreated", "timeUpdated", "timeLastSeen"

        :param str opc_request_id: (optional)
            The client request ID for tracing.

        :param obj retry_strategy: (optional)
            A retry strategy to apply to this specific operation/call. This will override any retry strategy set at the client-level.

            This should be one of the strategies available in the :py:mod:`~oci.retry` module. This operation uses :py:data:`~oci.retry.DEFAULT_RETRY_STRATEGY` as default if no retry strategy is provided.
            The specifics of the default retry strategy are described `here <https://docs.oracle.com/en-us/iaas/tools/python/latest/sdk_behaviors/retries.html>`__.

            To have this operation explicitly not perform any retries, pass an instance of :py:class:`~oci.retry.NoneRetryStrategy`.

        :param bool allow_control_chars: (optional)
            allow_control_chars is a boolean to indicate whether or not this request should allow control characters in the response object.
            By default, the response will not allow control characters in strings

        :return: A :class:`~oci.response.Response` object with data of type :class:`~oci.threat_intelligence.models.IndicatorSummaryCollection`
        :rtype: :class:`~oci.response.Response`

        :example:
        Click `here <https://docs.cloud.oracle.com/en-us/iaas/tools/python-sdk-examples/latest/threatintelligence/list_indicators.py.html>`__ to see an example of how to use list_indicators API.
        r'   z/indicatorsr(   list_indicatorszehttps://docs.oracle.com/iaas/api/#/en/threat-intel/20220901/IndicatorSummaryCollection/ListIndicators)r   r   threat_type_nametypevalue#confidence_greater_than_or_equal_to%time_updated_greater_than_or_equal_totime_updated_less_than'time_last_seen_greater_than_or_equal_totime_last_seen_less_than%time_created_greater_than_or_equal_totime_created_less_thanlimitpagerY   sort_byr*   c                    r+   r$   r$   r,   r/   r$   r%   r0     r1   z5ThreatintelClient.list_indicators.<locals>.<listcomp>z(list_indicators got unknown kwargs: {!r}rd   )ZDOMAIN_NAMEZ	FILE_NAMEZMD5_HASHZ	SHA1_HASHZSHA256_HASHZ
IP_ADDRESSURLz,Invalid value for `type`, must be one of {0}rY   rZ   r[   r\   ro   )Z
confidenceZtimeCreatedZtimeUpdatedZtimeLastSeenz/Invalid value for `sort_by`, must be one of {0}rc   Zmultire   rf   rg   rh   ri   rj   rk   rl   rm   rn   )r'   ZthreatTypeNamerd   re   ZconfidenceGreaterThanOrEqualToZtimeUpdatedGreaterThanOrEqualToZtimeUpdatedLessThanZ timeLastSeenGreaterThanOrEqualToZtimeLastSeenLessThanZtimeCreatedGreaterThanOrEqualToZtimeCreatedLessThanrm   rn   r]   ZsortByc                 S   r8   r9   r2   r4   r$   r$   r%   r7     r:   z5ThreatintelClient.list_indicators.<locals>.<dictcomp>r;   r*   r<   c                 S   r8   r9   r2   r4   r$   r$   r%   r7     r:   r   r>   NIndicatorSummaryCollectionr   r^   )r   rH   rI   rJ   r    Z generate_collection_format_paramr   r3   rK   rO   r   r   rP   rL   rQ   rR   rS   r   rT   rU   )r!   rV   r#   rG   r?   r@   rE   rF   rW   Ztype_allowed_valuesra   Zsort_by_allowed_valuesrB   rC   r   r$   r/   r%   rb   I  s   N













z!ThreatintelClient.list_indicatorsc                    sn  dg}d}d}d}d}g d  fddt |D }|r$td	|d
|v r9ddg}	|d
 |	vr9td|	||dt|dt|d
td}
dd t |
D }
dd|dtd}dd t |D }| jj|d| j	d}|du r}t
j}|rt|t
js| j| || j |j| jj|||
|d|d|||d
S | jj|||
|d|d|||d	S )a  
        Gets a list of threat types that are available to use as parameters when querying indicators.
        The list is sorted by threat type name according to the sort order query param.


        :param str compartment_id: (required)
            The OCID of the tenancy (root compartment) that is used to filter results.

        :param int limit: (optional)
            The maximum number of items to return.

        :param str page: (optional)
            A token representing the position at which to start retrieving results. This must come from the `opc-next-page` header field of a previous response.

        :param str sort_order: (optional)
            The sort order to use, either 'ASC' or 'DESC'.

            Allowed values are: "ASC", "DESC"

        :param str opc_request_id: (optional)
            The client request ID for tracing.

        :param obj retry_strategy: (optional)
            A retry strategy to apply to this specific operation/call. This will override any retry strategy set at the client-level.

            This should be one of the strategies available in the :py:mod:`~oci.retry` module. This operation uses :py:data:`~oci.retry.DEFAULT_RETRY_STRATEGY` as default if no retry strategy is provided.
            The specifics of the default retry strategy are described `here <https://docs.oracle.com/en-us/iaas/tools/python/latest/sdk_behaviors/retries.html>`__.

            To have this operation explicitly not perform any retries, pass an instance of :py:class:`~oci.retry.NoneRetryStrategy`.

        :param bool allow_control_chars: (optional)
            allow_control_chars is a boolean to indicate whether or not this request should allow control characters in the response object.
            By default, the response will not allow control characters in strings

        :return: A :class:`~oci.response.Response` object with data of type :class:`~oci.threat_intelligence.models.ThreatTypesCollection`
        :rtype: :class:`~oci.response.Response`

        :example:
        Click `here <https://docs.cloud.oracle.com/en-us/iaas/tools/python-sdk-examples/latest/threatintelligence/list_threat_types.py.html>`__ to see an example of how to use list_threat_types API.
        r'   z/threatTypesr(   list_threat_typeszahttps://docs.oracle.com/iaas/api/#/en/threat-intel/20220901/ThreatTypesCollection/ListThreatTypes)r   r   rm   rn   rY   r*   c                    r+   r$   r$   r,   r/   r$   r%   r0   @  r1   z7ThreatintelClient.list_threat_types.<locals>.<listcomp>z*list_threat_types got unknown kwargs: {!r}rY   rZ   r[   r\   rm   rn   )r'   rm   rn   r]   c                 S   r8   r9   r2   r4   r$   r$   r%   r7   R  r:   z7ThreatintelClient.list_threat_types.<locals>.<dictcomp>r;   r*   r<   c                 S   r8   r9   r2   r4   r$   r$   r%   r7   Y  r:   r   r>   NZThreatTypesCollectionr   r^   r_   r`   r$   r/   r%   rr     sz   *



z#ThreatintelClient.list_threat_typesc                    s>  dg}d}d}d}d}g d  fddt |D }	|	r$td	|	||d
t|dtd}
dd t |
D }
dd|dtd}dd t |D }| jj|d| j	d}|du rct
j}|rt|t
jsw| j| || j |j| jj|||
||d|d|||dS | jj|||
||d|d|||d
S )a\  
        Get indicator summaries based on advanced search criteria.


        :param str compartment_id: (required)
            The OCID of the tenancy (root compartment) that is used to filter results.

        :param oci.threat_intelligence.models.SummarizeIndicatorsDetails summarize_indicators_details: (required)
            Query Parameters to search for indicators.

        :param str opc_request_id: (optional)
            The client request ID for tracing.

        :param int limit: (optional)
            The maximum number of items to return.

        :param str page: (optional)
            A token representing the position at which to start retrieving results. This must come from the `opc-next-page` header field of a previous response.

        :param obj retry_strategy: (optional)
            A retry strategy to apply to this specific operation/call. This will override any retry strategy set at the client-level.

            This should be one of the strategies available in the :py:mod:`~oci.retry` module. This operation uses :py:data:`~oci.retry.DEFAULT_RETRY_STRATEGY` as default if no retry strategy is provided.
            The specifics of the default retry strategy are described `here <https://docs.oracle.com/en-us/iaas/tools/python/latest/sdk_behaviors/retries.html>`__.

            To have this operation explicitly not perform any retries, pass an instance of :py:class:`~oci.retry.NoneRetryStrategy`.

        :param bool allow_control_chars: (optional)
            allow_control_chars is a boolean to indicate whether or not this request should allow control characters in the response object.
            By default, the response will not allow control characters in strings

        :return: A :class:`~oci.response.Response` object with data of type :class:`~oci.threat_intelligence.models.IndicatorSummaryCollection`
        :rtype: :class:`~oci.response.Response`

        :example:
        Click `here <https://docs.cloud.oracle.com/en-us/iaas/tools/python-sdk-examples/latest/threatintelligence/summarize_indicators.py.html>`__ to see an example of how to use summarize_indicators API.
        r'   z/indicators/actions/summarizeZPOSTsummarize_indicatorszYhttps://docs.oracle.com/iaas/api/#/en/threat-intel/20220901/Indicator/SummarizeIndicators)r   r   r*   rm   rn   c                    r+   r$   r$   r,   r/   r$   r%   r0     r1   z:ThreatintelClient.summarize_indicators.<locals>.<listcomp>z-summarize_indicators got unknown kwargs: {!r}rm   rn   )r'   rm   rn   c                 S   r8   r9   r2   r4   r$   r$   r%   r7     r:   z:ThreatintelClient.summarize_indicators.<locals>.<dictcomp>r;   r*   r<   c                 S   r8   r9   r2   r4   r$   r$   r%   r7     r:   r   r>   Nrq   r   )
r?   r@   rB   rC   bodyrD   r   rE   rF   rG   r_   )r!   rV   Zsummarize_indicators_detailsr#   rG   r?   r@   rE   rF   rW   rB   rC   r   r$   r/   r%   rs   }  sp   '


z&ThreatintelClient.summarize_indicatorsN)
__name__
__module____qualname____doc__r&   r)   rX   rb   rr   rs   r$   r$   r$   r%   r      s    Xlk ?vr   N)
__future__r   Zoci._vendorr   r   ocir   r   Zoci.base_clientr   Z
oci.configr   r	   Z
oci.signerr
   Zoci.utilr   r   r   Zmodelsr   r3   objectr   r$   r$   r$   r%   <module>   s   