o
    z=g                     @   s   d dl mZ ddlmZ ddlZddlZd dlmZ ddl	m	Z	m
Z
 dd Zd	d
 Zdd Zdd ZdddZdd Zdd Zdd Zdd Zd ddZdd Zdd ZdS )!   )ValidationError    )validate_emailN)validation_msg)datetimetimezonec              	      s   i  | j dkr | j n3| j dv r | j n'| j dv rAz| jd} t| W n tjt	fy@   t
td  w  fdd|D }|rVt
dd	| d S )
NGET)POSTPUT)r
   DELETEzutf-8jsonc                    s    g | ]}| vs | s|qS  r   ).0paramrequest_datar   7/var/www/html/authentication-server/utils/validation.py
<listcomp>   s     z,validate_required_params.<locals>.<listcomp>zMissing required parameters: z, )methodupdater   databodydecoder   loadsJSONDecodeErrorUnicodeDecodeErrorr   r   join)requestrequired_paramsrequest_bodymissing_paramsr   r   r   validate_required_params	   s    


r!   c                 C   s:   | j d}|t|d   }||vrttd  d S )N.r   file)namesplitlenlowerr   r   )r#   
valid_type
file_split	file_typer   r   r   validate_file_type   s
   r+   c              	   C   s   |D ]p}|dkrt | qtd|rK|d}|d dkr+t| |d d t|d  q|d dkr>t| |d t|d d  qt| |t|d d d  q|dkrUt| | q|d	kr_t| | q|d
krit| | q|dkrrt	| | qd S )Nemaillength:r   max   mincapital_lettersmall_letternumberspecial_characters)
is_emailresearchr%   
has_lengthinthas_capital_letterhas_small_letter
has_numberhas_special_character)keyvalvalidations
validationlen_strr   r   r   validate"   s(   


rD   c              
   C   s4   zt |  W dS  ty } zttd d }~ww )NTr,   )django_validate_email	Exceptionr   r   )valueer   r   r   r6   9   s   r6   c                 C   s   |d urt ||krttd  d|  d| |d ur1t ||k r1ttd  d|  d| d|d urJt ||krLttd  d|  d| dd S d S )Nr-   z: z length should be exactly z must be at least z characters long.r.   )r&   r   r   )r?   r@   exact_length
min_length
max_lengthr   r   r   r9   @   s   r9   c                 C   "   t dd |D sttd d S )Nc                 s       | ]}|  V  qd S N)isupperr   cr   r   r   	<genexpr>M       z%has_capital_letter.<locals>.<genexpr>r2   anyr   r   r?   r@   r   r   r   r;   L      r;   c                 C   rL   )Nc                 s   rM   rN   )islowerrP   r   r   r   rR   Q   rS   z#has_small_letter.<locals>.<genexpr>r3   rT   rV   r   r   r   r<   P   rW   r<   c                 C   rL   )Nc                 s   rM   rN   )isdigitrP   r   r   r   rR   V   rS   zhas_number.<locals>.<genexpr>r4   rT   rV   r   r   r   r=   U   rW   r=   c                 C   rL   )Nc                 s   s    | ]}|d v V  qdS )z !@#$%^&*()-_=+[{]};:'",<.>/?\|`~Nr   rP   r   r   r   rR   [   rS   z(has_special_character.<locals>.<genexpr>r5   rT   rV   r   r   r   r>   Z   rW   r>   c                 C   s0   ||i}| j jdi | sttd  d S )Nforeign_keyr   )objectsfilterexistsr   r   )model_classfield_value
field_namefilter_kwargsr   r   r   is_valid_foreign_key_   s   rb   c                 C   s6   t |tst|  d|t k rt|  dd S )Nz must be a valid datetime.z%: The deadline must be in the future.)
isinstancer   r   r   nowrV   r   r   r   validate_deadlined   s
   
re   c                 C   s*   t dt j}||sttd  d S )Nz^(?:http|ftp)s?://(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|localhost|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|\[?[A-F0-9]*:[A-F0-9:]+\]?)(?::\d+)?(?:/?|[/?]\S+)$url)r7   compile
IGNORECASEmatchr   r   )r?   r@   url_patternr   r   r   validate_urll   s   
rk   )NNN)r   )	exceptionr   django.core.validatorsr   rE   r   r7   r   r   r   r   r!   r+   rD   r6   r9   r;   r<   r=   r>   rb   re   rk   r   r   r   r   <module>   s$    

