
    Vhr                        d Z 	 ddlZddlmZ ddlmZ ddlmZ ddd	d
dddddddddddddddddddddddddddd d!d"dd#Z	 ej                  d$%      d&        Z ej                  d$%      d'        Z ej                  d$%      d(        Z ej                  d$%      d)        Z ej                  d$%      d*        Z ej                  d$%      d+        Zd, Z ej                  d$%      d-        Zd. Z ej                  d$%      d/        Z ej                  d$%      d0        Z ej                  d$%      d1        Z ej                  d$%      d2        Zd3 Zd4 Z ej                  d5d6g7      d9d8       Zy# e$ r Y w xY w):zF
This module adds shared support for Web Application Firewall modules
    N)camel_dict_to_snake_dict   )AWSRetry)
get_waiterbyte_match_setByteMatchSetByteMatchTuple	ByteMatch)methodconditionsetconditiontupletypegeo_match_setGeoMatchSetGeoMatchConstraintGeoMatchip_setIPSetIPSetDescriptorIPMatchregex_match_setRegexMatchSetRegexMatchTuple
RegexMatchsize_constraint_setSizeConstraintSetSizeConstraintsql_injection_match_setSqlInjectionMatchSetSqlInjectionMatchTupleSqlInjectionMatchxss_match_setXssMatchSetXssMatchTupleXssMatch)bytegeoipregexsizesqlxss   )delayc                 ,    | j                  |      d   S )N)RuleIdRule)get_rule)clientrule_ids     g/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/amazon/aws/plugins/module_utils/waf.pyget_rule_with_backoffr6   U   s    ??'?*622    c                 ,    | j                  |      d   S )N)ByteMatchSetIdr   )get_byte_match_set)r3   byte_match_set_ids     r5   get_byte_match_set_with_backoffr<   Z   s    $$4E$F~VVr7   c                 ,    | j                  |      d   S )N)IPSetIdr   )
get_ip_set)r3   	ip_set_ids     r5   get_ip_set_with_backoffrA   _   s    Y/88r7   c                 ,    | j                  |      d   S )N)SizeConstraintSetIdr   )get_size_constraint_set)r3   size_constraint_set_ids     r5   $get_size_constraint_set_with_backoffrF   d   s    ))>T)UVijjr7   c                 ,    | j                  |      d   S )N)SqlInjectionMatchSetIdr   )get_sql_injection_match_set)r3   sql_injection_match_set_ids     r5   (get_sql_injection_match_set_with_backoffrK   i   s    --E_-`awxxr7   c                 ,    | j                  |      d   S )N)XssMatchSetIdr#   )get_xss_match_set)r3   xss_match_set_ids     r5   get_xss_match_set_with_backoffrP   n   s    ##2B#CMRRr7   c                 z   	 t        | |      }t        t        t        t        t        d}dv r6|d   D ].  }|d   |v s|j                   ||d      | |d                |d= 0 |S # t        j                  j                  t        j                  j                  f$ r}|j                  |d       Y d }~d }~ww xY w)NzCouldn't obtain waf rulemsg)r
   r   r   r!   r%   
PredicatesTypeDataId)r6   botocore
exceptionsClientErrorBotoCoreErrorfail_json_awsr<   rA   rF   rK   rP   update)r3   moduler4   rulee
match_sets	predicates          r5   r2   r2   s   s    @$VW5
 5*>E2J tl+ 	(I J.  !>If,=!>vyQYGZ![\h'		(
 K! ++X-@-@-N-NO @Q$>??@s   A& &7B:B55B:c                 ,    | j                  |      d   S )N)WebACLIdWebACL)get_web_acl)r3   
web_acl_ids     r5   get_web_acl_with_backoffrg      s    z28<<r7   c           	         	 t        | |      }r6	 |d   D ]!  }|j                  t        | ||d                # 	 t        |      S t        |      S # t        j                  j                  t        j                  j                  f$ r}|j                  |d       Y d }~d }~ww xY w# t        j                  j                  t        j                  j                  f$ r'}|j                  |d       Y d }~t        |      S d }~ww xY w)NzCouldn't obtain web aclrR   Rulesr0   zCouldn't obtain web acl rule)	rg   rW   rX   rY   rZ   r[   r\   r2   r   )r3   r]   rf   web_aclr_   r^   s         r5   re   re      s    ?*6:> 	H( FHVVT(^DEF $G,,#G,, ++X-@-@-N-NO ?Q$=>>? ##//1D1D1R1RS 	H  (F GG#G,,	Hs.   A )B( 7B%B  B%(7DDDc                 f    | j                  d      }|j                         j                         d   S )N
list_rulesri   get_paginatorpaginatebuild_full_resultr3   	paginators     r5   list_rules_with_backoffrs      s/    $$\2I113G<<r7   c                 z    | j                         }g }|r&||d   z  }d|v r| j                  |d         nd }|r&|S )Nri   
NextMarkerru   )rl   )r3   respruless      r5    list_regional_rules_with_backoffry      sU    DE
gCOSWCWv  D,> ?]a  Lr7   c                 f    | j                  d      }|j                         j                         d   S )Nlist_web_aclsWebACLsrm   rq   s     r5   list_web_acls_with_backoffr}      s/    $$_5I113I>>r7   c                 z    | j                         }g }|r&||d   z  }d|v r| j                  |d         nd }|r&|S )Nr|   ru   rv   )r{   )r3   rw   aclss      r5   #list_regional_web_acls_with_backoffr      sU    !DD
YFRVZFZv##tL/A#B`d  Kr7   c                 D   	 | j                   j                  dk(  rt        |       S | j                   j                  dk(  rt        |       S y # t        j
                  j                  t        j
                  j                  f$ r}|j                  |d       Y d }~y d }~ww xY w)NWAFWAFRegionalzCouldn't obtain web aclsrR   )		__class____name__r}   r   rW   rX   rY   rZ   r[   )r3   r]   r_   s      r5   r{   r{      s    @$$--f55&&-76v>> 8++X-@-@-N-NO @Q$>??@s   #A #A 7BBBc                     	 | j                         }|d   S # t        j                  j                  t        j                  j                  f$ r}|j                  |d       Y d }~y d }~ww xY w)NChangeTokenzCouldn't obtain change tokenrR   )get_change_tokenrW   rX   rY   rZ   r[   )r3   r]   tokenr_   s       r5   r   r      sg    D'')]##++X-@-@-N-NO DQ$BCCDs    7A+A&&A+   WAFStaleDataException)backoffcatch_extra_error_codesc                 v    t        | |      |d<    |di |}|rt        | d      j                  |d          |S )Nr   change_token_in_sync)r    )r   r   wait)r3   r]   paramsfuncr   results         r5   "run_func_with_change_token_backoffr      sG    ,VV<F=^F^F"	
 $6-0$
1Mr7   )F)__doc__rW   ImportError0ansible.module_utils.common.dict_transformationsr   retriesr   waitersr   MATCH_LOOKUPjittered_backoffr6   r<   rA   rF   rK   rP   r2   rg   re   rs   ry   r}   r   r{   r   r   r   r7   r5   <module>r      sm  <	 V   #&*	 "%.	 wJ[en
o#'+	 (+* 	 ,.2#	 "%)	A&R #3 $3 #W $W #9 $9 #k $k #y $y #S $S, #= $=- #= $=
 # $ #? $?
 # $@D 1?V>WX YY  		s   F FF