
                             S r SSKrSSKrSSKJr  SSKJr  SSKJr  SSK	r	S r
S rS rS	 rS
 rS rS r SS jrS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"g) zBCode that's shared between multiple security policies subcommands.    N)
exceptions)yaml)resource_printerc           	      .   US:X  a  [         R                  " U 5      nO [        R                  " U 5      nUR                  5       nSU;   a
  US   Ul
        SU;   a
  US   Ul        SU;   a-  [        R                  " US   R                  S5      5      Ul        SU;   a#  UR                  R!                  US   5      Ul        S	U;   a  UR%                  US	   S
   S9Ul        SU;   Ga  UR)                  UR+                  US   S   S   S9S9Ul        US   S   R/                  S/ 5       GHB  nUR1                  US   S9nSU;   a
  US   Ul        SU;   a
  US   Ul        SU;   a
  US   Ul        SU;   a
  US   Ul        SU;   a
  US   Ul        SU;   a
  US   Ul        SU;   a
  US   Ul        UR/                  S/ 5       Hw  nURA                  5       n	SU;   a
  US   U	l!        SU;   a#  UR@                  R!                  US   5      U	l        SU;   a
  US   U	l"        URF                  RI                  U	5        My     UR,                  RJ                  RL                  RI                  U5        GME     SUS   ;   a  URO                  5       UR,                  l(        SUS   S   ;   a$  US   S   S   UR,                  RP                  l)        S US   S   ;   a$  US   S   S    UR,                  RP                  l*        S!US   S   ;   a$  US   S   S!   UR,                  RP                  l+        S"US   S   ;   a$  US   S   S"   UR,                  RP                  l,        S#US   S   ;   a=  UR*                  R[                  US   S   S#   5      UR,                  RJ                  l.        S$U;   a  US$   n
UR_                  5       Ul0        S%U
;   a-  UR^                  Rc                  U
S%   5      UR`                  l2        S&U
;   a1  URg                  U
S&   R/                  S'/ 5      S(9UR`                  l4        S)U
;   a-  UR^                  Rk                  U
S)   5      UR`                  l6        S*U
;   a  U
S*   UR`                  l7        S+U
;   a  U
S+   UR`                  l8        S,U;   a  URs                  URr                  Ru                  US,   S-   5      S.9Ul;        S/US,   ;   a0  URr                  Ry                  US,   S/   5      URv                  l=        S0US,   ;   a  US,   S0   URv                  l>        S1U;   a5  UR                  5       Ul@        S2US1   ;   a  US1   S2   UR                  lA        S3U;   a  / nUS3    Hu  nUR                  5       nUS   UlC        UR                  R                  US4   5      UlE        US5   UlF        US6   UlG        S7U;   a
  US7   UlH        URI                  U5        Mw     XlI        / nS8U;   GaO  US8    GHE  nUR                  5       nUS9   UlK        SU;   a
  US   Ul        S:U;   Ga  UR                  5       nS;US:   ;   a  [        US:   S;   U5      UlN        S<US:   ;   a  UR                  US:   S<   S=   S>9UlP        S?US:   ;   aj  UR                  5       nS@US:   S?   ;   aG  UR                  US:   S?   S@   R/                  SA/ 5      US:   S?   S@   R/                  SB/ 5      SC9UlS        UUlT        SDUS:   ;   a)  SEUS:   SD   ;   a  UR                  US:   SD   SE   SF9UlV        UUlW        SGU;   Ga  UR                  5       nS3USG   ;   aM  / nUSG   S3    H8  nUR                  5       nUS   UlC        USH   UlZ        URI                  U5        M:     UUlI        SEUSG   ;   a  USG   SE   Ul[        SIUSG   ;   a  USG   SI   Ul\        SJUSG   ;   a  USG   SJ   Ul]        SKUSG   ;   a  USG   SK   Ul^        SLUSG   ;   a  USG   SL   Ul_        SMUSG   ;   a  USG   SM   Ul`        SNUSG   ;   a  USG   SN   Ula        UUlb        [        USO   5      Uld        SPU;   a
  USP   Ule        URI                  U5        SQU;   a
  USQ   Ulf        SRU;   a  [        USR   5      Ulg        SSU;   a\  UR                  5       nSUSS   ;   a&  UR                  R!                  USS   S   5      Ul        STUSS   ;   a  USS   ST   Uli        UUlj        SUU;   aj  UR                  5       nUSU   R/                  SV/ 5      n/ nU H(  nURI                  UR                  USW   USX   SY95        M*     U(       a  UUlm        UUln        SZU;   Ga  USZ   nUR                  UR                  US[   S\   US[   S]   S^9US_   US`   Sa9Ulq        SbU;   aM  UR                  5       nScUSb   ;   a  USb   Sc   Uls        SdUSb   ;   a  USb   Sd   Ult        UUR                  lu        SeU;   af  UR                  5       nSUSe   ;   a&  UR                  R!                  USe   S   5      Ul        STUSe   ;   a  USe   ST   Uli        UUR                  lv        SfU;   a+  UR                  USf   S\   USf   S]   S^9UR                  lw        SgU;   a  USg   UR                  lx        ShU;   a-  UR                  R                  USh   5      UR                  lz        SiU;   a  USi   UR                  l{        UR/                  Sj/ 5       Hq  nUR                  5       nSkU;   a#  UR                  R                  USk   5      Ul~        SiU;   a
  USi   Ul{        UR                  R                  RI                  U5        Ms     SlU;   d  GM  UGR                  5       nUSl   R/                  Sm/ 5       GHv  n UGR                  5       n!SnU ;   a
  U Sn   U!l        U R/                  So/ 5       H  n"U!GR                  RI                  U"5        M!     U R/                  Sp/ 5       H*  n#U!GR                  RI                  G[        U#U5      5        M,     U R/                  Sq/ 5       H*  n$U!GR                  RI                  G[        U$U5      5        M,     U R/                  Sr/ 5       H*  n%U!GR                  RI                  G[        U%U5      5        M,     U R/                  Ss/ 5       H*  n&U!GR                  RI                  G[        U&U5      5        M,     UGR                  RI                  U!5        GMy     UUl        GMH     Xl        U$ ! [         a>  n[        R
                  " SR                  [        R                  " U5      5      5      eSnAff = f)ta  Returns the security policy read from the given file.

Args:
  input_file: file, A file with a security policy config.
  messages: messages, The set of available messages.
  file_format: string, the format of the file to read from

Returns:
  A security policy resource.
r   zError parsing JSON: {0}N	shortNamedescriptionfingerprintasciitypecloudArmorConfigenableMlr   adaptiveProtectionConfiglayer7DdosDefenseConfigenable)r   )r   thresholdConfigsname)r   autoDeployConfidenceThresholdautoDeployExpirationSec#autoDeployImpactedBaselineThresholdautoDeployLoadThresholddetectionAbsoluteQpsdetectionLoadThresholddetectionRelativeToBaselineQpstrafficGranularityConfigsenableEachUniqueValuevalueautoDeployConfigloadThresholdconfidenceThresholdimpactedBaselineThresholdexpirationSecruleVisibilityadvancedOptionsConfigjsonParsingjsonCustomConfigcontentTypesr'   logLevelrequestBodyInspectionSizeuserIpRequestHeadersddosProtectionConfigddosProtection)r-   ddosAdaptiveProtectionddosImpactedBaselineThresholdrecaptchaOptionsConfigredirectSiteKeyuserDefinedFieldsbaseoffsetsizemaskrulesactionmatchversionedExprexpr
expression)r<   exprOptionsrecaptchaOptionsactionTokenSiteKeyssessionTokenSiteKeys)r?   r@   configsrcIpRanges)rB   networkMatchvaluesdestIpRangesipProtocolssrcPorts	destPortssrcRegionCodessrcAsnsprioritypreviewredirectTarget
ruleNumberredirectOptionstargetheaderActionrequestHeadersToAdds
headerNameheaderValue)rS   rT   rateLimitOptionsrateLimitThresholdcountintervalSec)rW   rX   conformActionexceedAction)rV   rY   rZ   exceedActionRpcStatuscodemessageexceedRedirectOptionsbanThresholdbanDurationSecenforceOnKeyenforceOnKeyNameenforceOnKeyConfigsenforceOnKeyTypepreconfiguredWafConfig
exclusionstargetRuleSettargetRuleIdsrequestHeadersToExcluderequestCookiesToExcluderequestQueryParamsToExcluderequestUrisToExclude)r   loadjson
ValueErrorr   BadFileExceptionformatsix	text_typeSecurityPolicyr   r   base64urlsafe_b64decodeencoder	   TypeValueValuesEnumr   SecurityPolicyCloudArmorConfigr   &SecurityPolicyAdaptiveProtectionConfig=SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigr   getLSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigr   r   r   r   r   r   r   dSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigr   r   r   appendr   r   6SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigr   r   r    r!   r"   RuleVisibilityValueValuesEnumr#   #SecurityPolicyAdvancedOptionsConfigr$   JsonParsingValueValuesEnumr%   3SecurityPolicyAdvancedOptionsConfigJsonCustomConfigr&   LogLevelValueValuesEnumr)   r*   r+   "SecurityPolicyDdosProtectionConfigDdosProtectionValueValuesEnumr,   %DdosAdaptiveProtectionValueValuesEnumr.   r/   $SecurityPolicyRecaptchaOptionsConfigr0   r1   SecurityPolicyUserDefinedFieldr   BaseValueValuesEnumr3   r4   r5   r6   r2   SecurityPolicyRuler8   SecurityPolicyRuleMatcherConvertToEnumr:   Exprr;   $SecurityPolicyRuleMatcherExprOptions4SecurityPolicyRuleMatcherExprOptionsRecaptchaOptionsr>   r=   SecurityPolicyRuleMatcherConfigrA   r9    SecurityPolicyRuleNetworkMatcher5SecurityPolicyRuleNetworkMatcherUserDefinedFieldMatchrD   rB   rE   rF   rG   rH   rI   rJ   rC   intrK   rL   rM   rN   !SecurityPolicyRuleRedirectOptionsrP   rO   "SecurityPolicyRuleHttpHeaderAction2SecurityPolicyRuleHttpHeaderActionHttpHeaderOptionrR   rQ   "SecurityPolicyRuleRateLimitOptions+SecurityPolicyRuleRateLimitOptionsThresholdrU   +SecurityPolicyRuleRateLimitOptionsRpcStatusr\   r]   r[   r^   r_   r`   EnforceOnKeyValueValuesEnumra   rb   4SecurityPolicyRuleRateLimitOptionsEnforceOnKeyConfigEnforceOnKeyTypeValueValuesEnumrd   rc   (SecurityPolicyRulePreconfiguredWafConfig1SecurityPolicyRulePreconfiguredWafConfigExclusionrg   rh   ri   (ConvertPreconfigWafExclusionRequestFieldrj   rk   rl   rf   re   r7   )'
input_filemessagesfile_formatparsed_security_policyesecurity_policyparsed_threshold_configthreshold_config!parsed_traffic_granularity_configtraffic_granularity_configadvanced_options_configuser_defined_fieldsudfuser_defined_fieldr7   rulesecurity_policy_ruler9   expr_optionsnetwork_matchuser_defined_field_matchredirect_optionsheader_actionheaders_in_ruleheaders_to_addheader_to_addrate_limit_optionsexceed_action_rpc_statusexceed_redirect_optionsrA   enforce_on_key_configpreconfig_waf_config	exclusionexclusion_to_addtarget_rule_idrequest_headerrequest_cookierequest_query_paramrequest_uris'                                          Slib/googlecloudsdk/command_lib/compute/security_policies/security_policies_utils.pySecurityPolicyFromFiler      s    F!YYz2#yy4
 ++-/** 6{ CO,,"8"GO,,"(":":}-44W=#?O%%33"6*	,  11'/'N'N'(:;JG (O (IO$#9977$,JJ-.HI*,,46 K 7 	8 	9 , $:"$$!!$%7!<$= "nn&v. o  
),C	C#$CD 	6 
#&=	=3J%4
0 
/2I	I#$IJ 	< 
#&=	=3J%4
0 
 #:	:0G"1
- 
"%<	<2I$3
/ 
*-D	D#$DE 	7 0G/J/J
%r0
+ yy{ 	# #&GG/0GH %
: 66,4  -Z  -Z  -n  -n/7-
$
) 77-N.
$
* 	2299&	
%0, ..FFWW^^
q$=x 34NOO

I
I
K ..?	23MN
 
 ##=>!!02 	00AAO 
"8
$#&&8#: 
: ##=>!!68 	00AAU 
%(>
$)&&8): 
: ##=>!!<> 	00AA[ 
23MN
 
 ##=>!!02 	00AAO 12LM!# # 
P
P(($%?@(**:<= ..FFU
  6645LM446 )//

6
6%%%m46 ++7 44

F
F2!##&3~r#: G < ++< ,,

6
6
N
N%j13 ++4 #&==
!"=
> ++E !88
!"8
9 ++@5533#FF**&'=>!#$ 	4 	% ( 	!!"89	: EMDoDo  EV  EV
 !7
8&Eo**A 	(!"89	: !!7
8- **H
 !77557 *23KLL
 !9
:;L
M ,,< 22%&9:#BBD #F

1
1
E
E&k 
 #&h- #F	3"%f+  !34 ; )<%
%&&&w/%88:$(N!	$	+/+>(	D224d7m+ -7mO,h!%
 T']"}}gv.|< % %* DM)!FFH,4=#??MM(,Wm(D*)c/4)-g})E**c0"5 N  ) +%
tG}$d7mH55#CC M(3MB D EL &+"	4	 AAC$~"66 "
.)*=>cNNP % -0K$).1(m$+&&'?@ ? -@-
)D00&*>&:=&I-
#T.11'+N';N'K-
$D00&*>&:=&I-
#n--#'#7
#C-
 $~..$($8$E-
!tN33)-n)=>N)O-
&^,,"&~"6y"A-
,9)&)$z*:&;#	d	'+I$ll'(	T	!.23C.D+		*-d<.@*A'	d	"#EEGT+,,88LL()&1 

 t-..$():$;H$E

!/?,	4	 CCE~.223I2N,M


II*<8+M: J  - /=-
,,9)	t	#!"45080[0['SS()=>wG./CD!  T   -_=+N; 1\ 	1
- #&88BBD # )*ABB,>'--$) ,-DEE/A'00$, ' 
/
/
E #&88$,$N$N$P
!)*ABB::NN&'>?G $(
 +,CDD-?'..#* & 
/
/
E //BB*>:7C0@O C  
/
/
< 11 !12 
/
/
> //?G?j?j  @G  @G 0@

/
/
< !33 !34 
/
/
@ ),,-BBGFKKM    6)5=5r5r  6S  6S)*6!2  6)5;<N5O!2

/
/
C
C
J
J# H 
"T	)==? 	 67;;L"MIHHJ  	)-6-G* )or Bn**11.A !C ).G Ln44;;8"H !M !*.G Ln44;;8"H !M &/]]+R&! 88??8'& ']]+A2Fk11888hO G 
)
)
0
01A
BA NB 7K3] 0`  	e  ''(A(H(H
--
)  s   u 
v9vvc                 8    UR                   R                  U 5      $ )zConverts a string version of a versioned expr to the enum representation.

Args:
  versioned_expr: string, string version of versioned expr to convert.
  messages: messages, The set of available messages.

Returns:
  A versioned expression enum.
)r   VersionedExprValueValuesEnum)versioned_exprr   s     r   r   r     s      
	+	+	H	H
     c                     UR                  5       nSU ;   a#  UR                   R                  U S   5      Ul        SU ;   a
  U S   Ul        U$ )a;  Converts the request field in preconfigured WAF exclusion configuration.

Args:
  request_field_in_rule: a request field in preconfigured WAF exclusion
    configuration read from the security policy config file.
  messages: the set of available messages.

Returns:
  The proto representation of the request field.
opval)<SecurityPolicyRulePreconfiguredWafConfigExclusionFieldParamsOpValueValuesEnumr   r   )request_field_in_ruler   request_fields      r   r   r     s^     KKM 	""MM		06	7  ##-e4M	r   c                 .    [         R                  " XU S9  g)a  Writes the given security policy in the given format to the given file.

Args:
  output_file: file, File into which the security policy should be written.
  security_policy: resource, SecurityPolicy to be written out.
  file_format: string, the format of the file to write to.
)print_formatoutN)r   Print)output_filer   r   s      r   WriteToFiler     s     [Br   c                 n    U R                   nSnUR                  b  UR                  UR                  S9nU$ )z1Returns a SecurityPolicyCloudArmorConfig message.Nr   )r   	enable_mlry   )clientargsr   cloud_armor_configs       r   CreateCloudArmorConfigr     sA     __(	^^!@@ A !	r   c                    U R                   nU b  UOUR                  5       nUR                  S5      (       d  UR                  S5      (       a  UR                  b  UR                  OUR	                  5       nUR                  S5      (       a  UR
                  Ul        UR                  S5      (       a*  UR                  R                  UR                  5      Ul	        UUl        U$ )z9Returns a SecurityPolicyAdaptiveProtectionConfig message.enable_layer7_ddos_defense#layer7_ddos_defense_rule_visibility)
r   rz   IsSpecifiedr   r{   r   r   r   r   r#   )r   r   #existing_adaptive_protection_configr   adaptive_protection_configlayer7_ddos_defense_configs         r   CreateAdaptiveProtectionConfigr     s     __(-P.)FFH  344
<== &==I 
$	;	;SSU 
 455*.*I*I '=>>

P
P((668 !/
 	# 6 
$#r   c                 |   U R                   n[        XU5      nUR                  S5      (       dB  UR                  S5      (       d,  UR                  S5      (       d  UR                  S5      (       a  UR                  b  UR                  OUR	                  5       nUR                  S5      (       a  UR
                  Ul        UR                  S5      (       a  UR                  Ul        UR                  S5      (       a  UR                  Ul
        UR                  S5      (       a  UR                  Ul        XTl        U$ )zOReturns a SecurityPolicyAdaptiveProtectionConfig message with AutoDeployConfig..layer7_ddos_defense_auto_deploy_load_threshold4layer7_ddos_defense_auto_deploy_confidence_threshold;layer7_ddos_defense_auto_deploy_impacted_baseline_threshold.layer7_ddos_defense_auto_deploy_expiration_sec)r   r   r   r   r   r   r   r   r    r   r!   r   r"   )r   r   r   r   r   auto_deploy_configs         r   2CreateAdaptiveProtectionConfigWithAutoDeployConfigr     sC    __(=7 9 
68 8;?;K;K
@< <
G LMM &66B 	#33GGI  HII

=
= &NOO

C
C ,EG G 
J
J 2HII

=
= & 3E/	##r   c                 \   U R                   nU b  UOUR                  5       nUR                  S5      (       a*  UR                  R                  UR                  5      Ul        UR                  S5      (       a  UR                  UR                  S9Ul        UR                  S5      (       a*  UR                  R                  UR                  5      Ul        U(       a'  UR                  S5      (       a  UR                  Ul        UR                  S5      (       a  UR                  Ul        U$ )z6Returns a SecurityPolicyAdvancedOptionsConfig message.json_parsingjson_custom_content_typesr(   	log_levelrequest_body_inspection_sizeuser_ip_request_headers)r   r   r   r   r   r%   r   r   r&   r   r   r)   r   r*   r   r+   )r   r    existing_advanced_options_configenable_large_body_sizer   r   s         r   CreateAdvancedOptionsConfigr   =  s)   
 __(*J+&CCE  
n%%44OO	 ' 
122DD77 	E 	9 , 
k""44LLNN	 $  0 0$! ! 	)) 5 
/00373O3O0	  r   c                     U R                   nU b  UOUR                  5       nUR                  S5      (       a*  UR                  R                  UR                  5      Ul        U$ )5Returns a SecurityPolicyDdosProtectionConfig message.network_ddos_protection)r   r   r   r   r   r-   r   r   existing_ddos_protection_configr   ddos_protection_configs        r   CreateDdosProtectionConfigr   c  sj     __()H*%BBD  
/0033	&	&t'C'C	D ) 
 r   c                     U R                   nUb  UOUR                  5       nUR                  S5      (       a*  UR                  R                  UR                  5      Ul        U$ )r    network_ddos_adaptive_protection)r   r   r   r   r   r.   r   s        r   4CreateDdosProtectionConfigWithDdosAdaptiveProtectionr   s  sp    
 __( 
)	4 &668 
 
8994<4_4_  5F  5F--51 
 r   c                     U R                   nUb  UOUR                  5       nUR                  S5      (       a  UR                  Ul        U$ )r   (network_ddos_impacted_baseline_threshold)r   r   r   r  r/   r   s        r   BCreateDdosProtectionConfigWithNetworkDdosImpactedBaselineThresholdr    sX    
 __( 
)	4 &668 
 
@AA55 8 
 r   c                     U R                   nU b  UOUR                  5       nUR                  S5      (       a*  UR                  R                  UR                  5      Ul        U$ )r   ddos_protection)r   r   r   r   r  r-   r   s        r   CreateDdosProtectionConfigOldr    sj     __()H*%BBD  
'((33	&	&t';';	< ) 
 r   c                     U R                   nU b  UOUR                  5       nUR                  S5      (       a  UR                  Ul        U$ )z7Returns a SecurityPolicyRecaptchaOptionsConfig message.recaptcha_redirect_site_key)r   r   r   r  r1   )r   r   !existing_recaptcha_options_configr   recaptcha_options_configs        r   CreateRecaptchaOptionsConfigr    sU     __(+L,'DDF  
344/3/O/O,	!!r   c                 D    SU ;   a  U R                  SS5      u  pX4$ U S4$ )z>Parses an enforce-on-key-config string into a key-value tuple.=   N)split)rA   kvs      r   ParseEnforceOnKeyConfigr    s,    F]<<QDA4K4<r   c           
      $   U R                   nUR                  5       nSnUR                  S5      (       d  UR                  S5      (       af  UR                  5       nUR                  S5      (       a  UR                  Ul        UR                  S5      (       a  UR                  Ul        Xdl        SnUR                  S5      (       a  [        UR                  5      Ul        SnUR                  S5      (       a  [        UR                  5      Ul        SnUR                  S5      (       d  UR                  S5      (       a  UR                  5       nUR                  S5      (       a3  UR                  R!                  [#        UR$                  5      5      Ul        UR                  S5      (       a  UR(                  Ul        Xtl        SnUR                  S	5      (       a5  UR                  R/                  [1        UR2                  5      5      Ul        SnUR                  S
5      (       a  UR6                  Ul        SnUR                  S5      (       a`  / nUR:                   HF  u  pUR=                  UR?                  UR>                  RA                  [1        U	5      5      U
S95        MH     Xl!        SnUR                  S5      (       d  UR                  S5      (       af  UR                  5       nUR                  S5      (       a  URD                  Ul        UR                  S5      (       a  URF                  Ul        Xl$        SnUR                  S5      (       a  URJ                  Ul&        SnU(       a  UR                  S5      (       d  UR                  S5      (       af  URO                  5       nUR                  S5      (       a  URP                  Ul)        UR                  S5      (       a  URT                  Ul+        Xl,        SnU(       a  U$ S$ )z5Returns a SecurityPolicyRuleRateLimitOptions message.Frate_limit_threshold_count!rate_limit_threshold_interval_secTconform_actionexceed_actionexceed_redirect_typeexceed_redirect_targetenforce_on_keyenforce_on_key_nameenforce_on_key_configs)rd   rb   ban_threshold_countban_threshold_interval_secban_duration_secexceed_action_rpc_status_code exceed_action_rpc_status_messageN)-r   r   r   r   r  rW   r  rX   rV   _ConvertConformActionr  rY   _ConvertExceedActionr  rZ   r   rx   _ConvertRedirectTyper  r   r  rP   r^   r   ConvertEnforceOnKeyr  ra   r  rb   r  r   r   r   rc   r  r  r_   r  r`   r   r   r\   r!  r]   r[   )r   r   support_fairsharer   r   
is_updatedrate_limit_thresholdr   r  r  r  ban_thresholdr   s                r   CreateRateLimitOptionsr*    s    __(BBD*
344
:;;<<> 455#'#B#B ;<<)-)O)O&,@)J	&'''<($J	o&&&:4;M;M&N#J
-..
/00&HHJ.//

4
4
H
H"4#<#<=? " 011'+'B'B$/F,J	&''33OO 3 34	6 # J	+,,*.*B*B'J	.//++##

G
G'CC../B1/EF 	 H  , .D*J
,--
344HHJM-.. 44m455"&"A"Am&3#J	())(,(=(=%J
677
9::<<>  788&*&H&H#:;;)-)N)N&/G,J)	3t3r   c                 (    SS0R                  X 5      $ )Nallowr|   r8   s    r   r"  r"    s    
7				//r   c                 .    SSSSS.R                  X 5      $ )Nz	deny(403)z	deny(404)z	deny(429)z	deny(502))zdeny-403zdeny-404zdeny-429zdeny-502r-  r.  s    r   r#  r#    s$    	

 Cr   c                 >    SSSSSSSSS	S
SSS.R                  X 5      $ )NIPALL_IPSALLHTTP_HEADERXFF_IPHTTP_COOKIE	HTTP_PATHSNIREGION_CODETLS_JA3_FINGERPRINTUSER_IPTLS_JA4_FINGERPRINT)ipzall-ipsallzhttp-headerzxff-ipzhttp-cookiez	http-pathsnizregion-codeztls-ja3-fingerprintzuser-ipztls-ja4-fingerprintr-  )r  s    r   r%  r%  '  s<    """22
 C'(r   c                    U R                   nUR                  5       nSnUR                  S5      (       a5  UR                  R                  [	        UR
                  5      5      Ul        SnUR                  S5      (       aE  UR                  Ul        UR                  c%  UR                  R                  R                  Ul        SnU(       a  U$ S$ )z4Returns a SecurityPolicyRuleRedirectOptions message.Fredirect_typeTredirect_targetN)
r   r   r   rx   r$  rA  r   rB  rP   EXTERNAL_302)r   r   r   r   r'  s        r   CreateRedirectOptionsrD  8  s     __(??A*	o&&22FF !3!34	6  J 
'(("22$

4
4
H
H<  J'	1T1r   c                 *    SSS.R                  X 5      $ )NGOOGLE_RECAPTCHArC  )zgoogle-recaptchazexternal-302r-  )rA  s    r   r$  r$  R  s    ,$
 C%&r   c                 N   UR                  S5      (       d  UR                  S5      (       d  gU R                  nUR                  5       nUR                  S5      (       a  UR                  Ul        UR                  S5      (       a  UR
                  Ul        UR                  US9$ )z7Returns a SecurityPolicyRuleMatcherExprOptions message.recaptcha_action_site_keysrecaptcha_session_site_keysN)r>   )r   r   r   rH  r?   rI  r@   r   )r   r   r   recaptcha_optionss       r   CreateExpressionOptionsrK  Y  s    			"
 
:;;__(CCE  
233,0,K,K)	344-1-M-M*		6	6( 
7 
 r   c                 `   U R                   nUR                  5       n/ nSn[        USS5      bv  / nUR                   HK  nUR	                  S5      nUS   n	US   R	                  S5      n
UR                  UR                  XS95        MM     Xcl        UR                  S	5        S
n[        USS5      b$  UR                  Ul	        UR                  S5        S
n[        USS5      b$  UR                  Ul        UR                  S5        S
n[        USS5      b$  UR                  Ul        UR                  S5        S
n[        USS5      b$  UR                  Ul        UR                  S5        S
n[        USS5      b$  UR                   Ul        UR                  S5        S
n[        USS5      b$  UR$                  Ul        UR                  S5        S
n[        USS5      b>  UR(                   Vs/ s H  n[+        U5      PM     snUl        UR                  S5        S
nU(       a  X44$ S/ 4$ s  snf )z3Returns a SecurityPolicyRuleNetworkMatcher message.Fnetwork_user_defined_fieldsN;r   r  :)r   rD   z!network_match.user_defined_fieldsTnetwork_src_ip_rangesznetwork_match.src_ip_rangesnetwork_dest_ip_rangesznetwork_match.dest_ip_rangesnetwork_ip_protocolsznetwork_match.ip_protocolsnetwork_src_portsznetwork_match.src_portsnetwork_dest_portsznetwork_match.dest_portsnetwork_src_region_codesznetwork_match.src_region_codesnetwork_src_asnsznetwork_match.src_asns)r   r   getattrrM  r  r   r   r2   rP  rB   rQ  rE   rR  rF   rS  rG   rT  rH   rU  rI   rV  r   rJ   )r   r   r   network_matcherupdate_maskr'  r   r   parsedr   rD   asns               r   CreateNetworkMatcherr\  o  sG    __(==?/+*T0$7C">> "'',fAYdays#f  

H
H I  ? )<%:;JT*D1="&"<"<O45JT+T2>#'#>#>O 56JT)40<"&";";O34JT&-9#55O01JT'.: $ 7 7O12JT-t4@%)%B%BO"78JT%t,8373H3HI3HCs3x3HIO/0J+5/	'ED":E	 Js   -H+c                 H   U R                   nUR                  5       nUR                  Ul        UR                  R	                  [        UR                  5      5      Ul        UR                  Ul        UR                  Ul        [        USS5      b  UR                  Ul
        U$ )z1Returns a SecurityPolicyUserDefinedField message.r6   N)r   r   user_defined_field_namer   r   _ConvertUserDefinedFieldBaser3   r4   r5   rW  r6   )r   r   r   r   s       r   CreateUserDefinedFieldr`    s     __(>>@ 88--AA
&tyy
1 
 #kk IIT64 ,"ii	r   c                 .    SSSSS.R                  X 5      $ )NIPV4IPV6TCPUDP)ipv4ipv6tcpudpr-  )r3   s    r   r_  r_    s!    &u	E	I	I

 r   c                    U R                   nUR                  5       nUR                  Ul        UR	                  S5      (       a  UR
                  Ul        UR	                  S5      (       a  UR                  Ul        UR	                  S5      (       a  UR                  Ul
        UR	                  S5      (       a  UR                  Ul        U(       Ga  UR	                  S5      (       a  UR                  Ul        UR	                  S5      (       a  UR                  Ul        UR	                  S5      (       a  UR"                  Ul        UR	                  S5      (       a  / nUR&                   Hm  nUR)                  5       nS	U;   a#  UR(                  R+                  US	   5      Ul        S
U;   a
  US
   Ul        SU;   a
  US   Ul        UR3                  U5        Mo     XTl        U$ )z_Returns a SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig message.auto_deploy_load_threshold auto_deploy_confidence_threshold'auto_deploy_impacted_baseline_thresholdauto_deploy_expiration_secdetection_load_thresholddetection_absolute_qps"detection_relative_to_baseline_qpstraffic_granularity_configsr   r   r   )r   r}   threshold_config_namer   r   rk  r   rl  r   rm  r   rn  r   ro  r   rp  r   rq  r   rr  r~   rx   r   r   r   r   r   )r   r   support_granularity_configr   r   rr  arg_traffic_granularity_configr   s           r   &CreateLayer7DdosDefenseThresholdConfigrv    s   
 __([[]  44	233/3/N/N,	899-- 2 
?@@44 8 
233/3/N/N,233040M0M-011.2.I.I+<==

1
1 5 566$&!,0,L,L
(yy{ 	# 33,4  -Z  -Z  -n  -n,V4-
$
) 44-K.
$
* #&DD,-DE %
: 	$**+EF! -M" 4O0	r   )F)#__doc__ru   rn   googlecloudsdk.callioper   googlecloudsdk.corer   googlecloudsdk.core.resourcer   rr   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r*  r"  r#  r%  rD  r$  rK  r\  r`  r_  rv   r   r   <module>r|     s    I   . $ 9 
cL,	B$:"$L LQ#!L   & & ""U4p0("24&,5Fp*7r   