
    D(                     >   d Z ddlmZ ddlmZ ddlm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 d
dddZd
dddZd Zd Zd Z ej$                  ej&                  j(                        ej*                   G d dej,                                      Z ej$                  ej&                  j0                        ej*                   G d dej,                                      Z ej$                  ej&                  j4                         G d dej,                               Zy)zCommand to query activities.    )absolute_import)division)unicode_literalsN)
list_pager)policy_analyzer)arg_parsers)basez,Query activities on cloud resource.
        z     Query activities with certain types of specific container resource. For --activity-type, supported values are:
     - serviceAccountLastAuthentication
     - serviceAccountKeyLastAuthentication
        aU      To query serviceAccountKeyLastAuthentication activities of a project, run:

    $ {command} --activity-type=serviceAccountKeyLastAuthentication --project=project-id

    To query serviceAccountLastAuthentication activities of a project with no limit, run:

    $ {command} --activity-type=serviceAccountLastAuthentication --project=project-id --limit=unlimited

    To query serviceAccountLastAuthentication with filtering on certain service account, run:

    $ {command} --activity-type=serviceAccountLastAuthentication --project=project-id --query-filter='activities.full_resource_name="//iam.googleapis.com/projects/project-id/serviceAccounts/service-account-name@project-id.iam.gserviceaccount.com"'

    To query serviceAccountLastAuthentication with filtering on multiple service accounts, run:

    $ {command} --activity-type=serviceAccountLastAuthentication --project=project-id --query-filter='activities.full_resource_name="//iam.googleapis.com/projects/project-id/serviceAccounts/service-account-name-1@project-id.iam.gserviceaccount.com" OR activities.full_resource_name="//iam.googleapis.com/projects/project-id/serviceAccounts/service-account-name-2@project-id.iam.gserviceaccount.com" OR activities.full_resource_name="//iam.googleapis.com/projects/project-id/serviceAccounts/service-account-name-3@project-id.iam.gserviceaccount.com"'
        )briefDESCRIPTIONEXAMPLESz     Query activities with certain types of specific container resource. For --activity-type, supported values are:
     - serviceAccountLastAuthentication
     - serviceAccountKeyLastAuthentication
     - dailyAuthorization
        a      To query serviceAccountKeyLastAuthentication activities of a project, run:

    $ {command} --activity-type=serviceAccountKeyLastAuthentication --project=project-id

    To query serviceAccountLastAuthentication activities of a project with no limit, run:

    $ {command} --activity-type=serviceAccountLastAuthentication --project=project-id --limit=unlimited

    To query serviceAccountLastAuthentication with filtering on certain service account, run:

    $ {command} --activity-type=serviceAccountLastAuthentication --project=project-id --query-filter='activities.full_resource_name="//iam.googleapis.com/projects/project-id/serviceAccounts/service-account-name@project-id.iam.gserviceaccount.com"'

    To query serviceAccountLastAuthentication with filtering on multiple service accounts, run:

    $ {command} --activity-type=serviceAccountLastAuthentication --project=project-id --query-filter='activities.full_resource_name="//iam.googleapis.com/projects/project-id/serviceAccounts/service-account-name-1@project-id.iam.gserviceaccount.com" OR activities.full_resource_name="//iam.googleapis.com/projects/project-id/serviceAccounts/service-account-name-2@project-id.iam.gserviceaccount.com" OR activities.full_resource_name="//iam.googleapis.com/projects/project-id/serviceAccounts/service-account-name-3@project-id.iam.gserviceaccount.com"'

    To query dailyAuthorization activities of a project, run:

    $ {command} --activity-type=dailyAuthorization --project=project-id

    To query dailyAuthorization of a project with filtering on certain resource, permission, principal and date, run:

    $ {command} --activity-type=dailyAuthorization --project=project-id --query-filter='activities.activity.full_resource_name="<full_resource_name>" AND activities.activity.permission="<permission_name>" AND activities.activity.principal="<principal_email>" AND activities.activity.date="<YYYY-MM-DD>"'
    c                    | j                  ddt        ddgd       | j                  d      j                  dt        d	
       | j                  dt        dd       | j                  dt        j                  dt
        j                  d      dd       | j                  dt        j                  dd      dd       y)"Parses arguments for the commands.--activity-typeT serviceAccountLastAuthentication#serviceAccountKeyLastAuthenticationType of the activities.
      requiredtypechoiceshelpr   	--project8The project ID or number to query the activities.
      r   r   --query-filter a  Filter on activities, separated by "OR" if multiple filters are specified. At most 10 filter restrictions are supported in the query-filter. e.g. --query-filter='activities.full_resource_name="//iam.googleapis.com/projects/project-id/serviceAccounts/service-account-name-1@project-id.iam.gserviceaccount.com" OR activities.full_resource_name="//iam.googleapis.com/projects/project-id/serviceAccounts/service-account-name-2@project-id.iam.gserviceaccount.com"'r   defaultr   --limit   	unlimited  `Max number of query result. Default to be 1000 and max to be unlimited, i.e., --limit=unlimited.--page-size  KMax page size for each http response. Default to be 500 and max to be 1000.Nadd_argumentstradd_mutually_exclusive_groupr   
BoundedIntsysmaxsizeparsers    1lib/surface/policy_intelligence/query_activity.py_Argsr3   c   s    
,
/
  	 	%%t%4AA
 B 
 	 [	   	!!!S[[DAm	   	!!!T*X	      c                    | j                  ddt        g dd       | j                  d      j                  dt        d	       | j                  d
t        dd       | j                  dt        j                  dt
        j                  d      dd       | j                  dt        j                  dd      dd       y)r   r   T)r   r   dailyAuthorizationr   r   r   r   r   r   r   r   a  Filter on activities. 

      For last authentication activities, this field is separated by "OR" if multiple filters are specified. At most 10 filter restrictions are supported in the query-filter. 

        e.g. --query-filter='activities.full_resource_name="//iam.googleapis.com/projects/project-id/serviceAccounts/service-account-name-1@project-id.iam.gserviceaccount.com" OR activities.full_resource_name="//iam.googleapis.com/projects/project-id/serviceAccounts/service-account-name-2@project-id.iam.gserviceaccount.com"'

      For daily authorization activities, this field is separated by "OR" and "AND". At most 10 filter restrictions per layer and at most 2 layers are supported in the query-filter. 

        e.g. --query-filter='activities.activity.date="2022-01-01" AND activities.activity.permission="spanner.databases.list" AND (activities.activity.principal="principal_1@your-organization.com" OR activities.activity.principal="principal_2@your-organization.com")'r   r    r!   r"   r$   r%   r&   r'   r(   Nr)   r0   s    r2   
_ArgsAlphar7      s    
  	 	%%t%4AA
 B 
 	Q	  	 	!!!S[[DAm	   	!!!T*X	  r4   c           	      8   t        j                         \  }}dj                  | j                  | j                        }|j                  || j                        }|j                  |      }t        j                  ||d| j                  d| j                  d      S )Nz/projects/{0}/locations/global/activityTypes/{1})parentfilterQuery
activitiespageSize)method
batch_sizefieldlimitbatch_size_attribute)r   GetClientAndMessagesformatprojectactivity_typeBPolicyanalyzerProjectsLocationsActivityTypesActivitiesQueryRequestquery_filter/ProjectsLocationsActivityTypesActivitiesServicer   YieldFromList	page_sizerA   )argspolicy_analyzer_clientmessagesquery_activity_parentquery_activity_requestpolicy_analyzer_services         r2   _RunrR      s    %4%I%I%K"(KRR
llD&&(#ff"4+<+< g >2bb		!	!JJ%
' 'r4   c                   *    e Zd ZdZeZed        Zd Zy)QueryActivityAlpha#Query activities on cloud resource.c                     t        |        yr   N)r7   r0   s    r2   ArgszQueryActivityAlpha.Args   s     vr4   c                     t        |      S NrR   selfrL   s     r2   RunzQueryActivityAlpha.Run       :r4   N)	__name__
__module____qualname____doc___DETAILED_HELP_ALPHAdetailed_helpstaticmethodrX   r^    r4   r2   rT   rT      s#     ,&- r4   rT   c                   *    e Zd ZdZeZed        Zd Zy)QueryActivityBetarU   c                     t        |        yrW   r3   r0   s    r2   rX   zQueryActivityBeta.Args        
&Mr4   c                     t        |      S rZ   r[   r\   s     r2   r^   zQueryActivityBeta.Run   r_   r4   N	r`   ra   rb   rc   _DETAILED_HELPre   rf   rX   r^   rg   r4   r2   ri   ri      s#     , - r4   ri   c                   *    e Zd ZdZeZed        Zd Zy)QueryActivityGArU   c                     t        |        yrW   rk   r0   s    r2   rX   zQueryActivityGA.Args   rl   r4   c                     t        |      S rZ   r[   r\   s     r2   r^   zQueryActivityGA.Run   r_   r4   Nrn   rg   r4   r2   rq   rq      s!    + - r4   rq   )rc   
__future__r   r   r   r.   apitools.base.pyr   *googlecloudsdk.api_lib.policy_intelligencer   googlecloudsdk.callioper   r	   ro   rd   r3   r7   rR   ReleaseTracksReleaseTrackALPHAHiddenCommandrT   BETAri   GArq   rg   r4   r2   <module>r      s"   # &  ' 
 ' F / (			@			% P"J&R'$ D%%++,   - D%%**+   , D%%(()dll  *r4   