§
    „ßj“  ã                  ó  — d dl mZ d dlm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 ddlmZ  G d„ de¦  «        Z G d„ dee         ¦  «        ZdS )é    )ÚannotationsN)Údatetime)Útimezoneé   )Úbase64_decode)Úbase64_encode)Úbytes_to_int)Úint_to_bytes)Ú
want_bytes)ÚBadSignature)ÚBadTimeSignature)ÚSignatureExpired)Ú_TSerialized)Ú
Serializer)ÚSignerc                  óœ   ‡ — e Zd ZdZdd„Zdd„Zdd„Zej        	 	 dd d„¦   «         Z	ej        	 	 d!d"d„¦   «         Z		 	 dd#ˆ fd„Z	d$d%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.
    ÚreturnÚintc                óB   — t          t          j        ¦   «         ¦  «        S )zTReturns the current timestamp. The function must return an
        integer.
        )r   Útime)Úselfs    úE/var/www/html/venv/lib/python3.11/site-packages/itsdangerous/timed.pyÚget_timestampzTimestampSigner.get_timestamp   s   € õ •4”9‘;”;ÑÔÐó    Útsr   c                óB   — 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   Úvalueústr | bytesÚbytesc                óê   — t          |¦  «        }t          t          |                      ¦   «         ¦  «        ¦  «        }t          | j        ¦  «        }||z   |z   }||z   |                      |¦  «        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.sign-   sj   € å˜5Ñ!Ô!ˆÝ!¥,¨t×/AÒ/AÑ/CÔ/CÑ"DÔ"DÑEÔEˆ	Ý˜œÑ"Ô"ˆØ˜‘˜iÑ'ˆØ�s‰{˜T×/Ò/°Ñ6Ô6Ñ6Ð6r   NFÚsigned_valueÚmax_ageú
int | NoneÚreturn_timestampút.Literal[False]c                ó   — d S ©N© ©r   r*   r+   r-   s       r   ÚunsignzTimestampSigner.unsign8   s	   € ð �r   Tút.Literal[True]útuple[bytes, datetime]c                ó   — d S r0   r1   r2   s       r   r3   zTimestampSigner.unsign@   s	   € ð "% r   Úboolútuple[bytes, datetime] | bytesc                ó¨  •— 	 t          ¦   «                              |¦  «        }d}n"# t          $ r}|}|j        pd}Y d}~nd}~ww xY wt	          | j        ¦  «        }||vr|r|‚t          d|¬¦  «        ‚|                     |d¦  «        \  }}	d}
d}	 t          t          |	¦  «        ¦  «        }
n# t          $ r Y nw xY w|�i|
�H	 |                      |
¦  «        }n1# t          t          t          f$ r}t          d|¬¦  «        |‚d}~ww xY wt          t          |¦  «        ||¬¦  «        ‚|
€t          d|¬¦  «        ‚|�x|                      ¦   «         |
z
  }||k    r,t#          d|› d	|› d
�||                      |
¦  «        ¬¦  «        ‚|dk     r)t#          d|› d�||                      |
¦  «        ¬¦  «        ‚|r||                      |
¦  «        fS |S )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)r:   Údate_signedzSignature age z > z secondsr   z < 0 seconds)Úsuperr3   r   r:   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   r3   zTimestampSigner.unsignH   su  ø€ ð 	&Ý‘W”W—^’^ LÑ1Ô1ˆFØˆIˆIøÝð 	&ð 	&ð 	&ØˆIØ”YÐ% #ˆFˆFˆFˆFˆFˆFøøøøð	&øøøõ ˜œÑ"Ô"ˆð �fÐÐØð  Ø�å"Ð#6ÀÐGÑGÔGÐGà Ÿ-š-¨¨QÑ/Ô/‰ˆˆxØ!ˆØ!%ˆð	Ý!¥-°Ñ"9Ô"9Ñ:Ô:ˆFˆFøÝð 	ð 	ð 	ØˆDð	øøøð
 Ð ØÐ!ðØ ×6Ò6°vÑ>Ô>�E�EøÝ"¥G­]Ð;ð ð ð õ +Ø-°uðñ ô àðøøøøðøøøõ #¥3 y¡>¤>¸5ÈeÐTÑTÔTÐTð ˆ>Ý"Ð#8À%ÐHÑHÔHÐHð ÐØ×$Ò$Ñ&Ô&¨Ñ/ˆCà�WŠ}ˆ}Ý&Ø> SÐ>Ð>¨WÐ>Ð>Ð>Ø!Ø $× :Ò :¸6Ñ BÔ Bðñ ô ð ð �QŠwˆwÝ&Ø6 SÐ6Ð6Ð6Ø!Ø $× :Ò :¸6Ñ BÔ Bðñ ô ð ð ð 	=Ø˜$×4Ò4°VÑ<Ô<Ð<Ð<àˆs>   ƒ#' §
A±AÁAÂB1 Â1
B>Â=B>ÃC ÃD
Ã3DÄD
c                óX   — 	 |                       ||¬¦  «         dS # t          $ r Y dS w xY w)zeOnly validates the given signed value. Returns ``True`` if
        the signature exists and is valid.)r+   TF)r3   r   )r   r*   r+   s      r   ÚvalidatezTimestampSigner.validate    sD   € ð	Ø�KŠK˜¨gˆKÑ6Ô6Ð6Ø�4øÝð 	ð 	ð 	Ø�5�5ð	øøøs   ‚ ›
)¨))r   r   )r   r   r   r   )r"   r#   r   r$   )NF)r*   r#   r+   r,   r-   r.   r   r$   )NT)r*   r#   r+   r,   r-   r4   r   r5   )r*   r#   r+   r,   r-   r7   r   r8   r0   )r*   r#   r+   r,   r   r7   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r!   r)   ÚtÚoverloadr3   rM   Ú__classcell__©rK   s   @r   r   r      s  ø€ € € € € ðð ð ð  ð  ð  ð;ð ;ð ;ð ;ð7ð 7ð 7ð 7ð „Zð #Ø-2ð	ð ð ð ñ „Zðð „Zð #Ø,0ð	%ð %ð %ð %ñ „Zð%ð #Ø!&ð	Vð Vð Vð Vð Vð Vð Vðpð ð ð ð ð ð ð ð r   r   c                  óV   ‡ — e Zd ZU dZeZded<   	 ddˆ fd	„Z	 	 	 ddd„Z	 	 ddd„Z	ˆ xZ
S )ÚTimedSerializerzOUses :class:`TimestampSigner` instead of the default
    :class:`.Signer`.
    ztype[TimestampSigner]Údefault_signerNÚsaltústr | bytes | Noner   úcabc.Iterator[TimestampSigner]c                ól   •— t          j        dt          ¦   «                              |¦  «        ¦  «        S )Nr[   )rR   Úcastr<   Úiter_unsigners)r   rY   rK   s     €r   r^   zTimedSerializer.iter_unsigners±   s*   ø€ õ ŒvÐ6½¹¼×8NÒ8NÈtÑ8TÔ8TÑUÔUÐUr   FÚsr#   r+   r,   r-   r7   út.Anyc                óF  — t          |¦  «        }d}|                      |¦  «        D ]a}	 |                     ||d¬¦  «        \  }}|                      |¦  «        }	|r|	|fc S |	c S # t          $ r ‚ t
          $ r}
|
}Y d}
~
ŒZd}
~
ww xY wt          j        t
          |¦  «        ‚)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   r^   r3   Úload_payloadr   r   rR   r]   )r   r_   r+   r-   rY   Úlast_exceptionÚsignerÚbase64dr(   r:   Úerrs              r   ÚloadszTimedSerializer.loads¹   sê   € õ �q‰MŒMˆØˆà×)Ò)¨$Ñ/Ô/ð 	%ð 	%ˆFð%Ø%+§]¢]Ø˜w¸ð &3ñ &ô &Ñ"�˜ð ×+Ò+¨GÑ4Ô4�à#ð .Ø" IÐ-Ð-Ð-Ð-à���øÝ#ð ð ð ð Ýð %ð %ð %Ø!$������øøøøð%øøøõ Œf•\ >Ñ2Ô2Ð2s   ª5A&Á"A&Á&BÁ:BÂBútuple[bool, t.Any]c                ó6   — |                       ||d|i¬¦  «        S )Nr+   )Úload_kwargs)Ú_loads_unsafe_impl)r   r_   r+   rY   s       r   Úloads_unsafezTimedSerializer.loads_unsafeÞ   s$   € ð ×&Ò& q¨$¸YÈÐ<PÐ&ÑQÔQÐQr   r0   )rY   rZ   r   r[   )NFN)
r_   r#   r+   r,   r-   r7   rY   rZ   r   r`   )NN)r_   r#   r+   r,   rY   rZ   r   rh   )rN   rO   rP   rQ   r   rX   Ú__annotations__r^   rg   rl   rT   rU   s   @r   rW   rW   ª   s¼   ø€ € € € € € ðð ð -<€NÐ;Ð;Ð;Ñ;ð *.ðVð Vð Vð Vð Vð Vð Vð #Ø!&Ø#'ð#3ð #3ð #3ð #3ð #3ðP #Ø#'ð	Rð Rð Rð Rð Rð Rð Rð Rð Rr   rW   )Ú
__future__r   Úcollections.abcÚabcÚcabcr   ÚtypingrR   r   r   Úencodingr   r   r	   r
   r   rI   r   r   r   Ú
serializerr   r   rd   r   r   rW   r1   r   r   ú<module>ru      sž  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à #Ð #Ð #Ð #Ð #Ð #Ø #Ð #Ð #Ð #Ð #Ð #Ø "Ð "Ð "Ð "Ð "Ð "Ø "Ð "Ð "Ð "Ð "Ð "Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø !Ð !Ð !Ð !Ð !Ð !Ø $Ð $Ð $Ð $Ð $Ð $Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð ðQð Qð Qð Qð Q�fñ Qô Qð Qðh:Rð :Rð :Rð :Rð :R�j Ô.ñ :Rô :Rð :Rð :Rð :Rr   