Ë
    gQ²eî  ã                   óV  — 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 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dlmZ ddlmZ ej&                  eef   Zej.                  e   Zej.                  e   Zej6                  rd dlZ G d„ de«      Z G d„ de«      Zy)é    N)Údatetime)Útimezoneé   )Úbase64_decode)Úbase64_encode)Úbytes_to_int)Úint_to_bytes)Ú
want_bytes)ÚBadSignature)ÚBadTimeSignature)ÚSignatureExpired)Ú
Serializer)ÚSignerc                   óN  ‡ — e Zd ZdZdefd„Zdedefd„Zdede	fd„Z
ej                  	 	 dded	ed
dde	fd„«       Zej                  	 	 dded	ed
ddej                   e	ef   fd„«       Z	 	 dded	ed
edej$                  ej                   e	ef   e	f   fˆ fd„Zdded	edefd„Zˆ xZS )ÚTimestampSignerzþWorks like the regular :class:`.Signer` but also records the time
    of the signing and can be used to expire signatures. The
    :meth:`unsign` method can raise :exc:`.SignatureExpired` if the
    unsigning failed because the signature is expired.
    Úreturnc                 ó<   — t        t        j                  «       «      S )zTReturns the current timestamp. The function must return an
        integer.
        )ÚintÚtime)Úselfs    úJ/home/yussbn06/site/env/lib/python3.12/site-packages/itsdangerous/timed.pyÚget_timestampzTimestampSigner.get_timestamp!   s   € ô ”4—9‘9“;ÓÐó    Útsc                 óL   — t        j                  |t        j                  ¬«      S )a   Convert the timestamp from :meth:`get_timestamp` into an
        aware :class`datetime.datetime` in UTC.

        .. versionchanged:: 2.0
            The timestamp is returned as a timezone-aware ``datetime``
            in UTC rather than a naive ``datetime`` assumed to be UTC.
        )Útz)r   Úfromtimestampr   Úutc)r   r   s     r   Útimestamp_to_datetimez%TimestampSigner.timestamp_to_datetime'   s   € ô ×%Ñ% b¬X¯\©\Ô:Ð:r   Úvaluec                 óÄ   — t        |«      }t        t        | j                  «       «      «      }t        | j                  «      }||z   |z   }||z   | j                  |«      z   S )z:Signs the given string and also attaches time information.)r
   r   r	   r   ÚsepÚget_signature)r   r    Ú	timestampr"   s       r   ÚsignzTimestampSigner.sign1   sZ   € ä˜5Ó!ˆÜ!¤,¨t×/AÑ/AÓ/CÓ"DÓEˆ	Ü˜Ÿ™Ó"ˆØ˜‘˜iÑ'ˆØ�s‰{˜T×/Ñ/°Ó6Ñ6Ð6r   Úsigned_valueÚmax_ageÚreturn_timestampz_te.Literal[False]c                  ó   — y ©N© ©r   r&   r'   r(   s       r   ÚunsignzTimestampSigner.unsign<   ó   € ð 	r   z_te.Literal[True]c                  ó   — y r*   r+   r,   s       r   r-   zTimestampSigner.unsignE   r.   r   c                 ó
  •— 	 t         ‰| �  |«      }d}t	        | j
                  «      }||vr|r|‚t        d|¬«      ‚|j                  |d«      \  }}	d}
d}	 t        t        |	«      «      }
|�+|
�	 | j                  |
«      }t        t        |«      ||¬«      ‚|
€t        d|¬«      ‚|�b| j!                  «       |
z
  }||kD  r$t#        d|› d	|› d
�|| j                  |
«      ¬«      ‚|dk  r!t#        d|› d�|| j                  |
«      ¬«      ‚|r|| j                  |
«      fS |S # t        $ r}|}|j                  xs d}Y d}~�Œ0d}~ww xY w# t        $ r Y Œëw xY w# t        t        t        f$ r}t        d|¬«      |‚d}~ww xY w)aí  Works like the regular :meth:`.Signer.unsign` but can also
        validate the time. See the base docstring of the class for
        the general behavior. If ``return_timestamp`` is ``True`` the
        timestamp of the signature will be returned as an aware
        :class:`datetime.datetime` object in UTC.

        .. versionchanged:: 2.0
            The timestamp is returned as a timezone-aware ``datetime``
            in UTC rather than a naive ``datetime`` assumed to be UTC.
        Nr   ztimestamp missing)Úpayloadr   zMalformed timestamp)r1   Údate_signedzSignature age z > z secondsr   z < 0 seconds)Úsuperr-   r   r1   r
   r"   r   Úrsplitr   r   Ú	Exceptionr   Ú
ValueErrorÚOSErrorÚOverflowErrorÚstrr   r   )r   r&   r'   r(   ÚresultÚ	sig_errorÚer"   r    Úts_bytesÚts_intÚts_dtÚexcÚageÚ	__class__s                 €r   r-   zTimestampSigner.unsignN   s×  ø€ ð 	&Ü‘W‘^ LÓ1ˆFØˆIô
 ˜Ÿ™Ó"ˆð �fÑÙØ�ä"Ð#6ÀÔGÐGà Ÿ-™-¨¨QÓ/‰ˆˆxØ!ˆØ'+ˆð	Ü!¤-°Ó"9Ó:ˆFð Ð ØÐ!ðØ ×6Ñ6°vÓ>�Eô #¤3 y£>¸5ÈeÔTÐTð ˆ>Ü"Ð#8À%ÔHÐHð ÐØ×$Ñ$Ó&¨Ñ/ˆCà�WŠ}Ü&Ø$ S E¨¨W¨I°XÐ>Ø!Ø $× :Ñ :¸6Ó Bôð ð �QŠwÜ&Ø$ S E¨Ð6Ø!Ø $× :Ñ :¸6Ó Bôð ñ Ø˜$×4Ñ4°VÓ<Ð<Ð<àˆøôG ò 	&ØˆIØ—Y‘YÒ% #ŽFûð	&ûô. ò 	Ùð	ûô #¤G¬]Ð;ò ô +Ø-°uôàðûðúsA   ƒD# ÁE Á1E Ä#	E	Ä,EÅE	Å	EÅEÅFÅ/E=Å=Fc                 óJ   — 	 | j                  ||¬«       y# t        $ r Y yw xY w)zeOnly validates the given signed value. Returns ``True`` if
        the signature exists and is valid.)r'   TF)r-   r   )r   r&   r'   s      r   ÚvalidatezTimestampSigner.validate¦   s,   € ð	Ø�K‰K˜¨gˆKÔ6ØøÜò 	Ùð	ús   ‚ –	"¡")NF)NTr*   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   Ú_t_str_bytesÚbytesr%   ÚtypingÚoverloadÚ
_t_opt_intr-   Ú_tÚTupleÚboolÚUnionrD   Ú__classcell__©rB   s   @r   r   r      sB  ø„ ñð ˜só  ð;¨ð ;°ó ;ð7˜,ð 7¨5ó 7ð ‡_�_ð #Ø16ñ	à"ðð ðð /ð	ð
 
òó ðð ‡_�_ð #Ø04ñ	à"ðð ðð .ð	ð
 
�‰�%˜�/Ñ	"òó ðð #Ø!&ñ	Và"ðVð ðVð ð	Vð
 
�‰�"—(‘(˜5 (˜?Ñ+¨UÐ2Ñ	3õVñp \ð ¸Jð ÐRV÷ r   r   c                   óü   ‡ — e Zd ZU dZeZej                  e   ed<   	 dde	dej                  e   fˆ fd„Z	 	 	 ddededede	dej                  f
d	„Z	 	 ddedede	dej"                  eej                  f   fd
„Zˆ xZS )ÚTimedSerializerzOUses :class:`TimestampSigner` instead of the default
    :class:`.Signer`.
    Údefault_signerÚsaltr   c                 óJ   •— t        j                  dt        ‰| �  |«      «      S )Nz_t.Iterator[TimestampSigner])rN   Úcastr3   Úiter_unsigners)r   rW   rB   s     €r   rZ   zTimedSerializer.iter_unsigners·   s!   ø€ ô �w‰wÐ5´u±wÑ7MÈdÓ7SÓTÐTr   Úsr'   r(   c                 ó&  — t        |«      }d}| j                  |«      D ]6  }	 |j                  ||d¬«      \  }}| j                  |«      }	|r|	|fc S |	c S  t        j                  t
        |«      ‚# t        $ r ‚ t
        $ r}
|
}Y d}
~
Œld}
~
ww xY w)a†  Reverse of :meth:`dumps`, raises :exc:`.BadSignature` if the
        signature validation fails. If a ``max_age`` is provided it will
        ensure the signature is not older than that time in seconds. In
        case the signature is outdated, :exc:`.SignatureExpired` is
        raised. All arguments are forwarded to the signer's
        :meth:`~TimestampSigner.unsign` method.
        NT)r'   r(   )r
   rZ   r-   Úload_payloadr   r   rN   rY   )r   r[   r'   r(   rW   Úlast_exceptionÚsignerÚbase64dr$   r1   Úerrs              r   ÚloadszTimedSerializer.loads¿   s¬   € ô �q‹MˆØˆà×)Ñ)¨$Ó/ò 	%ˆFð%Ø%+§]¡]Ø˜w¸ð &3ó &Ñ"�˜ð ×+Ñ+¨GÓ4�á#Ø" IÐ-Ò-à’ð	%ô$ �g‰g”l NÓ3Ð3øô $ò ð Üò %Ø!$•ûð%ús   £-A2ÁA2Á2BÂBÂBc                 ó.   — | j                  ||d|i¬«      S )Nr'   )Úload_kwargs)Ú_loads_unsafe_impl)r   r[   r'   rW   s       r   Úloads_unsafezTimedSerializer.loads_unsafeä   s!   € ð ×&Ñ& q¨$¸YÈÐ<PÐ&ÓQÐQr   r*   )NFN)NN)rE   rF   rG   rH   r   rV   rN   ÚTypeÚ__annotations__Ú_t_opt_str_bytesÚIteratorrZ   rI   rM   rP   ÚAnyrb   rO   rf   rR   rS   s   @r   rU   rU   °   sÑ   ø… ñð 0?€N�B—G‘G˜OÑ,Ó>ð (,ñUØ$ðUà	�‰�_Ñ	%õUð #Ø!&Ø!%ñ#4àð#4ð ð#4ð ð	#4ð
 ð#4ð 
�‰ó#4ðP #Ø!%ñ	RàðRð ðRð ð	Rð
 
�‰�$˜Ÿ™�,Ñ	÷Rr   rU   ) r   rK   rN   r   r   Úencodingr   r   r   r	   r
   r@   r   r   r   Ú
serializerr   r_   r   rQ   r9   rJ   rI   ÚOptionalri   r   rM   ÚTYPE_CHECKINGÚtyping_extensionsÚ_ter   rU   r+   r   r   ú<module>rr      sŠ   ðÛ Û Û Ý Ý å #Ý #Ý "Ý "Ý  Ý Ý !Ý !Ý "Ý à�x‰x˜˜U˜
Ñ#€Ø—;‘;˜|Ñ,Ð Ø�[‰[˜Ñ€
à×ÒÛ#ôS�fô Sôl:R�jõ :Rr   