a
    ŠxdX  ã                   @   s  d dl Z d dlmZ dZe  e¡Ze  de j¡ZdZe  e¡Z	dZ
e  e
¡Zdgd Zeed	ƒed
ƒd ƒD ]Zdee< qleedƒedƒd ƒD ]Zdee< qeedƒedƒd ƒD ]Zdee< q´deedƒ< deedƒ< deedƒ< deedƒ< dd„ Zdd„ Zdd„ Zdd„ ZdS )é    N)Ú	codecutilz9^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?z$[^-A-Za-z0-9:/?#[\]@!$&'()*+,;=._~%]z^([^@]*@)?([^:]*)(:.*)?z%([0-9A-Fa-f]{2})Fé   ÚAÚZé   TÚ0Ú9ÚaÚzú-Ú.Ú_ú~c                 C   sT   z4t |  d¡dƒ}t| r$t|ƒW S |  ¡  ¡ W S W n tyN   |  ¡  Y S 0 d S ©Nr   é   )ÚintÚgroupÚ_unreservedÚchrÚupperÚ
ValueError)ÚmoÚi© r   úF/var/www/html/Ranjet/env/lib/python3.9/site-packages/openid/urinorm.pyÚ_pct_encoded_replace_unreserved&   s    
r   c                 C   s6   zt t|  d¡dƒƒW S  ty0   |  ¡  Y S 0 d S r   )r   r   r   r   )r   r   r   r   Ú_pct_encoded_replace2   s    r   c                 C   s  g }| r|   d¡r"| dd … } q|   d¡r:| dd … } q|   d¡rR| dd … } q| dkr`d} q|   d¡r„| dd … } |r‚| ¡  q| d	kržd} |rœ| ¡  q| d
ks®| dkr´d} qd}| d dkrÈd}|  d|¡}|dkrät| ƒ}| | d |… ¡ | |d … } qd |¡S )Nz../é   z./é   z/./z/.ú/z/../z/..z..r   Ú r   r   éÿÿÿÿ)Ú
startswithÚpopÚfindÚlenÚappendÚjoin)ÚpathZresult_segmentsr   r   r   r   Úremove_dot_segments9   s:    





r)   c                 C   sà  t | tƒrt| dd} | jddd d¡} t | ¡}|rPtd| ¡ | 	¡ f ƒ‚t
 | ¡}| d¡}|du rttd	ƒ‚| ¡ }|d
vr’td| f ƒ‚| d¡}|du r²td| f ƒ‚t |¡}|du rÒtd| f ƒ‚| ¡ \}}}|du rìd}d|v r| ¡ }t t|¡}| d¡ ¡ }n| ¡ }|r`|dksZ|dkrF|dksZ|dkrd|dkrdd}nd}|| | }| d¡}	t t|	¡}	t|	ƒ}	|	s˜d}	| d¡}
|
du r°d}
| d¡}|du rÈd}|d | |	 |
 | S )z
    Normalize a URI
    zutf-8)ÚencodingÚasciiZoid_percent_escape)Úerrorsz,Illegal characters in URI: %r at position %sr   NzNo scheme specified)ÚhttpÚhttpsz%Not an absolute HTTP or HTTPS URI: %ré   zNot an absolute URI: %rz'URI does not have a valid authority: %rr    ú%Úidnaú:r-   z:80r.   z:443é   r   é   é   z://)Ú
isinstanceÚbytesÚstrÚencodeÚdecodeÚuri_illegal_char_reÚsearchr   r   ÚstartÚuri_reÚmatchÚlowerÚauthority_reÚgroupsÚpct_encoded_reÚsubr   r   r)   )ÚuriZ
illegal_moZuri_moÚschemeÚ	authorityZauthority_moÚuserinfoÚhostÚportr(   ÚqueryÚfragmentr   r   r   Úurinorm\   sd    

ÿ




ÿÿ




rM   )ÚreZopenidr   Zuri_patternÚcompiler>   ÚUNICODEr;   Zauthority_patternrA   Zpct_encoded_patternrC   r   ÚrangeÚordr   r   r   r)   rM   r   r   r   r   Ú<module>   s2   
	ÿ





#