
    Vh                         	 d dl mZ d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	  ej                         dd       Zd	 Zd
 ZddZddZd Zd Zd Zd Zy# e$ r Y Rw xY w)    )BotoCoreError)ClientError)AWSRetry)ansible_dict_to_boto3_tag_list)boto3_tag_list_to_ansible_dict)compare_aws_tagsNc                     t        |      }|r||d<   	  | j                  di |S # t        t        f$ r} ||d       Y d }~y d }~ww xY w)N)ResourceARN
NextMarkerzFailed to list wafv2 tagsmsg )dictlist_tags_for_resourcer   r   )wafv2arnfail_json_awsnext_markerparamses         l/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/aws/plugins/module_utils/wafv2.py
_list_tagsr      sW    c"F*|:+u++5f55;' :a899:s   ' A

AA
c                     d }g }	 t        | ||      }|j                  dd       }|j                  di       }|j                  |j                  dg              |s	 t        |      S a)Nr   TagInfoForResourceTagList)r   getextendr   )r   r   r   r   tag_listresponcetag_infos          r   describe_wafv2_tagsr!      sk    KH
eS-8ll<6<< 4b9Y34)(33     c                 \   |yt        | ||      }t        |||      \  }}|s|sy|ry|r	 t        |      }	| j                  ||	       |r	 | j                  ||       yy# t        t
        f$ r}
 ||
d       Y d }
~
6d }
~
ww xY w# t        t
        f$ r}
 ||
d       Y d }
~
yd }
~
ww xY w)NFT)r
   TagszFailed to add wafv2 tagsr   )r
   TagKeyszFailed to remove wafv2 tags)r!   r   r   tag_resourcer   r   untag_resource)r   r   tags
purge_tagsr   
check_modecurrent_tagstags_to_addtags_to_remove
boto3_tagsr   s              r   ensure_wafv2_tagsr/   +   s    |&uc=AL"2<z"RK~	=7DJ3Z@ 	@  S. I  {+ 	=!!;<<	=
 {+ 	@!!>??	@s/   A" B "B1
B  BB+
B&&B+c                 "   |dd}|r||d<   	  | j                   di |}j                  d      r8|dxx   t	        | |||j                  d            j                  d      z  cc<   |S # t        t        f$ r} ||d       Y d }~id }~ww xY w)	Nd   ScopeLimitr   zFailed to list wafv2 web aclr   WebACLs
nextmarkerr   )list_web_aclsr   r   r   wafv2_list_web_aclsr   scoper   r7   req_objresponser   s          r   r9   r9   F   s    ,G *=&5&&11 ||L!25-HLL4N 

#i.	 O ;' =a;<<=   A+ +B:
B		Bc                 "   |dd}|r||d<   	  | j                   di |}j                  d      r8|dxx   t	        | |||j                  d            j                  d      z  cc<   |S # t        t        f$ r} ||d       Y d }~id }~ww xY w)	Nr1   r2   r   zFailed to list wafv2 rule groupr   
RuleGroupsr6   r   )list_rule_groupsr   r   r   wafv2_list_rule_groupsr:   s          r   rB   rB   X   s    ,G *@)5))4G4 ||L!"85-HLL4N#

#l
	 O ;' @a>??@r>   c           	      ,   t        | t              s| S i }| j                         D ]k  }t        | j                  |      t              rsd|v r.t	        | j                  |            ||j                  dd      <   Ud|k(  rt	        | j                  |            |d<   xt	        | j                  |            ||<   t        | j                  |      t              r^g ||<   t        t        | j                  |                  D ]1  }||   j                  t	        | j                  |      |                3 d|v r&| j                  |      ||j                  dd      <   =d|k(  r| j                  |      |d<   X| j                  |      ||<   n |S )NIpIPArnARN)

isinstancer   keysr   wafv2_snake_dict_to_camel_dictreplacelistrangelenappend)aretvalitemidxs       r   rJ   rJ   j   sU   aF 'aeeDk4(t|3QRSRWRWX\R]3^t||D$/0$ >quuT{ Ku=aeeDkJtdT*F4LSt-. Vt##$B155;sCS$TUVT\/0uuT{F4<<d+,d]EE$KF5M55;F4L#'$ Mr"   c                    | j                  di       j                  |      rt        t        | j                  di       j                  |i       j                  d                  D ]  }| d   |   d   |   j                  d      s!| j                  d      j                  |      j                  d      |   j                  d      j                  d      j                  d      | d   |   d   |   d   d<    | S )z
    currently valid nested byte values in statements array are
        - OrStatement
        - AndStatement
        - NotStatement
    	Statement
StatementsByteMatchStatementSearchStringutf-8)r   rM   rN   decode)rulekeynamerS   s      r   nested_byte_values_to_stringsr]      s     xxR $$W-TXXk26::7BGKKLYZ[ 		CK ),7<@@AUVHH[)S\S&s, S-.S(VG_ [!'*<8=>RSTbc		 Kr"   c                    t        t        |             D ]  }| |   j                  di       j                  di       j                  d      rN| |   j                  d      j                  d      j                  d      j                  d      | |   d   d   d<   dD ]9  }| |   j                  di       j                  |      s(t	        | |   |      | |<   ;  | S )NrU   rW   rX   rY   )AndStatementOrStatementNotStatement)rM   rN   r   rZ   r]   )rulesrS   	statements      r   %byte_values_to_strings_before_comparerd      s    SZ  	V:>>+r*../CRHLL^\c
{+//0DEII.Y``ahi #J{#$89.I
 M V	:>>+r266yA!>uSz9!UE#JV	V Lr"   c                    d}t        | d       } t        |       } t        |d       }|rS|dk(  rN|}t        |       t        |      k(  r/t        t        |             D ]  }| |   ||   k7  sd} ||fS  ||fS d}||fS g }g }t        t        |             D ]  }t        t        |            D ]p  }	| |   j	                  d      ||	   j	                  d      k(  s-|dk(  r |j                  |       | |   ||	   k7  sOd}R| |   ||	   k(  s^|j                  |       d}r  t        |       }
|D ]  }| j                  |        |dk(  r| |z   }t        |      |
k7  rd}||fS | }||fS )NFc                     | d   S NPriorityr   ks    r   <lambda>z(compare_priority_rules.<locals>.<lambda>   s
    !J- r"   )keyc                     | d   S rg   r   ri   s    r   rk   z(compare_priority_rules.<locals>.<lambda>   s
    AjM r"   presentTrh   )sortedrd   rN   rM   r   rO   pop)existing_rulesrequested_rulespurge_rulesstatediffmerged_rulesrS   
ex_idx_popexisting_idxrequested_idx
prev_counts              r   compare_priority_rulesr{      s   DN0GHN:>JN_2IJOu	)&~#o"66S01 !#&/#*>>DB IH ? D> 3 
!#n"56 		$L!&s?';!< $!,/33J??S`CaCeCefpCqq	)")),7),7?=;YY#'D'59WW")),7#$		$ (
 	$Cs#	$ I)O;L< J.  *Lr"   )N)botocore.exceptionsr   r   ImportError;ansible_collections.amazon.aws.plugins.module_utils.retriesr   ;ansible_collections.amazon.aws.plugins.module_utils.taggingr   r   r   jittered_backoffr   r!   r/   r9   rB   rJ   r]   rd   r{   r   r"   r   <module>r      s{   	1/ Q f f X : :46$$4,-A  		s   A A! A!