
    Vh$                         d dl mZmZmZ eZd dlZ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 d	d
dZd Zd Zd Zd Z G d de      Zy)    )absolute_importdivisionprint_functionN)copy)CertificateError)to_text)
ConnectionConnectionError)	iteritems)
quote_pluszapplication/jsonz9.1)zContent-TypeVersionc                 0   d}	 t        |       d}| D ]r  }||v s|rLt        ||         j                         t        |      j                         k(  sA|| j                  |      fc S ||   |k(  s_|| j                  |      fc S  y # t        $ r Y w xY w)NFT)r   	TypeErrorstripindex)	some_listkeyvalue	text_type	some_dicts        j/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/ibm/qradar/plugins/module_utils/qradar.pyfind_dict_in_listr      s    I	  A	)9S>*002gen6J6J6LL$iooi&@@@S>U*$iooi&@@@A   s   B	 		BBc           
         | j                   d   r|j                  dj                  t        dj                  | j                   d                           }|r|d   d   | j                   d<   n-| j	                  dj                  | j                   d                | j                   d   r+| j                   d   j                         | j                   d<   y y )	Nclosing_reasonz+api/siem/offense_closing_reasons?filter={0}z
text="{0}"r   idclosing_reason_idz'Unable to find closing_reason text: {0}status)paramsget_by_pathformatr   	fail_jsonupper)moduleqradar_requestfound_closing_reasons      r   set_offense_valuesr&   +   s    }}%&-999@@ ''6F(GH 
  1Ea1H1NFMM-.9@@MM"23 }}X"(--"9"?"?"Ah     c                     g }| D ]Z  }t        |      }t        |t              s|j                         D ]  }||vs|j	                  |        |j                  |       \ |r|S | S )zThe fn to remove the unsupported keys from payload
    :param payload: Payload from response
    :param supported_key_list: Module supported params
    :rtype: A dict
    :returns: payload with only supported and module expected params
    )r   
isinstancedictkeyspopappend)payloadsupported_key_listtemp_payloadeach	temp_dict	every_keys         r   )remove_unsupported_keys_from_payload_dictr4   A   su     L +J	dD!!YY[ -	$66MM),- 	*+ Nr'   c           
         t        | t              rt        |       D ]  \  }}t        |t              rt        |       "t        |t              s3i }|D ]  }t        |t              s|j                  d      s|j                  d      dk(  r|j                  d       dj                  |j                         D cg c]  }t        |       c}      }|j                  ||i       || |<     yyc c}w )zThe fn to convert list of dict to dict
    :param input_dict: input list having list of dict
    :rtype: A dict
    :returns: dict with converted all list to dict type
    r   r   _N)r)   r*   r   list_to_dictlistgetr,   joinvaluesstrupdate)
input_dictkvr2   r1   xeach_key_valuess          r   r7   r7   U   s     *d#j) 	2DAq!T"QAt$	 2D!$-88D>TXXd^q-@ HHTN*-((-1[[];SV;+ "((/4)@A(1
12	2 $ <s   :C1c                   Z    e Zd Z	 	 	 	 	 ddZddZd Zd Zd Zd Zd Z	d	 Z
dd
ZddZy)QRadarRequestNc                    || _         |r%t        | j                   j                        | _        nA|r?|| _        	 | j                  j	                  d       | j                  j                  |       |r|| _        ng | _        | j                  j                  d       |r|| _
        y t        | _
        y # t        $ r  w xY w)Nzibm.qradar.qradar)var_optionsvalidate_certs)r#   r	   _socket_path
connectionload_platform_pluginsset_optionsr
   not_rest_data_keysr-   BASE_HEADERSheaders)selfr#   rI   rN   rL   	task_varss         r   __init__zQRadarRequest.__init__m   s      ))A)ABDO(DO556IJ++	+B
 &8D#&(D#&&'78")w| # s   7B2 2B=c                    d}i }	 | j                   j                  |||| j                        \  }}|dk(  rat        d      t        |      v s,t        d	      t        |      v st        d
      t        |      v ri S t        d      t        |d         v r|i fS |dk(  r=d|v r5|d   dv r|S | j                  j                  dj                  ||             ||fS |dk\  r|dk  s1	 | j                  j                  dj                  ||             ||fS ||fS # t        $ r6}| j                  j                  dj                  |             Y d }~!d }~wt        $ r6}| j                  j                  dj                  |             Y d }~^d }~wt        $ rG}	 | j                  j                  dj                  |             n# t        $ r Y nw xY wY d }~d }~ww xY w# t        $ r Y ||fS w xY w)Ni )r.   rN   zconnection error occurred: {0}msgzcertificate error occurred: {0}zcertificate not found: {0}i  zObject not foundzCould not find objectzNo offense was foundzThe rule does not exist.descriptioni  code)i  i  z2qradar httpapi returned error {0} with message {1}   i,  )rI   send_requestrN   r
   r#   r!   r    r   
ValueErrorAttributeErrorr   )rO   methodurir.   rV   responsees          r   _httpapi_error_handlez#QRadarRequest._httpapi_error_handle   s6    	!__99	 : ND(, 3;*+wx/@@23wx7HH12gh6GG	12g'7  Rx3;!F#|3 $OKK))PWW $ * " X~ #+$*%%LSS  &  X~tX~i  	KK!!4;;A> "     	KK!!5<<Q? "    	%%4;;A> &  " 	R " X~s_   ,D %,G& 	G#"+EG#+FG#+G	G		GGGGG#&	G54G5c                 *     | j                   d|fi |S )NGETr_   rO   urlkwargss      r   r9   zQRadarRequest.get       )t))%???r'   c                 *     | j                   d|fi |S )NPUTrb   rc   s      r   putzQRadarRequest.put   rf   r'   c                 *     | j                   d|fi |S )NPOSTrb   rc   s      r   postzQRadarRequest.post   s    )t))&#@@@r'   c                 *     | j                   d|fi |S )NPATCHrb   rc   s      r   patchzQRadarRequest.patch   s    )t))'3A&AAr'   c                 *     | j                   d|fi |S )NDELETErb   rc   s      r   deletezQRadarRequest.delete   s    )t))(CB6BBr'   c                 N   	 i }| j                   j                  D ]G  }| j                   j                  |   || j                  vs,| j                   j                  |   ||<   I |S # t        $ r5}| j                   j	                  dj                  |             Y d}~yd}~ww xY w)a@  
        Get the valid fields that should be passed to the REST API as urlencoded
        data so long as the argument specification to the module follows the
        convention:
            - the key to the argspec item does not start with qradar_
            - the key does not exist in the not_data_keys list
        Nzinvalid data type provided: {0}rS   )r#   r   rL   r   r!   r    )rO   qradar_dataparamr^   s       r   get_datazQRadarRequest.get_data   s    	K++ CKK&&u-:!8!88)-););E)BK&	C
  	KK!!5<<Q? "  	s"   4A& A& A& &	B$/+BB$c                     |$t        j                  | j                               }n$|du r | j                  dj	                  |            S | j                  dj	                  |      |      S )z(
        POST with data to path
        F/{0}r.   )jsondumpsrv   rl   r    rO   	rest_pathdatas      r   post_by_pathzQRadarRequest.post_by_path   sZ     <::dmmo.DU] 99V]]9566yyy14y@@r'   c                     |#t        j                  | j                               }| j                  dj	                  |      |      S )zP
        Create or Update a file/directory monitor data input in qradar
        rx   ry   )rz   r{   rv   ro   r    r|   s      r   create_updatezQRadarRequest.create_update   s9     <::dmmo.Dzz&--	2DzAAr'   )NNNNN)N)__name__
__module____qualname__rQ   r_   r9   ri   rl   ro   rr   rv   r   r    r'   r   rD   rD   l   sN     <<@D@@ABC,
ABr'   rD   )
__future__r   r   r   type__metaclass__rz   r   sslr   ansible.module_utils._textr   ansible.module_utils.connectionr	   r
   ansible.module_utils.sixr   +ansible.module_utils.six.moves.urllib.parser   rM   r   r&   r4   r7   objectrD   r   r'   r   <module>r      s[    A @      . G . B !3uE$B,(2.YBF YBr'   