
    i$&                         d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZmZmZmZ d Zd Zd	 ZddZddZdedefdZd Zd Zd Z ej        de            ej        de           dS )    N)urlparseparse_qs)AzureAppConfigurationClient)SecretClient)ResourceNotFoundError)ClientSecretCredentialCertificateCredentialManagedIdentityCredentialChainedTokenCredentialEnvironmentCredentialc                     |                      d|                      d                    }||                                }|dk    rd }|S )NauthenticationmethodAZURE_DEFAULT)getupper)
parametersauth_methods     v/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/oracledb/plugins/azure_config_provider.py_get_authentication_methodr   2   sO    ..!1:>>(3K3KLLK!''))/))K    c           
         g }t          |           }||dk    rd| v rO|                    t          t          | d          t          | d          t          | d                               nRd| v rN|                    t	          t          | d          t          | d          t          | d                               ||dk    r:|                     d          }|#|                    t          |	                     t          |          d
k    rd}t          |          t          |          dk    r|d
         S |                    t                                 t          | S )zi
    Returns the appropriate credential given the input supplied by the original
    connect string.
    NAZURE_SERVICE_PRINCIPALazure_client_secretazure_tenant_idazure_client_idazure_client_certificate_pathAZURE_MANAGED_IDENTITY azure_managed_identity_client_id)	client_idr   z>Authentication options were not available in Connection String   )r   appendr   _get_required_parameterr	   r   r
   len	Exceptionr   r   )r   tokensr   r    messages        r   _get_credentialr(   ;   s    F,Z88Kk-FFF J..MM&+J8IJJ+J8IJJ+J8MNN     -
::MM%+J8IJJ+J8IJJ+"$C     k-EEENN#EFF	 MM3iHHHIII
6{{aL 	    	V		ay
MM'))***!6**r   c                 4   	 t          j        |           }n$# t           j        $ r d}t          |          w xY w|                    d          |d<   d|d<   i x|d<   }t          |          x|d<   }||dk    r}d	|v r:t          |d
          |d
<   t          |d          |d<   t          |d	          |d	<   n?d|v r;t          |d
          f|d
<   t          |d          f|d<   t          |d          |d<   ||dk    r|                    d          |d<   |S )Nz?Password is expected to be JSON containing Azure Vault details.urivalue
azurevaulttyper   r   r   r   r   r   r   r   r   )jsonloadsJSONDecodeErrorr%   popr   r#   r   )
pwd_stringr   pwdr'   r   r   s         r   _get_passwordr4   g   s   !j$$ ! ! !/ 	    ! 775>>CLCK .0/CN-G. . N8{ k-FFF J..0G-1 1N,- 1H-1 1N,- 5L15 5N011 -
::'
4EFF1N,- (
4EFF1N,- ( ?  :; k-EEE=G^^.>
 >
9: Js    !8connection stringc                 `    	 | |         S # t           $ r d| d| }t          |          d w xY w)NzParameter named "z" is missing from )KeyErrorr%   )r   namelocationr'   s       r   r#   r#      sR    +$ + + +HdHHhHH  d*+s   
 #-Tc                     	 |                     d          r| | }n| d| }|                     ||          }n'# t          $ r |rd| }t          |          Y dS w xY w|j        S )zL
    Returns the configuration setting given the client, key and label.
    /)keylabelz$Missing required configuration key: N)endswithget_configuration_settingr   r%   r+   )clientr<   sub_keyr=   required
actual_keyobjr'   s           r   _get_settingrE      s    
<< 	,***JJ++'++J..:U.KK     	%IZIIGG$$$tt	
 9s   :=  A! A!protocol_argreturnc                 @   |                      d          }t          | |dz   d                   }t          |j                  }d |                                D             }| d|                             d          }|                    d          s|dz  }||d<   |S )zA
    Parse the parameters from the protocol argument string.
    ?r!   Nc                 J    i | ] \  }}|                                 |d          !S )r   )lower).0r<   r+   s      r   
<dictcomp>z%_parse_parameters.<locals>.<dictcomp>   s7       ",#u		U1X  r   r;   z.azconfig.ioappconfigname)findr   r   pathitemsrstripr>   )rF   pos
parsed_urlparsed_valuesr   config_names         r   _parse_parametersrW      s     

C
 
 C,sQwyy122JZ_--M 0=0C0C0E0E  J tt$++C00K// &~%"-Jr   c                    t          | dd          }|                     d          }|5|                     d          }|t          d          t          |          }t	          j        d          }|                    |          }|t          d          |                    d          }|                    d	          }t          ||          }|	                    |          j
        S )
Nr+   z"password" key section
credentialr   z5Azure Vault authentication details were not provided.zT(?P<vault_url>https://[A-Za-z0-9._-]+)/secrets/(?P<secretKey>[A-Za-z][A-Za-z0-9-]*)$zInvalid Azure Vault details	vault_url	secretKey)r#   r   r%   r(   recompilematchgroupr   
get_secretr+   )	argsr*   rY   authpatternr^   rZ   
secret_keysecret_clients	            r   password_type_azure_vault_hookrf      s    
!$1I
J
JC,''J xx())<G   %T**
j	9 G MM#E}5666K((I[))J J77M##J//55r   c                 >   t          |           }t          dt          | d          z   |          }t          | d          }|                     d          }i }t	          ||d|          |d<   t	          ||d|d          |d<   t	          ||d	|d          }|t          ||           |d	<   t	          ||d|d          |d<   t	          ||d|d          |d<   t	          ||d|d          }|t          j        |          |d<   |                    |           d
S )zR
    Processes the configuration stored in the Azure App configuration store.
    zhttps://rN   r<   r=   connect_descriptoruserF)rB   passwordNconfig_time_to_live config_time_to_live_grace_periodpyo)	r(   r   r#   r   rE   r4   r.   r/   set_from_config)	r   connect_paramsrY   r@   r<   r=   configr3   settingss	            r   _process_configrr      sj   
 !,,J(,ZIII F "*e
4
4CNN7##E F#/)5$ $F  "&#vuuMMMF6N
vsJ
F
F
FC
*3
;;z$0*EE% % %F ! 2>72 2 2F-.
 FCFFFH
8,,u ""6*****r   c                 D    t          |          }t          ||           dS )zN
    Hook for handling parameters stored in an Azure configuration store.
    N)rW   rr   )protocolrF   ro   r   s       r   config_azure_hookru   	  s'     #<00JJ/////r   r,   zconfig-azure)r5   )T)r.   r\   oracledburllib.parser   r   azure.appconfigurationr   azure.keyvault.secretsr   azure.core.exceptionsr   azure.identityr   r	   r
   r   r   r   r(   r4   r#   rE   strdictrW   rf   rr   ru   register_password_typeregister_protocol r   r   <module>r      s  @  				  + + + + + + + + > > > > > > / / / / / / 7 7 7 7 7 7               )+ )+ )+X1 1 1h+ + + +   $C D    "6 6 68$+ $+ $+N0 0 0   .L M M M  >+< = = = = =r   