
    i                        d dl Z d dlZd dlZ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 d dlmZmZ d dlmZmZmZ d dlmZ 	 d d	lmZ n# e$ r	 d d
lmZ Y nw xY w	 d dlZn# e$ r	 d dlmZ Y nw xY wdZd Zd Z ddZ!d Z"d Z#dS )    N)settings)captcha_audio_urlcaptcha_image_url)CaptchaStore)ImproperlyConfigured)Http404HttpResponse)Image	ImageDraw	ImageFont)RangedFileResponse)StringIO)BytesIO)
simplejson   c                 ~    |                      |          }|d         |d         z
  }|d         |d         z
  dz   }||fS )N   r            )getbbox)fonttextbboxwidthheights        E/srv/django_bis/venv311/lib/python3.11/site-packages/captcha/views.pygetsizer      sH     <<DGd1gE!WtAw#F&=    c                     t           j        dk    rt          j        d|           }n t          j        d| t           j                  }|S )NtransparentRGBARGB)r   CAPTCHA_BACKGROUND_COLORr
   new)sizeimages     r   makeimgr(   (   s>    (M99	&$''	%x'HIILr   r   c           
      J
   |dk    rt           j        st          	 t          j                            |          }n%# t          j        $ r t          d          cY S w xY wt          j	        |           |j
        }t          t           j        t                    rt           j        }nTt          t           j        t          t          f          rt          j        t           j                  }nt#          d          |                                                                                    d          r#t+          j        |t           j        |z            }nt+          j        |          }t           j        rt           j        }n3t5          ||          }|d         dz  t7          |d         d	z            f}t9          |          }d}	g }
|D ]I}|t           j        v r$t=          |
          dk    r|
d
xx         |z  cc<   4|
                    |           J|
D ]j}tA          j!        d|t           j"                  }tA          j!        dt5          |d|z            d          }tG          j$        |          }|%                    dd|z  |d           t           j&        r8|'                    t          j(        t           j&         dt@          j)                  }|*                    |+                                          }tA          j!        d|          }|,                    ||	tZ          |	|j.        d         z   tZ          |j.        d         z   f           |j.        }tA          j/        |||          }|	dz   |j.        d         z   }	lt           j        rt9          |          }|,                    |t7          |d         |	z
  dz            t7          |d         |j.        d         z
  dz  tZ          z
            f           |*                    dd|d         |d         f          }n"|*                    dd|	dz   |d         f          }tG          j$        |          }t          j0                    D ]} |||          }t          j1                    D ]} ||          }te                      }|3                    |d           |4                    d           t          d          }|5                    |6                                           |7                                |d<   |S )Nr   hashkey  statuszQsettings.CAPTCHA_FONT_PATH needs to be a path to a font or list of paths to fontsttfr   r   gffffff?r#   Lz %s z#000000)r   r   z#ffffff)r   fill)expandresamplePNGz	image/pngcontent_typezContent-length)8r   CAPTCHA_2X_IMAGEr   r   objectsgetDoesNotExistr	   randomseed	challenge
isinstanceCAPTCHA_FONT_PATHstrlisttuplechoicer   lowerstripendswithr   truetypeCAPTCHA_FONT_SIZEloadCAPTCHA_IMAGE_SIZEr   intr(   CAPTCHA_PUNCTUATIONlenappendr
   r%   CAPTCHA_FOREGROUND_COLORr   Drawr   CAPTCHA_LETTER_ROTATIONrotate	randrangeBICUBICcropr   pasteDISTANCE_FROM_TOPr&   	compositenoise_functionsfilter_functionsr   saveseekwritereadtell)requestkeyscalestorer   fontpathr   r&   r'   xposcharlistcharfgimage	charimagechardraw	maskimagetmpimgdrawfoutresponses                        r   captcha_imagerr   0   s   zz(3z($(((55$ ( ( (3''''''( K?D(,c22 
-	H.u	>	> 
=!;<<"_
 
 	
 ~~((// (!(H,F,NOO~h''" 1*tT""Q!Sa3//0DMMEDH " "8///CMMQ4F4FRLLLD LLLLOOD!!!! , ,)E4)JKKIc74$#?#?KK	>),,fftm$YGGG+ 	!(( ("BC )  I
 NN9#4#4#6#677	Ic4((	!y~a((!IN1$55		
 	
 	
 ~	::ax).++" 6T!Wt^q())T!Wy~a00A58IIJJ	
 	
 	
 Q47DG455

Aq$(DG455>%  D%''  qu~~&((  %
**C	JJsEHHQKKK555HNN388::!$HOs    < AAc                 X   t           j        r	 t          j                            |          }n%# t          j        $ r t          d          cY S w xY w|j        }dt           j        k    r?|	                    dd          	                    dd          	                    d	d
          }n"d
                    t          |                    }t          t          j        
                    t          j                    d|z                      }t#          j        t           j        d|d|g           t           j        rt          t          j        
                    t          j                    d          |z            }t          t          j        
                    t          j                    d          |z            }t#          j        t           j        ddd|dddddg
           t#          j        t           j        d||dddd|g	           t          j        |           t          j        |           t          j        ||           t          j                            |          r:t/          | t1          |d          d          }d                     |          |d!<   |S t4          )"Nr*   r,   r-   zcaptcha.helpers.math_challenge*times-minus+plusz, z%s.wavz-tz-oz%s_arbitrary.wavz%s_merged.wavz-r8000z-nsynth2
brownnoisegainz-15z-mwavpcmz-b16rbz	audio/wavr6   zattachment; filename="{}.wav"zContent-Disposition)r   CAPTCHA_FLITE_PATHr   r9   r:   r;   r	   r>   CAPTCHA_CHALLENGE_FUNCTreplacejoinrB   rA   ospathtempfile
gettempdir
subprocesscallCAPTCHA_SOX_PATHremoverenameisfiler   openformatr   )ra   rb   rd   r   r   arbnoisepath
mergedpathrq   s           r   captcha_audior      s   " 9	, (,,S,99EE( 	, 	, 	,s++++++	, +x/OOO<<W--55c7CCKKCQWXXDD99T$ZZ((D27<< 3 5 5x#~FFGG4dD$MNNN $ "	(X0224FGG#M L RW\\(*=*?*?QQTWWXXJO-     O- 
   Il###IdOOOIj$'''7>>$ 	)dD))  H /N.T.TUX.Y.YH*+O
Ms    0 AAc                    | j                             d          dk    st          t          j                    }|t          |          t          j        rt          |          ndd}t          t          j        |          d          S )z8  Return json with new captcha for ajax refresh request zx-requested-withXMLHttpRequestN)rb   	image_url	audio_urlzapplication/jsonr6   )headersr:   r   r   pickr   r   r   r   r	   jsondumps)ra   new_keyto_json_responses      r   captcha_refreshr      s    ?1226FFF!!G&w//3;3NX&w///TX 
 
#344CUVVVVr   )r   )$r   r<   r   r   captcha.confr   captcha.helpersr   r   captcha.modelsr   django.core.exceptionsr   django.httpr   r	   PILr
   r   r   ranged_responser   	cStringIOr   ImportErrorior   r   django.utilsr   rX   r   r(   rr   r   r    r   r   <module>r      s   				       ! ! ! ! ! ! @ @ @ @ @ @ @ @ ' ' ' ' ' ' 7 7 7 7 7 7 - - - - - - - - + + + + + + + + + + . . . . . .'""""""" ' ' '&&&&&&&&'0KKKK 0 0 0////////0  	 	 	  a a a aH; ; ;|W W W W Ws$   A AAA" "A0/A0