
    ɯei&                     F   d dl Z d dlZd dlmZmZ d dlmZ dZ e j                  e	      Z
g dZe G d d             Ze G d d	             Z G d
 de      Z G d de      Z G d de      ZdefdZdefdZdedefdZdedefdZdedefdZdedefdZdedefdZy)    N)ABCabstractmethod)	dataclass/SNOWFLAKE_CONTAINER_SERVICES_SECRET_PATH_PREFIX)get_generic_secret_stringget_oauth_access_tokenget_secret_typeget_username_passwordget_cloud_provider_tokenUsernamePasswordCloudProviderTokenc                   "    e Zd ZU eed<   eed<   y)r   usernamepasswordN__name__
__module____qualname__str__annotations__     \/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/snowflake/snowpark/secrets.pyr   r      s    MMr   r   c                   ,    e Zd ZU eed<   eed<   eed<   y)r   access_key_idsecret_access_keytokenNr   r   r   r   r   r   "   s    Jr   r   c                       e Zd ZdZededefd       Zededefd       Zededefd       Zedede	fd       Z
ededefd       Zy	)
_SnowflakeSecretszEAbstract class to access Snowflake secrets in different environments.secret_namereturnc                      y Nr   selfr    s     r   r   z+_SnowflakeSecrets.get_generic_secret_string,       r   c                      y r#   r   r$   s     r   r   z(_SnowflakeSecrets.get_oauth_access_token0   r&   r   c                      y r#   r   r$   s     r   r	   z!_SnowflakeSecrets.get_secret_type4   r&   r   c                      y r#   r   r$   s     r   r
   z'_SnowflakeSecrets.get_username_password8   r&   r   c                      y r#   r   r$   s     r   r   z*_SnowflakeSecrets.get_cloud_provider_token<   r&   r   N)r   r   r   __doc__r   r   r   r   r	   r   r
   r   r   r   r   r   r   r   )   s    OS S   # #   3 3    9I   C <N  r   r   c                   h    e Zd ZdZddZdedefdZdedefdZdedefdZdede	fd	Z
dedefd
Zy)_SnowflakeSecretsServerzKSecret instance for Snowflake server environment (using _snowflake module).r!   Nc                     || _         y r#   
_snowflake)r%   snowflake_modules     r   __init__z _SnowflakeSecretsServer.__init__D   s	    *r   r    c                 8    | j                   j                  |      S r#   )r0   r   r$   s     r   r   z1_SnowflakeSecretsServer.get_generic_secret_stringG   s    88EEr   c                 8    | j                   j                  |      S r#   )r0   r   r$   s     r   r   z._SnowflakeSecretsServer.get_oauth_access_tokenJ   s    55kBBr   c                 J    t        | j                  j                  |            S r#   )r   r0   r	   r$   s     r   r	   z'_SnowflakeSecretsServer.get_secret_typeM   s    4??22;?@@r   c                 x    | j                   j                  |      }t        |j                  |j                        S r#   )r0   r
   r   r   r   r%   r    secret_objects      r   r
   z-_SnowflakeSecretsServer.get_username_passwordP   s/    ==kJ 6 68N8NOOr   c                     | j                   j                  |      }t        |j                  |j                  |j
                        S r#   )r0   r   r   r   r   r   r7   s      r   r   z0_SnowflakeSecretsServer.get_cloud_provider_tokenT   s>    @@M!''++
 	
r   )r!   N)r   r   r   r+   r2   r   r   r   r	   r   r
   r   r   r   r   r   r-   r-   A   sw    U+FS FS FC# C# CA3 A3 AP P9I P
C 
<N 
r   r-   c                       e Zd ZdZd ZdededefdZdedefdZdedefdZdedefd	Z	dedefd
Z
dedefdZdedefdZy)_SnowflakeSecretsSPCSzDSecret instance for SPCS container environment (file-based secrets).c                     t        j                  t        d       }|s(t        j	                  dt         d       t        d      |S )NzEnvironment variable 'zN' is not set or empty. This variable must be set to the SPCS secret base path.z%Secret configuration is not available)osgetenv_SCLS_SPCS_SECRET_ENV_NAME_loggerdebug
ValueError)r%   bases     r   _get_scls_spcs_base_pathz._SnowflakeSecretsSPCS._get_scls_spcs_base_path`   sK    yy3T:MM()C(D EJ K DEEr   r    filenamer!   c                     | j                         }t        j                  j                  |||      }t        j                  j	                  |      s't
        j                  d|        t        d| d      t        j                  j                  |      s't
        j                  d|        t        d| d      t        |d      5 }|j                         j                  d      cd d d        S # 1 sw Y   y xY w)NzSecret file not found: Secret '"' does not exist or not authorizedzSecret path is not a file: zutf-8)encodingz
)rD   r=   pathjoinexistsr@   rA   rB   isfileopenreadrstrip)r%   r    rE   rC   secret_pathfs         r   _read_scls_spcs_secret_filez1_SnowflakeSecretsSPCS._read_scls_spcs_secret_filej   s    ,,.ggll4h?ww~~k*MM3K=ABx}4VWXXww~~k*MM7}EFx}4VWXX+0 	+A668??6*	+ 	+ 	+s   C44C=c           	         | j                         }t        j                  j                  ||      }t        j                  j	                  |      s't
        j                  d|        t        d| d      t        j                  j                  |      s't
        j                  d|        t        d| d      t        j                  |      }|D ch c]`  }|j                  d      sMt        j                  j                  t        j                  j                  ||            r|j                         b }}t        |      dk(  r't
        j                  d|        t        d| d      |dd	hk(  ry	t        |      d
k(  rJt        t        |            }|dk(  ry|dk(  ryt
        j                  d| d|        t        d| d      t
        j                  dt!        |       d|        t        d| d      c c}w )NzSecret directory not found: rG   rH   z Secret path is not a directory: .r   z$No secret files found in directory: USERNAMEPASSWORD   SECRET_STRINGGENERIC_STRINGACCESS_TOKENOAUTH2zUnknown secret file type 'z' in directory: zUnknown secret type for ''z,Secret directory contains unexpected files: z in )rD   r=   rJ   rK   rL   r@   rA   rB   isdirlistdir
startswithrM   upperlennextitersorted)r%   r    rC   
secret_direntriesrR   filesfiles           r   _get_scls_spcs_secret_typez0_SnowflakeSecretsSPCS._get_scls_spcs_secret_typev   s   ,,.WW\\$4
ww~~j)MM8EFx}4VWXXww}}Z(MM<ZLIJx}4VWXX**Z( 
<<$ZQR8S)T GGI
 
 u:?MM@MNx}4VWXXZ,,u:?U$D&''06FzlS !#<[M!KLL:6%=/j\Z	
 4[MCDD3
s   A%Hc                 &    | j                  |d      S )Nsecret_stringrS   r$   s     r   r   z/_SnowflakeSecretsSPCS.get_generic_secret_string   s    //_MMr   c                 &    | j                  |d      S )Naccess_tokenrm   r$   s     r   r   z,_SnowflakeSecretsSPCS.get_oauth_access_token   s    //^LLr   c                 $    | j                  |      S r#   )rj   r$   s     r   r	   z%_SnowflakeSecretsSPCS.get_secret_type   s    ..{;;r   c                 b    | j                  |d      }| j                  |d      }t        ||      S )Nr   r   )rS   r   )r%   r    r   r   s       r   r
   z+_SnowflakeSecretsSPCS.get_username_password   s3    33KL33KL(33r   c                     t        d      )NzNCloud provider token secrets are not supported in SPCS container environments.)NotImplementedErrorr$   s     r   r   z._SnowflakeSecretsSPCS.get_cloud_provider_token   s    !\
 	
r   N)r   r   r   r+   rD   r   rS   rj   r   r   r	   r   r
   r   r   r   r   r   r;   r;   ]   s    N
+s 
+c 
+c 
+$Ec $Ec $ELNS NS NM# M# M<3 <3 <4 49I 4

C 
<N 
r   r;   r!   c                  :    t        j                  t        d       d uS r#   )r=   r>   r?   r   r   r   _is_spcs_environmentru      s    99/6dBBr   c                      	 ddl } t        |       S # t        $ r# t               rt	               cY S t        d      dw xY w)zDetect environment and return appropriate secrets instance.

    Imports _snowflake once and passes it to avoid redundant imports.
    r   NzaSecret API is only supported on Snowflake server and Spark Classic's SPCS container environments.)r0   r-   ImportErrorru   r;   rs   r/   s    r   _get_secrets_instancerx      sF    

&z22 !(**%s	s    ==r    c                 4    t               j                  |       S )ap  Get a generic token string from Snowflake.
    Note:
        Require a Snowflake environment with generic secret strings configured
    Returns:
        The secret value as a string.
    Raises:
        NotImplementedError: If running outside Snowflake server or SPCS environment.
        ValueError: If the secret does not exist or is not authorized (SPCS only).
    )rx   r   r    s    r   r   r      s     !"<<[IIr   c                 4    t               j                  |       S )an  Get an OAuth2 access token from Snowflake.
    Note:
        Require a Snowflake environment with OAuth secrets configured
    Returns:
        The OAuth2 access token as a string.
    Raises:
        NotImplementedError: If running outside Snowflake server or SPCS environment.
        ValueError: If the secret does not exist or is not authorized (SPCS only).
    )rx   r   rz   s    r   r   r      s     !"99+FFr   c                 4    t               j                  |       S )ax  Get the type of a secret from Snowflake.
    Note:
        Require a Snowflake environment with secrets configured
    Returns:
        The type of the secret as a string.
    Raises:
        NotImplementedError: If running outside Snowflake server or SPCS environment.
        ValueError: If the secret does not exist, is not authorized, or has unknown type (SPCS only).
    )rx   r	   rz   s    r   r	   r	      s     !"22;??r   c                 4    t               j                  |       S )a  Get a username and password secret from Snowflake.
    Note:
        Require a Snowflake environment with username/password secrets configured
    Returns:
        UsernamePassword: An object with attributes ``username`` and ``password``.
    Raises:
        NotImplementedError: If running outside Snowflake server or SPCS environment.
        ValueError: If the secret does not exist or is not authorized (SPCS only).
    )rx   r
   rz   s    r   r
   r
      s     !"88EEr   c                 4    t               j                  |       S )am  Get a cloud provider token secret from Snowflake.
    Note:
        Require a Snowflake environment with cloud provider secrets configured
    Returns:
        CloudProviderToken: An object with attributes ``access_key_id``,
        ``secret_access_key``, and ``token``.
    Raises:
        NotImplementedError: If running outside Snowflake server environment.
    )rx   r   rz   s    r   r   r      s     !";;KHHr   )loggingr=   abcr   r   dataclassesr   r?   	getLoggerr   r@   __all__r   r   r   r-   r;   boolru   rx   r   r   r   r	   r
   r   r   r   r   <module>r      s    	 # ! O 
'

H
%   
    0
/ 
8Q
- Q
hCd C0 $
J3 
J3 
J
G 
G 
G
@ 
@ 
@
Fs 
F/? 
F
I# 
I2D 
Ir   