
    G                     d    S r SSKJr  SSKJr  SSKJr  SSKJr   " S S\5      r	 " S S	\5      r
g
)zSecurity policy.    )absolute_import)division)unicode_literals)
exceptionsc                       \ rS rSrSrSS jr\S 5       r\S 5       rS r	S r
S	 rSS
 jrSS jrSS jrSS jr SS jrSrg)SecurityPolicy   z"Abstracts SecurityPolicy resource.Nc                     Xl         X l        g Nref_compute_clientselfr   compute_clients      >lib/googlecloudsdk/api_lib/compute/security_policies/client.py__init__SecurityPolicy.__init__       H)    c                 .    U R                   R                  $ r   r   apitools_clientr   s    r   _clientSecurityPolicy._client       ///r   c                 .    U R                   R                  $ r   r   messagesr   s    r   	_messagesSecurityPolicy._messages#       (((r   c                    [        U R                  SS 5      nUb^  U R                  R                  SU R                  R                  U R                  R                  UU R                  R                  5       S94$ U R                  R                  SU R                  R                  U R                  R                  U R                  R                  5       S94$ )NregionDeleteprojectr%   securityPolicyr(   r)   )
getattrr   r   regionSecurityPoliciesr!   *ComputeRegionSecurityPoliciesDeleteRequestr(   NamesecurityPolicies$ComputeSecurityPoliciesDeleteRequestr   r%   s     r   _MakeDeleteRequestTuple&SecurityPolicy._MakeDeleteRequestTuple'   s    TXXx.Fll118nnGG((**!% H 23 3
 LL))8NN??(( @ JK Kr   c                    [        U R                  SS 5      nUb^  U R                  R                  SU R                  R                  U R                  R                  UU R                  R                  5       S94$ U R                  R                  SU R                  R                  U R                  R                  U R                  R                  5       S94$ )Nr%   Getr'   r*   )
r+   r   r   r,   r!   'ComputeRegionSecurityPoliciesGetRequestr(   r.   r/   !ComputeSecurityPoliciesGetRequestr1   s     r   _MakeDescribeRequestTuple(SecurityPolicy._MakeDescribeRequestTuple3   s    TXXx.Fll115nnDD((**!% E 23 3
 LL))5NN<<(( = JK Kr   c                 L   [        U R                  SS 5      nUbF  U R                  R                  SU R                  R                  U R                  R                  UUS94$ U R                  R                  SU R                  R                  U R                  R                  US94$ )Nr%   Insertr'   r*   )	r+   r   r   r,   r!   *ComputeRegionSecurityPoliciesInsertRequestr(   r/   $ComputeSecurityPoliciesInsertRequest)r   security_policyr%   s      r   _MakeCreateRequestTuple&SecurityPolicy._MakeCreateRequestTuple?   s    TXXx.Fll118nnGG((**!0 H 23 3
 LL))8NN??(( @ JK Kr   c           
      ~   [        U R                  SS5      nUb  U(       a`  U R                  R                  SU R                  R                  U R                  R                  UU R                  R                  5       UUS94$ U R                  R                  SU R                  R                  U R                  R                  UU R                  R                  5       US94$ U R                  R                  SU R                  R                  U R                  R                  U R                  R                  5       US94$ )zGenerates a SecurityPolicies Patch request.

Args:
  security_policy: The updated security policy
  update_mask: Field mask for clearing fields

Returns:
  A tuple containing the resource collection, verb, and request.
r%   NPatch)r(   r%   r)   securityPolicyResource
updateMask)r(   r%   r)   rC   )r(   r)   rC   )
r+   r   r   r,   r!   )ComputeRegionSecurityPoliciesPatchRequestr(   r.   r/   #ComputeSecurityPoliciesPatchRequest)r   r>   update_maskr%   s       r   _MakePatchRequestTuple%SecurityPolicy._MakePatchRequestTupleK   s    TXXx.F	LL//NNDD((#xx}}'6& E 

 
	
 ll117nnFF((**!%)8	 G :; ; LL))7NN>>((#xx}}'6 ? 89 9r   c                 l    U R                  5       /nU(       d  U R                  R                  U5      $ U$ r   r2   r   MakeRequestsr   only_generate_requestrequestss      r   r&   SecurityPolicy.Deletep   2    ,,./H !!..x88Or   c                 l    U R                  5       /nU(       d  U R                  R                  U5      $ U$ r   r8   r   rL   rM   s      r   DescribeSecurityPolicy.Describev   2    ..01H !!..x88Or   c                 n    U R                  U5      /nU(       d  U R                  R                  U5      $ U$ r   r?   r   rL   )r   r>   rN   rO   s       r   CreateSecurityPolicy.Create|   s4    ,,_=>H !!..x88Or   c                 n    U R                  X5      /nU(       d  U R                  R                  U5      $ U$ r   rH   r   rL   )r   r>   
field_maskrN   rO   s        r   rB   SecurityPolicy.Patch   s6     ++OHIH !!..x88Or   r   r   r   F)NF)NNF)__name__
__module____qualname____firstlineno____doc__r   propertyr   r!   r2   r8   r?   rH   r&   rT   rY   rB   __static_attributes__ r   r   r   r      se    ** 0 0 ) )
K
K
K#9J JOr   r   c                       \ rS rSrSrSS jr\S 5       r\S 5       rS r	S r
S	 rS
 rS rS rS rSS jrSS jr           SS jr             SS jrSrg)SecurityPolicyRule   z&Abstracts SecurityPolicyRule resource.Nc                     Xl         X l        g r   r   r   s      r   r   SecurityPolicyRule.__init__   r   r   c                 .    U R                   R                  $ r   r   r   s    r   r   SecurityPolicyRule._client   r   r   c                 .    U R                   R                  $ r   r   r   s    r   r!   SecurityPolicyRule._messages   r#   r   c                      [        U5      nUS:  a  [        R                  " SS5      eU$ ! [         a    [        R                  " SS5      ef = f)Npriorityz.priority must be a valid non-negative integer.r   )int
ValueErrorcalliope_exceptionsInvalidArgumentException)r   rs   int_prioritys      r   _ConvertPriorityToInt(SecurityPolicyRule._ConvertPriorityToInt   sj    H]l a88
FH H  H88
FH HHs	   , "Ac                 0    SSSSSS.R                  X5      $ )Nz	deny(403)z	deny(404)z	deny(502)redirect_to_recaptcharate_based_ban)zdeny-403zdeny-404zdeny-502zredirect-to-recaptchazrate-based-ban)get)r   actions     r   _ConvertAction!SecurityPolicyRule._ConvertAction   s'    !8* 
c&r   c           	      `   [        U R                  SS 5      b  U R                  R                  SU R                  R                  U R                  R                  U R                  U R                  R                  5       5      U R                  R                  U R                  R                  S94$ U R                  R                  SU R                  R                  U R                  R                  U R                  U R                  R                  5       5      U R                  R                  S94$ )Nr%   
RemoveRuler(   rs   r%   r)   r(   rs   r)   )r+   r   r   r,   r!   .ComputeRegionSecurityPoliciesRemoveRuleRequestr(   ry   r.   r%   r)   r/   (ComputeSecurityPoliciesRemoveRuleRequestr   s    r   r2   *SecurityPolicyRule._MakeDeleteRequestTuple   s    txx4(4ll11<nnKK((**55dhhmmoF!%!8!8	 L :; ; LL))<NNCC((33DHHMMOD#xx66 D 89 9r   c           	      `   [        U R                  SS 5      b  U R                  R                  SU R                  R                  U R                  R                  U R                  U R                  R                  5       5      U R                  R                  U R                  R                  S94$ U R                  R                  SU R                  R                  U R                  R                  U R                  U R                  R                  5       5      U R                  R                  S94$ )Nr%   GetRuler   r   )r+   r   r   r,   r!   +ComputeRegionSecurityPoliciesGetRuleRequestr(   ry   r.   r%   r)   r/   %ComputeSecurityPoliciesGetRuleRequestr   s    r   r8   ,SecurityPolicyRule._MakeDescribeRequestTuple   s    txx4(4ll119nnHH((**55dhhmmoF!%!8!8	 I :; ; LL))9NN@@((33DHHMMOD#xx66 A 89 9r   c           	         U(       aT  U R                   R                  U R                  U R                  R	                  5       5      UU R                  U5      UUS9nOU(       aU  U R                   R                  U R                   R                  R                  S5      U R                   R                  US9S9nO5Uc   eU R                   R                  U R                   R                  US9S9nU(       a  X<l
        U R                   R                  U R                  U R                  R	                  5       5      UU R                  U5      UUS9nUb  Xl        U
b  U R                  U
5      Ul        U	b  Xl        [        U R                  S	S5      bo  U R                   R"                  S
U R                   R%                  U R                  R&                  UU R                  R(                  U R                  R*                  S94$ U R                   R,                  S
U R                   R/                  U R                  R&                  UU R                  R*                  S94$ )a  Generates a SecurityPolicies AddRule request.

Args:
  src_ip_ranges: The list of IP ranges to match.
  expression: The CEVAL expression to match.
  expression_options: The configuration options when specifying a CEVAL
    expression.
  network_matcher: Net LB fields to match.
  action: The action to enforce on match.
  description: The description of the rule.
  preview: If true, the action will not be enforced.
  redirect_options: Parameters defining the redirect action, such as
    redirect type and redirect target.
  rate_limit_options: The rate limiting behavior for this rule.
  request_headers_to_add: A list of headers to add to requests that match
    this rule.

Returns:
  A tuple containing the resource collection, verb, and request.
rs   descriptionr   networkMatchpreview
SRC_IPS_V1srcIpRangesversionedExprconfigN
expressionexprrs   r   r   matchr   r%   AddRule)r(   securityPolicyRuler%   r)   )r(   r   r)   )r!   rj   ry   r   r.   r   SecurityPolicyRuleMatcherVersionedExprValueValuesEnumSecurityPolicyRuleMatcherConfigExprexprOptionsredirectOptions_ConvertRequestHeadersToAddheaderActionrateLimitOptionsr+   r   r,   +ComputeRegionSecurityPoliciesAddRuleRequestr(   r%   r)   r/   %ComputeSecurityPoliciesAddRuleRequest)r   src_ip_rangesr   expression_optionsnetwork_matcherr   r   r   redirect_optionsrate_limit_optionsrequest_headers_to_addsecurity_policy_rulematchers                r   r?   *SecurityPolicyRule._MakeCreateRequestTuple   s,   B !^^>>--dhhmmo>!$$V,& ?  
..::..BB__ >>AA) B 	 ; 
 %%%..::$$
$; ; 
 
0!^^>>--dhhmmo>!$$V, ?  #-=*)*.*J*J
 +"' %.@+txx4(4ll119nnHH((**%9!%!8!8	 I :; ; LL))9NN@@((#7#xx66 A 89 9r   c                    U(       aU  U R                   R                  U R                  U R                  R	                  5       5      UU R                  U5      UUS9nGOSnU(       aU  U R                   R                  U R                   R                  R                  S5      U R                   R                  US9S9nO7U(       a0  U R                   R                  U R                   R                  US9S9nU(       a#  Uc  U R                   R                  5       nX>l
        U R                   R                  U R                  U R                  R	                  5       5      UU R                  U5      UUS9nUb  Xl        U
b  U R                  U
5      Ul        U	b  Xl        Ub  Xl        [!        U R                  S	S5      b  U R"                  R$                  S
U R                   R'                  U R                  R(                  U R                  U R                  R	                  5       5      UU R                  R*                  U R                  R,                  US94$ U R"                  R.                  S
U R                   R1                  U R                  R(                  U R                  U R                  R	                  5       5      UU R                  R,                  US94$ )az  Generates a SecurityPolicies PatchRule request.

Args:
  src_ip_ranges: The list of IP ranges to match.
  expression: The CEVAL expression to match.
  expression_options: The configuration options when specifying a CEVAL
    expression.
  network_matcher: Net LB fields to match.
  action: The action to enforce on match.
  description: The description of the rule.
  preview: If true, the action will not be enforced.
  redirect_options: Parameters defining the redirect action, such as
    redirect type and redirect target.
  rate_limit_options: The rate limiting behavior for this rule.
  request_headers_to_add: A list of headers to add to requests that match
    this rule.
  preconfig_waf_config: preconfigured WAF configuration to be applied for
    this rule.
  update_mask: Field mask for clearing fields

Returns:
  A tuple containing the resource collection, verb, and request.
r   Nr   r   r   r   r   r   r%   	PatchRule)r(   rs   r   r%   r)   rD   )r(   rs   r   r)   rD   )r!   rj   ry   r   r.   r   r   r   r   r   r   r   r   r   r   preconfiguredWafConfigr+   r   r,   -ComputeRegionSecurityPoliciesPatchRuleRequestr(   r%   r)   r/   'ComputeSecurityPoliciesPatchRuleRequest)r   r   r   r   r   r   r   r   r   r   r   preconfig_waf_configrG   r   r   s                  r   rH   )SecurityPolicyRule._MakePatchRequestTuple"  s   L !^^>>--dhhmmo>!$$V,& ?  g	..::..BB__ >>AA) B 	 ; 
 ..::$$
$; ; 
 
?NN<<>'0!^^>>--dhhmmo>!$$V, ?  #-=*)*.*J*J
 +"' %.@+'4H1txx4(4
,,
-
-

..
F
Fhh&&11$((--/B!5XX__!XX44$ G   LL));NNBB((33DHHMMOD#7#xx66& C () )r   c                 *   U R                   R                  5       nUR                  5        Hd  u  p4U R                   R                  5       nUR	                  5       Ul        UR                  5       Ul        UR                  R                  U5        Mf     U$ )a<  Converts a request-headers-to-add string list into an HttpHeaderAction.

Args:
  request_headers_to_add: A dict of headers to add to requests that match
    this rule. Leading whitespace in each header name and value is stripped.

Returns:
  An HttpHeaderAction object with a populated request_headers_to_add field.
)
r!   "SecurityPolicyRuleHttpHeaderActionitems2SecurityPolicyRuleHttpHeaderActionHttpHeaderOptionstrip
headerNamelstripheaderValuerequestHeadersToAddsappend)r   r   header_actionhdr_namehdr_valheader_to_adds         r   r   .SecurityPolicyRule._ConvertRequestHeadersToAdd  s{     NNEEGM399;
..
K
K
M !)!1m").."2m((//> < r   c                 l    U R                  5       /nU(       d  U R                  R                  U5      $ U$ r   rK   rM   s      r   r&   SecurityPolicyRule.Delete  rQ   r   c                 l    U R                  5       /nU(       d  U R                  R                  U5      $ U$ r   rS   rM   s      r   rT   SecurityPolicyRule.Describe  rV   r   c                     U R                  UUUUUUUUU	U
5
      /nU(       d  U R                  R                  U5      $ U$ )zDMake and optionally send a request to Create a security policy rule.rX   )r   r   r   r   r   r   r   r   r   r   r   rN   rO   s                r   rY   SecurityPolicyRule.Create  sX      	$$"	
H !!!..x88Or   c                     U R                  UUUUUUUUU	U
UU5      /nU(       d  U R                  R                  U5      $ U$ )zCMake and optionally send a request to Patch a security policy rule.r\   )r   r   r   r   r   r   r   r   r   r   r   r   rG   rN   rO   s                  r   rB   SecurityPolicyRule.Patch  s^    $ 	##" 	
H  !!!..x88Or   r_   r   r`   )NNNNNNFNNNF)NNNNNNNNNNNNF)ra   rb   rc   rd   re   r   rf   r   r!   ry   r   r2   r8   r?   rH   r   r&   rT   rY   rB   rg   rh   r   r   rj   rj      s    .* 0 0 ) )	99V9pg)R& !!F !!#r   rj   N)re   
__future__r   r   r   googlecloudsdk.callioper   rv   objectr   rj   rh   r   r   <module>r      s3     &  ' EpV pfc cr   