
    g                     l    d dl Z d dlmZ d dlmZ d Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zy)    Nreverse)settingsc                  ^   d} t        j                  dd      t        j                  dd      f}t        j                  |       }|d   |d   k  rd|k(  r
|d   |d   f}d|d   ||d   fz  }dj                  |j	                  dt
        j                              t        t        |            fS )	N)+*-   
   r   r	   z%d%s%dz{}=r   )	randomrandintchoiceformatreplacer   CAPTCHA_MATH_CHALLENGE_OPERATORstreval)	operatorsoperandsoperator	challenges       R/var/www/html/brdwt/brdwt/brdwtenv/lib/python3.12/site-packages/captcha/helpers.pymath_challenger      s    Iq"%v~~a'<=H}}Y'H{Xa[ SH_QK!-HQK8A;??IY&&sH,T,TUVDO     c                      d\  } }t        t        j                        D ]  }|t        j                  |       z  } |j                         |fS )N)abcdefghijklmnopqrstuvwxyz ranger   CAPTCHA_LENGTHr   r   uppercharsretis      r   random_char_challenger&      sI    1JE38**+ $v}}U##$99;r   c                      d\  } }t        t        j                        D ]  }|t        j                  |       z  } |j                         |fS )N)u   äàáëéèïíîöóòüúùr   r   r"   s      r   unicode_challenger(      sI    5JE38**+ $v}}U##$99;r   c                  r   t        t        j                  d      } | j                         }| j	                          	 t        j                  |      j                         }t        |      t        j                  k\  rt        |      t        j                  k  rn]|j                         |j                         fS )Nr)openr   CAPTCHA_WORDS_DICTIONARY	readlinescloser   r   striplenCAPTCHA_DICTIONARY_MIN_LENGTHCAPTCHA_DICTIONARY_MAX_LENGTHr!   lower)fdlineswords      r   word_challenger7   #   s    	h//	5BLLNEHHJ
}}U#))+I???D	XCCC  ::<%%r   c                     t        t        j                  d      } | j                         }| j	                          d}	 t        j                  |      j                         }t        j                  |      j                         }t        j                  t        j                        }|||}t        |      t        j                  k\  rt        |      t        j                  k  rn|j                         |j                         fS )ztYay, undocumneted. Mostly used to test Issue 39 - http://code.google.com/p/django-simple-captcha/issues/detail?id=39rbr   )r+   r   r,   r-   r.   r   r   r/   CAPTCHA_PUNCTUATIONr0   r1   r2   r!   r3   )r4   r5   r6   word1word2puncts         r   $huge_words_and_punctuation_challenger>   1   s    	h//	6BLLNEHHJD
e$**,e$**,h::; %/I???D	XCCC  ::<%%r   c                 0   |j                   }| j                  dd|d   dgddt        j                         | j	                  dd|d   dz   |d   dz
  gt        j                         | j	                  dd|d   dz   |d   gt        j                         | S )Nir      i'  fillr
   )sizearcr   CAPTCHA_FOREGROUND_COLORline)drawimagerC   s      r   
noise_arcsrI   D   s    ::DHHc3Q$a83T3THUII	b$q'B,Q"-H4U4U   	IIsAtAw|T!W-H4U4UIVKr   c           	      
   |j                   }t        t        |d   |d   z  dz              D ]S  }| j                  t	        j
                  d|d         t	        j
                  d|d         ft        j                         U | S )Nr   r
   g?rA   )rC   r   intpointr   r   r   rE   )rG   rH   rC   ps       r   
noise_dotsrN   N   s}    ::D3tAwa(3./0 


^^AtAw'47)CD22 	 	


 Kr   c                     | S )N )rG   rH   s     r   
noise_nullrQ   X   s    Kr   c                    t        j                  dd      }t        j                  dd      }t        j                  dd      }|||g}t        j                  |       t        j                  dd      |d<   d|d   d|d   d|d	   dS )
N@            r   #02Xr
      )r   r   shuffle)idxplaintext_captcharedgreenbluechannelss         r   random_letter_color_challengera   \   s    
..S
!CNN2s#E>>"c"D UD!H
NN8..c*HQK x{3C0!S0ABBr   c                 D    ddl m} | j                  |j                        S )Nr   )ImageFilter)PILrc   filterSMOOTH)rH   rc   s     r   post_smoothrg   k   s    <<**++r   c                     t        d| g      S )3Return url to image. Need for ajax refresh and, etczcaptcha-imageargsr   keys    r   captcha_image_urlrn   q       ?#//r   c                     t        d| g      S )ri   zcaptcha-audiorj   r   rl   s    r   captcha_audio_urlrq   v   ro   r   )r   django.urlsr   captcha.confr   r   r&   r(   r7   r>   rI   rN   rQ   ra   rg   rn   rq   rP   r   r   <module>rt      sK      !
&&&C,0
0r   