Ë
    ùmxi¥(  ã                   óD  — d Z ddlZddlZddl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mZmZ dZdZd	Zd
„ Z G d„ dej$                  ¬«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z e«        e«        e«       fD � ci c]  } | j.                  | “Œ c} Zyc c} w )z" Challenges for reauthentication.
é    N)Ú_helpers)Ú
exceptions)Úwebauthn_handler_factory)Ú$AuthenticationExtensionsClientInputsÚ
GetRequestÚPublicKeyCredentialDescriptorzhttps://accounts.google.comzFPlease run `gcloud auth login` to complete reauthentication with SAML.iÀÔ c                 ó,   — t        j                   | «      S )zìGet password from user.

    Override this function with a different logic if you are using this library
    outside a CLI.

    Args:
        text (str): message for the password prompt.

    Returns:
        str: password string.
    )Úgetpass)Útexts    úO/home/htdocs/ttos/venv/lib/python3.12/site-packages/google/oauth2/challenges.pyÚget_user_passwordr   (   s   € ô �?‰?˜4Ó Ð ó    c                   ó�   — e Zd ZdZeej                  d„ «       «       Zeej                  d„ «       «       Zej                  d„ «       Z	y)ÚReauthChallengez!Base class for reauth challenges.c                 ó   — t        d«      ‚)z"Returns the name of the challenge.z!name property must be implemented©ÚNotImplementedError©Úselfs    r   ÚnamezReauthChallenge.name:   s   € ô "Ð"EÓFÐFr   c                 ó   — t        d«      ‚)zAReturns true if a challenge is supported locally on this machine.z0is_locally_eligible property must be implementedr   r   s    r   Úis_locally_eligiblez#ReauthChallenge.is_locally_eligible@   s   € ô "Ð"TÓUÐUr   c                 ó   — t        d«      ‚)ac  Performs logic required to obtain credentials and returns it.

        Args:
            metadata (Mapping): challenge metadata returned in the 'challenges' field in
                the initial reauth request. Includes the 'challengeType' field
                and other challenge-specific fields.

        Returns:
            response that will be send to the reauth service as the content of
            the 'proposalResponse' field in the request body. Usually a dict
            with the keys specific to the challenge. For example,
            ``{'credential': password}`` for password challenge.
        z1obtain_challenge_input method must be implementedr   ©r   Úmetadatas     r   Úobtain_challenge_inputz&ReauthChallenge.obtain_challenge_inputF   s   € ô "Ð"UÓVÐVr   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚpropertyÚabcÚabstractmethodr   r   r   © r   r   r   r   7   sg   „ Ù+àØ×ÑñGó ó ðGð Ø×ÑñVó ó ðVð 	×ÑñWó ñWr   r   )Ú	metaclassc                   ó`   — e Zd ZdZed„ «       Zed„ «       Z ej                  e	«      d„ «       Z
y)ÚPasswordChallengez(Challenge that asks for user's password.c                  ó   — y)NÚPASSWORDr$   r   s    r   r   zPasswordChallenge.name[   s   € àr   c                  ó   — y©NTr$   r   s    r   r   z%PasswordChallenge.is_locally_eligible_   ó   € àr   c                 ó(   — t        d«      }|sd}d|iS )NzPlease enter your password:ú Ú
credential)r   )r   Úunused_metadataÚpasswds      r   r   z(PasswordChallenge.obtain_challenge_inputc   s    € ä"Ð#@ÓAˆÙØˆFØ˜fÐ%Ð%r   N)r   r   r   r    r!   r   r   r   Úcopy_docstringr   r   r$   r   r   r'   r'   X   sL   „ Ù2àñó ðð ñó ðð €X×Ñ˜_Ó-ñ&ó .ñ&r   r'   c                   ól   — e Zd ZdZed„ «       Zed„ «       Z ej                  e	«      d„ «       Z
d„ Zd„ Zy)ÚSecurityKeyChallengez2Challenge that asks for user's security key touch.c                  ó   — y)NÚSECURITY_KEYr$   r   s    r   r   zSecurityKeyChallenge.namen   s   € àr   c                  ó   — yr+   r$   r   s    r   r   z(SecurityKeyChallenge.is_locally_eligibler   r,   r   c                 ó6  — 	 t        j                  «       }|j                  «       }|�1t        j                  j                  d«       | j                  ||«      S 	 	 dd l}dd l	}dd l
}|d   }|d   }|d   }|d   }||k7  r||g}	n|g}	g }
|D ]Š  }|d   j                  d	«      }|j                  j!                  t#        t%        j&                  |«      «      «      }|d
   j                  d	«      }t%        j&                  |«      }|
j)                  ||dœ«       ŒŒ d}|	D ]b  }	 |dz  }|j*                  j,                  j/                  t0        «      }|j3                  ||
t        j                  j
                  ¬«      }d|ic S  y # t        $ r Y �Œ5w xY w# t        $ r t        j                  d«      ‚w xY w# |j4                  j6                  $ rÀ}|j8                  |j4                  j6                  j:                  k(  r9|t=        |	«      k(  r%t        j                  j                  d«       Y d }~ y Y d }~�Œ|j8                  |j4                  j6                  j>                  k(  r t        j                  j                  d«       n|‚Y d }~ y d }~w|j4                  j@                  $ r9}t        j                  j                  djC                  |«      «       Y d }~�Œ¼d }~w|j4                  jD                  $ r# t        j                  j                  d«       Y  y w xY w)Nz*Please insert and touch your security key
r   z’pyu2f dependency is required to use Security key reauth feature. It can be installed via `pip install pyu2f` or `pip install google-auth[reauth]`.ÚsecurityKeyÚ
challengesÚapplicationIdÚrelyingPartyIdÚ	keyHandleÚasciiÚ	challenge)Úkeyr?   é   )Úprint_callbackzIneligible security key.
z0Timed out while waiting for security key touch.
zPlugin error: {}.
zNo security key found.
)#r   ÚWebauthnHandlerFactoryÚget_handlerÚsysÚstderrÚwriteÚ _obtain_challenge_input_webauthnÚ	ExceptionÚpyu2f.convenience.authenticatorÚpyu2f.errorsÚpyu2f.modelÚImportErrorr   ÚReauthFailErrorÚencodeÚmodelÚRegisteredKeyÚ	bytearrayÚbase64Úurlsafe_b64decodeÚappendÚconvenienceÚauthenticatorÚCreateCompositeAuthenticatorÚREAUTH_ORIGINÚAuthenticateÚerrorsÚU2FErrorÚcodeÚDEVICE_INELIGIBLEÚlenÚTIMEOUTÚPluginErrorÚformatÚNoDeviceFoundError)r   r   ÚfactoryÚwebauthn_handlerÚpyu2fÚskr:   Úapplication_idÚrelying_party_idÚapplication_parametersÚchallenge_dataÚcÚkhr@   r?   ÚtriesÚapp_idÚapiÚresponseÚes                       r   r   z+SecurityKeyChallenge.obtain_challenge_inputv   sé  € ð	Ü.×EÑEÓGˆGØ&×2Ñ2Ó4ÐØÐ+Ü—
‘
× Ñ Ð!NÔOØ×<Ñ<¸XÐGWÓXÐXð ,ð	Û2ÛÛð �mÑ$ˆØ˜Ñ%ˆ
ð ˜OÑ,ˆØÐ.Ñ/ÐàÐ-Ò-Ø&6¸Ð%GÑ"à&4Ð%5Ð"àˆØò 	HˆAØ�;‘×&Ñ& wÓ/ˆBØ—+‘+×+Ñ+¬I´f×6NÑ6NÈrÓ6RÓ,SÓTˆCØ˜+™×-Ñ-¨gÓ6ˆIÜ×0Ñ0°Ó;ˆIØ×!Ñ!¨#¸IÑ"FÕGð	Hð ˆØ,ò 	ˆFð=Ø˜‘
�Ø×'Ñ'×5Ñ5×RÑRÜ!ó�ð ×+Ñ+Ø˜N¼3¿:¹:×;KÑ;Kð ,ó �ð & xÐ0Ò0ñ	øôK ò 	âð	ûô ò 	Ü×,Ñ,ðdóð ð	ûðN —<‘<×(Ñ(ò Ø—6‘6˜UŸ\™\×2Ñ2×DÑDÒDà¤Ð$:Ó ;Ò;ÜŸ
™
×(Ñ(Ð)EÔFÝ#ÝØ—6‘6˜UŸ\™\×2Ñ2×:Ñ:Ò:Ü—J‘J×$Ñ$ØKõð �Gó	ñ ûð —<‘<×+Ñ+ò Ü—
‘
× Ñ Ð!6×!=Ñ!=¸aÓ!@ÔAÝûØ—<‘<×2Ñ2ò =Ü—
‘
× Ñ Ð!;Õ<Ùð=úsQ   ‚AF ÁF Ä!AF5Æ	FÆFÆF2Æ5LÇAJ	È4AJ	Ê	LÊ%.KË;LÌLc           	      ó$  — |j                  d«      }|€t        j                  d«      ‚|j                  d«      }|j                  d«      }|j                  d«      }|�t        |«      dk  rt        j                  d«      ‚|€t        j                  d«      ‚|€t        j                  d	«      ‚g }|D ]V  }|j                  d
«      }	|	€t        j                  d«      ‚| j	                  |	«      }
|j                  t        |
¬«      «       ŒX t        |¬«      }|d   j                  d«      }|€t        j                  d«      ‚t        t        || j	                  |«      t        |d|¬«      }	 |j                  |«      }|j                   j"                  |j                   j$                  |j                   j&                  ||j(                  ddœ}d|iS # t        $ r5}t        j                  j                  dj                  |«      «       |‚d }~ww xY w)Nr9   zsecurityKey is Noner:   r;   r<   rA   zchallenges is None or emptyzapplication_id is Nonezrelying_party_id is Noner=   zkeyHandle is None)Úid)Úappidr   r?   zchallenge is NoneÚ	preferred)ÚoriginÚrpidr?   Ú
timeout_msÚallow_credentialsÚuser_verificationÚ
extensionszWebauthn Error: {}.
é   )Ú
clientDataÚauthenticatorDataÚsignatureDatar;   r=   ÚsecurityKeyReplyType)Úgetr   ÚInvalidValuer_   Ú_unpadded_urlsafe_b64recoderU   r   r   r   rY   ÚWEBAUTHN_TIMEOUT_MSrI   rE   rF   rG   rb   rq   Úclient_data_jsonÚauthenticator_dataÚ	signaturert   )r   r   re   rg   r:   rh   ri   rz   r?   rm   Ú
key_handleÚ	extensionÚget_requestÚget_responserr   rq   s                   r   rH   z5SecurityKeyChallenge._obtain_challenge_input_webauthnÂ   s  € Ø�\‰\˜-Ó(ˆØˆ:Ü×)Ñ)Ð*?Ó@Ð@Ø—V‘V˜LÓ)ˆ
ØŸ™ Ó0ˆØŸ6™6Ð"2Ó3ÐØÐ¤ Z£°1Ò!4Ü×)Ñ)Ð*GÓHÐHØÐ!Ü×)Ñ)Ð*BÓCÐCØÐ#Ü×)Ñ)Ð*DÓEÐEàÐØ#ò 	SˆIØ—‘˜{Ó+ˆBØˆzÜ ×-Ñ-Ð.AÓBÐBØ×9Ñ9¸"Ó=ˆJØ×$Ñ$Ô%BÀjÔ%QÕRð	Sô 9¸~ÔNˆ	à˜q‘M×%Ñ% kÓ2ˆ	ØÐÜ×)Ñ)Ð*=Ó>Ð>ä Ü Ø!Ø×6Ñ6°yÓAÜ*Ø/Ø)Ø ô
ˆð	Ø+×/Ñ/°Ó<ˆLð '×/Ñ/×@Ñ@Ø!-×!6Ñ!6×!IÑ!IØ)×2Ñ2×<Ñ<Ø+Ø%Ÿ™Ø$%ñ
ˆð ˜xÐ(Ð(øô ò 	Ü�J‰J×ÑÐ4×;Ñ;¸AÓ>Ô?ØˆGûð	ús   Å-G Ç	HÇ0H
È
Hc                 ó�   — t        j                  |«      }t        j                  |«      j                  «       j	                  d«      S )z\Converts standard b64 encoded string to url safe b64 encoded string
        with no padding.ú=)rS   rT   Úurlsafe_b64encodeÚdecodeÚrstrip)r   ÚsÚbs      r   r„   z0SecurityKeyChallenge._unpadded_urlsafe_b64recodeø   s9   € ô ×$Ñ$ QÓ'ˆÜ×'Ñ'¨Ó*×1Ñ1Ó3×:Ñ:¸3Ó?Ð?r   N)r   r   r   r    r!   r   r   r   r2   r   r   rH   r„   r$   r   r   r4   r4   k   s[   „ Ù<àñó ðð ñó ðð €X×Ñ˜_Ó-ñIó .ðIòV4)ól@r   r4   c                   ó6   — e Zd ZdZed„ «       Zed„ «       Zd„ Zy)ÚSamlChallengezÿChallenge that asks the users to browse to their ID Providers.

    Currently SAML challenge is not supported. When obtaining the challenge
    input, exception will be raised to instruct the users to run
    `gcloud auth login` for reauthentication.
    c                  ó   — y)NÚSAMLr$   r   s    r   r   zSamlChallenge.name  s   € àr   c                  ó   — yr+   r$   r   s    r   r   z!SamlChallenge.is_locally_eligible  r,   r   c                 ó4   — t        j                  t        «      ‚)N)r   ÚReauthSamlChallengeFailErrorÚSAML_CHALLENGE_MESSAGEr   s     r   r   z$SamlChallenge.obtain_challenge_input  s   € ô ×5Ñ5Ô6LÓMÐMr   N)r   r   r   r    r!   r   r   r   r$   r   r   r•   r•   ÿ   s5   „ ñð ñó ðð ñó ðóNr   r•   )r    r"   rS   r
   rE   Úgoogle.authr   r   Úgoogle.oauth2r   Úgoogle.oauth2.webauthn_typesr   r   r   rY   r›   r…   r   ÚABCMetar   r'   r4   r•   r   ÚAVAILABLE_CHALLENGES)r?   s   0r   ú<module>r¡      s¾   ðñó Û Û Û 
å  Ý "Ý 2÷ñ ð .€àLð ð Ð ò!ôW §¡õ WôB&˜ô &ô&Q@˜?ô Q@ôhN�Oô Nñ2 +Ó,Ñ.?Ó.AÁ=Ã?ÐSöàð ‡N�N�IÑòÑ ùò s   ÂB