o
    ãË·eX  ã                   @   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< q6eedƒedƒd ƒD ]Zdee< qHeedƒedƒd ƒD ]Zdee< qZd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   sL   zt |  d¡dƒ}t| rt|ƒW S |  ¡  ¡ W S  ty%   |  ¡  Y S w ©Nr   é   )ÚintÚgroupÚ_unreservedÚchrÚupperÚ
ValueError)ÚmoÚi© r   úE/var/www/ideatree/venv/lib/python3.10/site-packages/openid/urinorm.pyÚ_pct_encoded_replace_unreserved&   s   
ÿr   c                 C   s2   zt t|  d¡dƒƒW S  ty   |  ¡  Y S w r   )r   r   r   r   )r   r   r   r   Ú_pct_encoded_replace2   s
   ÿr   c                 C   s  g }| r‚|   d¡r| dd … } np|   d¡r| dd … } nd|   d¡r(| dd … } nX| dkr/d} nQ|   d¡rA| dd … } |r@| ¡  n?| d	krNd} |rM| ¡  n2| d
ksV| dkrYd} n'd}| d dkrcd}|  d|¡}|dkrqt| ƒ}| | d |… ¡ | |d … } | sd |¡S )Nz../é   z./é   z/./z/.ú/z/../z/..z..r   Ú r   r   éÿÿÿÿ)Ú
startswithÚpopÚfindÚlenÚappendÚjoin)ÚpathÚ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 | ¡}|r(td| ¡ | 	¡ f ƒ‚t
 | ¡}| d¡}|du r:td	ƒ‚| ¡ }|d
vrItd| f ƒ‚| d¡}|du rYtd| f ƒ‚t |¡}|du ritd| f ƒ‚| ¡ \}}}|du rvd}d|v rŒ| ¡ }t t|¡}| d¡ ¡ }n| ¡ }|r©|dks¦|dkrž|dks¦|dkr¨|dkr¨d}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ÚasciiÚ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:80r0   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*   )ÚuriÚ
illegal_moÚuri_moÚschemeÚ	authorityÚauthority_moÚuserinfoÚhostÚportr(   ÚqueryÚfragmentr   r   r   Úurinorm\   s`   

ÿ



€


rR   )ÚreÚopenidr   Úuri_patternÚcompiler@   ÚUNICODEr=   Úauthority_patternrC   Úpct_encoded_patternrE   r   ÚrangeÚordr   r   r   r*   rR   r   r   r   r   Ú<module>   s4    
	ÿ





#