
                            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
lmZ ddlmZ dZ G d dej$                        Z G d de      Z G d de      Z G d de      Zd Zd Zd Zd ZddZy)z#Manages logic for service accounts.    )absolute_import)division)unicode_literalsN)config)
exceptions)creds)p12_service_account)filesservice_accountr   c                       e Zd ZdZy)ErrorzErrors raised by this module.N__name__
__module____qualname____doc__     2lib/googlecloudsdk/api_lib/auth/service_account.pyr   r   "   s    %r   r   c                       e Zd ZdZy)UnsupportedCredentialsTypez5Raised when given type credentials cannot be created.Nr   r   r   r   r   r   &   s    =r   r   c                       e Zd ZdZy)BadCredentialFileException Raised when file cannot be read.Nr   r   r   r   r   r   *       (r   r   c                       e Zd ZdZy)BadCredentialJsonFileExceptionr   Nr   r   r   r   r   r   .   r   r   r   c                 :    | xs i j                  d      t        k(  S )zFReturns whether a JSON content corresponds to an service account cred.type)get_SERVICE_ACCOUNT_TYPE)content_jsons    r   IsServiceAccountConfigr$   2   s    

"	!	!&	)-B	BBr   c                     t        j                  |       }	 t        j                  |      }t	        |      S # t
        $ r }t        dj                  | |            d}~ww xY w)z6Load credentials from given service account json file.z!Could not read json file {0}: {1}N)r
   ReadFileContentsjsonloadsCredentialsFromAdcDict
ValueErrorr   format)filenamecontentjson_keyes       r   CredentialsFromAdcFiler0   7   s`    ""8,'zz'"H!(++	 
$%H%O%O!&  s   7 	A  AA c                     d| vrt        d      t        j                  |       | d<   t        j                  j                  | t        j                        }t        j                  x|_	        |_
        |S )zDCreates oauth2client creds from a dict of application default creds.client_email,The .json key file is not in a valid format.	token_uriscopes)r   c_credsGetEffectiveTokenUriFromCredsr   ServiceAccountCredentialsfrom_json_keyfile_dictr   CLOUDSDK_SCOPESCLOUDSDK_USER_AGENT
user_agent_user_agent)r.   r   s     r   r)   r)   B   su    8#
(68 8 "??I(;

3
3
J
Jv-- K /%
 *0)C)CC%U&	,r   c                 @   ddl m} d| vrt        d      t        j                  |       | d<   |j
                  j                  } || t        j                        }| j                  d      |_
        | j                  d      |_        | j                  d	      |_        |S )
zCCreates google-auth creds from a dict of application default creds.r   r   r2   r3   r4   r5   private_keyprivate_key_id	client_id)google.oauth2r   r   r7   r8   Credentialsfrom_service_account_infor   r;   r!   r@   rA   rB   )r.   google_auth_service_accountservice_account_credentialsr   s       r    CredentialsFromAdcDictGoogleAuthrH   S   s    
 K 8#
(68 8 "??I(; "--GG 
%hv7M7M
N% ll=1%!&67%LL-%/	,r   c                 x    t        j                  | ||t        j                  i       t        j
                        S )zGCreates credentials object from given p12 private key and account name.)service_account_emailr4   r6   )r	   CreateP12ServiceAccountr7   r8   r   r;   )r@   accountpasswords      r   CredentialsFromP12KeyrN   r   s7     
	4	4#55b9##
 r   )N)r   
__future__r   r   r   r'   googlecloudsdk.corer   r   googlecloudsdk.core.credentialsr   r7   r	   googlecloudsdk.core.utilr
   oauth2clientr   r"   r   r   r   r   r$   r0   r)   rH   rN   r   r   r   <module>rT      s~    * &  '  & * < ? * () &J &> >) ))U )C
">	r   