o
    ç÷¡g“  ã                   @   sà   d dl Z d dlZzd dlmZ W n ey   eZY nw zd dlmZ W n ey3   d dlmZ Y nw e d¡Z	e dej
¡Zddd„Zdd	d
„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )é    N)ÚUnicodeType)Úurlparsez[0-9]+$z(?!-)[a-z0-9-]{1,63}(?<!-)$úutf-8c                 C   ó   t | tƒr
|  |¡S | S ©N)Ú
isinstanceÚbytesÚdecode)ÚbstrÚencoding© r   ú7/usr/local/lib/python3.10/dist-packages/webssh/utils.pyÚto_str   ó   

r   c                 C   r   r   )r   r   Úencode)Úustrr   r   r   r   Úto_bytes   r   r   c              	   C   s$   zt | ƒW S  ttfy   Y d S w r   )ÚintÚ	TypeErrorÚ
ValueError)Ústringr   r   r   Úto_int   s
   
ÿr   c                 C   s*   t | ƒ}| d¡r| d¡d }t |¡S )Nzfe80::ú%r   )r   Ú
startswithÚsplitÚ	ipaddressÚ
ip_address)ÚipstrÚipr   r   r   Úto_ip_address&   s   

r   c                 C   s$   zt | ƒ W dS  ty   Y dS w )NFT)r   r   )r   r   r   r   Úis_valid_ip_address-   s   
þÿr    c                 C   s   d|   k o	dk S   S )Nr   i   r   )Úportr   r   r   Úis_valid_port5   s   r"   c                 C   s8   zd  | ¡ W dS  ty   Y dS  ty   Y dS w )NÚtestFT)r   ÚLookupErrorr   )r   r   r   r   Úis_valid_encoding9   s   üÿr%   c                 C   s<   t | ƒ}t|ƒdkrdS |D ]}|dkr| ¡ s dS qdS )Nú[TÚ.F)ÚiterÚnextÚisdigit)ÚhostnameÚitÚchr   r   r   Úis_ip_hostnameC   s   €r.   c                 C   sV   | d dkr| d d… } t | ƒdkrdS |  d¡}t |d ¡r"dS tdd„ |D ƒƒS )Néÿÿÿÿr'   éý   Fc                 s   s   � | ]}t  |¡V  qd S r   )ÚallowedÚmatch)Ú.0Úlabelr   r   r   Ú	<genexpr>Z   s   € z$is_valid_hostname.<locals>.<genexpr>)Úlenr   Únumericr2   Úall)r+   Úlabelsr   r   r   Úis_valid_hostnameM   s   
r:   c           
      C   s°   d}d}t | ƒ}t |ƒ}t||ƒ}|| kr<| | }|| }||kr1|dkr0|d7 }|dkr0dS ndS |d8 }|| ks||krBdS |dkrHdS ||krP| | n|| }	|	dkS )Nr/   r   r'   é   é   TF)r6   Úmin)
Údomain1Údomain2ÚiÚdotsÚl1Úl2ÚmÚc1Úc2Úcr   r   r   Úis_same_primary_domain]   s.   

€
ôrH   c                 C   s´   |   ¡ } | sd S |  d¡s|  d¡s|  d¡sd|  } t| ƒ}|j}|j}|dkr1|dkr/dnd}|dkrA|dkrA|j dd¡}n|d	krQ|dkrQ|j d
d¡}n|j}d ||¡S )Nzhttp://zhttps://z//Ú i»  ÚhttpsÚhttpz:443éP   z:80z{}://{})Ústripr   r   r!   ÚschemeÚnetlocÚreplaceÚformat)ÚurlÚparsedr!   rN   rO   r   r   r   Úparse_origin_from_url|   s$   ÿrT   )r   )r   ÚreÚtypesr   ÚImportErrorÚstrÚurllib.parser   Úcompiler7   Ú
IGNORECASEr1   r   r   r   r   r    r"   r%   r.   r:   rH   rT   r   r   r   r   Ú<module>   s2    ÿÿ




