
    ɯei                        d dl mZ d dlZd dlZd dlZd dlmZmZ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mZmZ d	d
lmZmZ d	dlmZmZ d	dlmZ ddlmZmZ  e	e       Z! G d de      Z"y)    )annotationsN)datetime	timedeltatimezone)	getLogger)Any)default_backend)RSAPrivateKey)EncodingPublicFormatload_der_private_key   )ER_CONNECTION_TIMEOUTER_INVALID_PRIVATE_KEY)OperationalErrorProgrammingError)KEY_PAIR_AUTHENTICATOR   )AuthByPluginAuthTypec                       e Zd ZdZdZdZdZdZdZdZ	dZ
dZe	f	 	 	 	 	 d fd	Zdd
Zedd       Z	 	 	 	 	 	 	 	 ddZddZed        ZddZddZddZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZedd       Z xZS )AuthByKeyPairzKey pair based authentication.RS256isssubexpiat<   
   c           
        t        |   d	dt        t        j                  dt
        j                              i| t        t        t        t        j                  dt
        j                                    j                               | _
        || _        d| _        d| _        t        t        t        j                  d|                  | _        y)
a#  Inits AuthByKeyPair class with private key.

        Args:
            private_key: a byte array of der formats of private key, or an
                object that implements the `RSAPrivateKey` interface.
            lifetime_in_seconds: number of seconds the JWT token will be valid
        max_retry_attemptsJWT_CNXN_RETRY_ATTEMPTSJWT_CNXN_WAIT_TIME)seconds r   JWT_LIFETIME_IN_SECONDSN )super__init__intosgetenvr   DEFAULT_JWT_RETRY_ATTEMPTSr   DEFAULT_JWT_CNXN_WAIT_TIMEtotal_seconds_socket_timeout_private_key
_jwt_token_jwt_token_exp	_lifetime)selfprivate_keylifetime_in_secondskwargs	__class__s       b/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/snowflake/connector/auth/keypair.pyr)   zAuthByKeyPair.__init__(   s     	 	
"		-}/W/W 	
 	
  #II,%@@ mo	 
 AL"		";=PQR
    c                    d | _         y N)r1   r5   s    r:   reset_secretszAuthByKeyPair.reset_secretsQ   s
     r;   c                "    t         j                  S r=   )r   KEY_PAIRr>   s    r:   type_zAuthByKeyPair.type_T   s       r;   c               :   d|v r|j                  d      d   }n|j                  d      d   }|j                         }|j                         }t        j                  t        j
                        j                  d       }t        | j                  t              r%	 t        j                  | j                        | _        t        | j                  t              rZ	 t!        | j                  d t#               	      }t        |t$              sqt        d|j&                  j(                   dt              t        | j                  t$              r| j                  }n!t+        dt-        | j                               | j/                  |      }|| j0                  z   | _        | j4                  | d| d| | j6                  | d| | j8                  || j:                  | j2                  i}t=        j>                  ||| j@                        }	t        |	t              r"|	jC                  d      | _"        | jD                  S |	| _"        | jD                  S # t        $ r}t        d| dt              d }~ww xY w# t        $ r}t        d
| dt              d }~ww xY w)Nz.global-r   .)tzinfozFailed to decode private key: z`
Please provide a valid unencrypted rsa private key in base64-encoded DER format as a str object)msgerrno)datapasswordbackendzFailed to load private key: zQ
Please provide a valid unencrypted rsa private key in DER format as bytes objectzPrivate key type (zU) not supported.
Please provide a valid rsa private key in DER format as bytes objectz%Expected bytes or RSAPrivateKey, got )	algorithmutf-8)#	partitionupperr   nowr   utcreplace
isinstancer1   strbase64	b64decode	Exceptionr   r   bytesr   r	   r
   r9   __name__	TypeErrortype calculate_public_key_fingerprintr4   r3   ISSUERSUBJECT
ISSUE_TIMEEXPIRE_TIMEjwtencode	ALGORITHMdecoder2   )
r5   accountuserr8   rP   er6   public_key_fppayloadr2   s
             r:   preparezAuthByKeyPair.prepareX   s{    '',Q/G'',Q/G--/zz|ll8<<(000=d''-$*$4$4T5F5F$G! d''/2**!+- k=9&,[-B-B-K-K,L M  1	  ))=9++K7T=N=N8O7PQ  ==kJ!DNN2KKG9AdV1]O<LLWIQtf-OOSd11	
 ZZO
 j%((//8DO  )DOo  &8 <! ! 1	   &6qc :P P0 s0   $I  I7 	I4I//I47	J JJc                
    ddiS )NsuccessFr'   )r5   r8   s     r:   reauthenticatezAuthByKeyPair.reauthenticate   s    5!!r;   c                ^   | j                         j                  t        j                  t        j
                        }t        j                         }|j                  |       dt        j                  |j                               j                  d      z   }t        j                  d|       |S )NzSHA256:rM   zPublic key fingerprint is %s)
public_keypublic_bytesr   DERr   SubjectPublicKeyInfohashlibsha256updaterU   	b64encodedigestrd   loggerdebug)r6   public_key_der
sha256hashrh   s       r:   r\   z.AuthByKeyPair.calculate_public_key_fingerprint   s     %//1>>LL,;;

 ^^%
.)!F$4$4Z5F5F5H$I$P$P%
 
 	3]Cr;   c                @    t         |d   d<   | j                  |d   d<   y )NrI   AUTHENTICATORTOKEN)r   r2   )r5   bodys     r:   update_bodyzAuthByKeyPair.update_body   s"    (>V_% $VWr;   c                    | j                   S r=   )r2   r>   s    r:   assertion_contentzAuthByKeyPair.assertion_content   s    r;   c                     || j                   k  S r=   )_jwt_retry_attempts)r5   counts     r:   should_retryzAuthByKeyPair.should_retry   s    t////r;   c                   t         j                  d       t        |   |||||d       t         j                  d       | j	                  ||       y )NzInvoking base timeout handlerF)authenticatorservice_namere   rf   rJ   delete_paramsz@Base timeout handler passed, preparing new token before retrying)re   rf   )rx   ry   r(   handle_timeoutrj   )r5   r   r   re   rf   rJ   r8   r9   s          r:   r   zAuthByKeyPair.handle_timeout   sU     	45'% 	 	
 	WXW40r;   c                *    | j                   t        u ryy)NTF)rH   r   )ops    r:   can_handle_exceptionz"AuthByKeyPair.can_handle_exception   s    88,,r;   )r6   zbytes | str | RSAPrivateKeyr7   r*   returnNone)r   r   )r   r   )re   rT   rf   rT   r8   r   r   rT   )r8   r   r   zdict[str, bool])r   zdict[Any, Any]r   r   )r   rT   )r   r*   r   bool)r   rT   r   
str | Nonere   rT   rf   rT   rJ   r   r8   r   r   r   )r   r   r   r   )rY   
__module____qualname____doc__rc   r]   r^   r`   r_   LIFETIMEr-   r.   r)   r?   propertyrB   rj   rm   staticmethodr\   r   r   r   r   r   __classcell__)r9   s   @r:   r   r      s*   (IFGKJH!#!#
 $,'
0'
 !'

 
'
R! ! !J J 	J
 J 
JX"  "001 1 !	1
 1 1 1 1 
1.  r;   r   )#
__future__r   rU   rs   r+   r   r   r   loggingr   typingr   ra   cryptography.hazmat.backendsr	   -cryptography.hazmat.primitives.asymmetric.rsar
   ,cryptography.hazmat.primitives.serializationr   r   r   	errorcoder   r   errorsr   r   networkr   	by_pluginr   r   rY   rx   r   r'   r;   r:   <module>r      sW    "   	 2 2   
 8 G  F 7 , -	8	BL Br;   