
    h                         d dl Z d dlmZ d dlmZmZ d dlmZ d dlm	Z
  G d de      Ze G d d	             Z G d
 de      Zy)    N)ValidationError)EmailValidatorURLValidator)deconstructible)gettextc                        e Zd ZdZdZdZdZdez   dz   ez   dz   ez   dz   Zd	ez   d
z   ez   dz   ez   dz   Zdez   dz   Z	dez   ez   e	z   dz   Z
d fd	Z xZS )IntranetURLValidatoraK  
    This is essentially the normal, Django URL Validator, but allows for
    "internal" machine-name only "hostnames" as defined by the RegEx pattern
    defined in settings as well as normal, FQD-based hostnames.

    Some examples:
    RFC1123 Pattern
        DJANGOCMS_LINK_INTRANET_HOSTNAME_PATTERN = r'[a-z,0-9,-]{1,15}'
    u   ¡-￿zI(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}z\[[0-9a-f:\.]+\]z[a-zz0-9](?:[a-zz
0-9-]*[a-zz0-9])?z	(?:\.[a-zz0-9]+(?:[a-zz	0-9]+)*)*z\.[a-zz]{2,}\.?(|localhost)c                 J   t        |   di | |rd| j                  z   | j                  z   | j                  z   dz   |z   dz   | _        t        j                  d| j                  z   dz   | j                  z   dz   | j
                  z   dz   t        j                        | _        y y )Nr
   |r   z*^(?:[a-z0-9\.\-]*)://(?:\S+(?::\S*)?@)?(?:z)(?::\d{2,5})?(?:[/?#][^\s]*)?$ )super__init__hostname_re	domain_retld_rehost_rerecompileipv4_reipv6_re
IGNORECASEregex)selfintranet_host_rekwargs	__class__s      I/home/dcms/DCMS/lib/python3.12/site-packages/djangocms_link/validators.pyr   zIntranetURLValidator.__init__$   s    "6"""#..! ++ 	
 ##    L &(+,.2ll;=@ACG<<PS DJ     N)__name__
__module____qualname____doc__ulr   r   r   r   r   r   r   __classcell__r   s   @r   r	   r	   	   s     
B 	U  "G B,/"4}DrIIUKrO+b0=@2ET  ^k)FK)+f4}DG r    r	   c                   ,    e Zd Z ed      ZdZdefdZy)AnchorValidatorzEnter a valid anchorinvalidvaluec                 (   |j                  d      }|s|S t        |t              rt        |      dkD  r$t	        | j
                  | j                  d|i      t        j                  d|      s$t	        | j
                  | j                  d|i      |S )N#d   r,   codeparamsz^[a-zA-Z0-9_\-]+$)	lstrip
isinstancestrlenr   messager1   r   match)r   r,   s     r   __call__zAnchorValidator.__call__@   s{    S!L%%Uc)9!$,,TYYQVGWXXxx,e4!$,,TYYQVGWXXr    N)r"   r#   r$   _r7   r1   r5   r9   r   r    r   r*   r*   ;   s    &'GD	c 	r    r*   c                   :     e Zd ZdZddef fdZdef fdZ xZS )ExtendedURLValidatorz^tel\:[0-9 \#\*\-\.\(\)\+]+$allowed_link_typesc                 2    || _         t        |   di | y )Nr   )r=   r   r   )r   r=   r   r   s      r   r   zExtendedURLValidator.__init__Q   s    "4"6"r    r,   c                    t        |t              rt        |      | j                  kD  r$t	        | j
                  | j                  d|i      | j                  j                  |      r$t	        | j
                  | j                  d|i      |j                  d      r*| j                  d| j                  v r t               |      S |j                  d      d   j                         }|dk(  r^| j                  d| j                  v rDt        j                  | j                   |      ry t	        t#        d      | j                  d|i      |d	k(  r-| j                  d	| j                  v r t%               |d
d        S t&        | Q  |      S )Nr,   r0   r.   anchor:r   telzEnter a valid phone numbermailto   )r4   r5   r6   
max_lengthr   r7   r1   unsafe_charsintersection
startswithr=   r*   splitlowerr   r8   tel_rer:   r   r   r9   )r   r,   schemer   s      r   r9   zExtendedURLValidator.__call__U   s`   %%Udoo)E!$,,TYYQVGWXX))%0!$,,TYYQVGWXXC ##+x4;R;R/R$?$U++S!!$**,U?##+u8O8O/OxxU+%23#U+ 
 X##+x4;R;R/R#>#E!"I..w&&r    r!   )	r"   r#   r$   rK   listr   r5   r9   r'   r(   s   @r   r<   r<   L   s'     -F#4 #'c ' 'r    r<   )r   django.core.exceptionsr   django.core.validatorsr   r   django.utils.deconstructr   django.utils.translationr   r:   r	   r*   r<   r   r    r   <module>rR      sG    	 2 ? 4 1/< /d    $'/ $'r    