Ë
    š„jb  ã                  óê   — d dl m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mZmZ dd	lmZ d
dlmZmZ d
dlmZmZ  edd¬«       G d„ d«      «       Z G d„ dee«      Z ee«      d„ «       Zy)é    )ÚannotationsN)ÚABC)Ú	dataclass)ÚNoneType)ÚAnyé   )ÚRequestHandlerÚregister_preferenceÚRequest)ÚUnsupportedRequesté   )ÚclasspropertyÚjoin_nonempty)Ústd_headersÚHTTPHeaderDictT)ÚorderÚfrozenc                  óp   — e Zd ZU dZdZded<   dZded<   dZded<   dZded<   d„ Z	dd	„Z
d
„ Zedd„«       Zy)ÚImpersonateTargeta<  
    A target for browser impersonation.

    Parameters:
    @param client: the client to impersonate
    @param version: the client version to impersonate
    @param os: the client OS to impersonate
    @param os_version: the client OS version to impersonate

    Note: None is used to indicate to match any.

    Nz
str | NoneÚclientÚversionÚosÚ
os_versionc                ó’   — | j                   r| j                  st        d«      ‚| j                  r| j                  st        d«      ‚y y )Nz$client is required if version is setz#os is required if os_version is set)r   r   Ú
ValueErrorr   r   ©Úselfs    úT/var/www/html/GAP/venv/lib/python3.12/site-packages/yt_dlp/networking/impersonate.pyÚ__post_init__zImpersonateTarget.__post_init__"   s;   € Ø�<Š< §¢ÜÐCÓDÐDØ�?Š? 4§7¢7ÜÐBÓCÐCð $+ˆ?ó    c                óø  — t        |t        «      sy| j                  d u xs) |j                  d u xs | j                  |j                  k(  xr¯ | j                  d u xs) |j                  d u xs | j                  |j                  k(  xrt | j                  d u xs) |j                  d u xs | j                  |j                  k(  xr9 | j
                  d u xs) |j
                  d u xs | j
                  |j
                  k(  S )NF)Ú
isinstancer   r   r   r   r   ©r   Útargets     r   Ú__contains__zImpersonateTarget.__contains__(   sà   € Ü˜&Ô"3Ô4Øà�[‰[˜DÐ ÒY F§M¡M°TÐ$9ÒY¸T¿[¹[ÈFÏMÉMÑ=Yò oØ—‘ Ð%Òa¨¯©¸4Ð)?ÒaÀ4Ç<Á<ÐSY×SaÑSaÑCaòoà—‘˜D�ÒM F§I¡I°Ð$5ÒM¸¿¹ÀFÇIÁIÑ9Mòoð —‘ DÐ(Òm¨F×,=Ñ,=ÀÐ,EÒmÈÏÉÐ\b×\mÑ\mÑImð		
r    c                ó¦   — t        | j                  | j                  «      › dt        | j                  | j                  «      › �j                  d«      S )Nú:)r   r   r   r   r   Úrstripr   s    r   Ú__str__zImpersonateTarget.__str__2   sB   € Ü §¡¨T¯\©\Ó:Ð;¸1¼]È4Ï7É7ÐTX×TcÑTcÓ=dÐ<eÐf×mÑmÐnqÓrÐrr    c                ó|   — t        j                  d|«      }|st        d|› d�«      ‚ | di |j                  «       ¤ŽS )Nze(?:(?P<client>[^:-]+)(?:-(?P<version>[^:-]+))?)?(?::(?:(?P<os>[^:-]+)(?:-(?P<os_version>[^:-]+))?)?)?zInvalid impersonate target "ú"© )ÚreÚ	fullmatchr   Ú	groupdict)Úclsr$   Úmobjs      r   Úfrom_strzImpersonateTarget.from_str5   sK   € ä�|‰|ð  Eð  GMó  NˆÙÜÐ;¸F¸8À1ÐEÓFÐFÙÑ&�T—^‘^Ó%Ñ&Ð&r    ©r$   r   )r$   Ústr)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   r   r   r%   r)   Úclassmethodr2   r,   r    r   r   r      sV   … ñð €FˆJÓØ€GˆZÓØ€Bˆ
ÓØ!€J�
Ó!òDó
òsð ò'ó ñ'r    r   c                  óŽ   ‡ — e Zd ZU dZi Zded<   ddœdˆ fd„Zdd„Zˆ fd„Zˆ fd	„Z	dd
„Z
edd„«       Zdd„Zd„ Zdd„Zdd„Zˆ xZS )ÚImpersonateRequestHandlera<  
    Base class for request handlers that support browser impersonation.

    This provides a method for checking the validity of the impersonate extension,
    which can be used in _check_extensions.

    Impersonate targets consist of a client, version, os and os_ver.
    See the ImpersonateTarget class for more details.

    The following may be defined:
     - `_SUPPORTED_IMPERSONATE_TARGET_MAP`: a dict mapping supported targets to custom object.
                Any Request with an impersonate target not in this list will raise an UnsupportedRequest.
                Set to None to disable this check.
                Note: Entries are in order of preference

    Parameters:
    @param impersonate: the default impersonate target to use for requests.
                        Set to None to disable impersonation.
    zdict[ImpersonateTarget, Any]Ú!_SUPPORTED_IMPERSONATE_TARGET_MAPN)Úimpersonatec               ó2   •— t        ‰| �  di |¤Ž || _        y )Nr,   )ÚsuperÚ__init__r>   )r   r>   ÚkwargsÚ	__class__s      €r   rA   z"ImpersonateRequestHandler.__init__S   s   ø€ Ü‰ÑÑ"˜6Ò"Ø&ˆÕr    c                ó�   — t        |t        t        f«      sJ ‚|�| j                  sy | j	                  |«      st        d|› �«      ‚y )Nz Unsupported impersonate target: )r"   r   r   Úsupported_targetsÚis_supported_targetr   r#   s     r   Ú_check_impersonate_targetz3ImpersonateRequestHandler._check_impersonate_targetW   sN   € Ü˜&Ô#4´hÐ"?Ô@Ð@Ð@Øˆ> ×!7Ò!7ØØ×'Ñ'¨Ô/Ü$Ð'GÈÀxÐ%PÓQÐQð 0r    c                ón   •— t         ‰| �  |«       d|v r!| j                  |j                  d«      «       y y )Nr>   )r@   Ú_check_extensionsrG   Úget)r   Ú
extensionsrC   s     €r   rI   z+ImpersonateRequestHandler._check_extensions^   s4   ø€ Ü‰Ñ! *Ô-Ø˜JÑ&Ø×*Ñ*¨:¯>©>¸-Ó+HÕIð 'r    c                óZ   •— t         ‰| �  |«       | j                  | j                  «       y ©N)r@   Ú	_validaterG   r>   )r   ÚrequestrC   s     €r   rN   z#ImpersonateRequestHandler._validatec   s$   ø€ Ü‰Ñ˜'Ô"Ø×&Ñ& t×'7Ñ'7Õ8r    c                ó®   — |€y| j                   D ]C  }||v sŒ| j                  r-| j                  j                  | j                  › d|› d|› �«       |c S  y)z'Resolve a target to a supported target.Nz: resolved impersonate target z to )rE   ÚverboseÚ_loggerÚstdoutÚRH_NAME)r   r$   Úsupported_targets      r   Ú_resolve_targetz)ImpersonateRequestHandler._resolve_targetg   sd   € àˆ>ØØ $× 6Ñ 6ò 	(ÐØÐ)Ò)Ø—<’<Ø—L‘L×'Ñ'ØŸ<™<˜.Ð(FÀvÀhÈdÐScÐRdÐeôgà'Ò'ñ	(r    c                óH   — t        | j                  j                  «       «      S rM   )Útupler=   Úkeys)r0   s    r   rE   z+ImpersonateRequestHandler.supported_targetsr   s   € ä�S×:Ñ:×?Ñ?ÓAÓBÐBr    c                óL   — t        |t        «      sJ ‚| j                  |«      d uS rM   )r"   r   rV   r#   s     r   rF   z-ImpersonateRequestHandler.is_supported_targetv   s)   € Ü˜&Ô"3Ô4Ð4Ð4Ø×#Ñ# FÓ+°4Ð7Ð7r    c                ór   — | j                  |j                  j                  d«      xs | j                  «      S )z(Get the requested target for the requestr>   )rV   rK   rJ   r>   )r   rO   s     r   Ú_get_request_targetz-ImpersonateRequestHandler._get_request_targetz   s/   € à×#Ñ# G×$6Ñ$6×$:Ñ$:¸=Ó$IÒ$]ÈT×M]ÑM]Ó^Ð^r    c                 ó   — y)z¹Additional operations to prepare headers before building. To be extended by subclasses.
        @param request: Request object
        @param headers: Merged headers to prepare
        Nr,   )r   rO   Úheaderss      r   Ú_prepare_impersonate_headersz6ImpersonateRequestHandler._prepare_impersonate_headers~   s   � r    c                ón  — | j                  |j                  «      }| j                  |«      �Bt        j                  «       D ]+  \  }}|j                  |«      |k(  sŒ|j                  |«       Œ- | j                  ||«       |j                  j                  d«      r|j                  «       S t        |«      S )z´
        Get headers for external impersonation use.
        Subclasses may define a _prepare_impersonate_headers method to modify headers after merge but before building.
        Úkeep_header_casing)Ú_merge_headersr^   r\   r   ÚitemsrJ   Úpopr_   rK   Ú	sensitiveÚdict)r   rO   r^   ÚkÚvs        r   Ú_get_impersonate_headersz2ImpersonateRequestHandler._get_impersonate_headers„   s¢   € ð
 ×%Ñ% g§o¡oÓ6ˆØ×#Ñ# GÓ,Ð8ô $×)Ñ)Ó+ò #‘��1Ø—;‘;˜q“> QÓ&Ø—K‘K •Nð#ð 	×)Ñ)¨'°7Ô;Ø×Ñ×!Ñ!Ð"6Ô7Ø×$Ñ$Ó&Ð&Ü�G‹}Ðr    )r>   r   r3   )r$   zImpersonateTarget | None)Úreturnztuple[ImpersonateTarget, ...])rO   r   r^   r   rj   ÚNone)rO   r   rj   zdict[str, str])r5   r6   r7   r8   r=   r9   rA   rG   rI   rN   rV   r   rE   rF   r\   r_   ri   Ú__classcell__)rC   s   @r   r<   r<   =   sa   ø… ñð& GIÐ%Ð'CÓHà;?÷ 'óRôJô
9ó	(ð òCó ðCó8ò_ó÷r    r<   c                óT   — |j                   j                  d«      s| j                  ryy)Nr>   iè  r   )rK   rJ   r>   )ÚrhrO   s     r   Úimpersonate_preferencero   —   s"   € à×Ñ×Ñ˜mÔ,°·²ØØr    )Ú
__future__r   r-   Úabcr   Údataclassesr   Útypesr   Útypingr   Úcommonr	   r
   r   Ú
exceptionsr   Úutilsr   r   Úutils.networkingr   r   r   r<   ro   r,   r    r   ú<module>ry      sr   ðÝ "ã 	Ý Ý !Ý Ý ç @Ñ @Ý *ß 0ß :ñ �˜dÔ#÷*'ð *'ó $ð*'ôZW °ô Wñt Ð.Ó/ñó 0ñr    