
    T@9i>'                         d dl Z d dlZ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
mZ d dlmZ d dlmZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZ d
Zd Zd Zd ZddZd Zd Z y)    N)BytesIO)Image	ImageDraw	ImageFont)RangedFileResponse)ImproperlyConfigured)Http404HttpResponse)settings)captcha_audio_urlcaptcha_image_url)CaptchaStore   c                 2   t        | d      r | j                  |      \  }}}}||z
  ||z
  fS t        | d      rIt        t        | j	                  |      | j                  |            D cg c]
  \  }}||z    c}}      S | j	                  |      S c c}}w )Ngetbbox	getoffset)hasattrr   tuplezipgetsizer   )fonttext_top_left_right_bottomxys           D/var/www/apihucms/venv/lib/python3.12/site-packages/captcha/views.pyr   r      s    tY'+||D'9$eVW~w~--	{	#DLL,>t@T(UV1a!eVWW||D!! Ws   +B
c                     t         j                  dk(  rt        j                  d|       }|S t        j                  d| t         j                        }|S )NtransparentRGBARGB)r   CAPTCHA_BACKGROUND_COLORr   new)sizeimages     r   makeimgr(   "   sF    ((M9		&$' L 		%x'H'HIL    c                     t        j                  |       }t        j                         D ]  } |||       } t        j                         D ]
  } ||       }  | S )N)r   Drawr   noise_functionsfilter_functions)r'   drawfs      r   	add_noiser0   *   s[    >>% D%%' u~&&( % Lr)   c                    |dk(  rt         j                  st        	 t        j                  j                  |      }t        j                  |       |j                  }t        t         j                  t              rt         j                  }nSt        t         j                  t        t        f      r$t        j                   t         j                        }nt#        d      |j%                         j'                         j)                  d      r(t+        j,                  |t         j.                  |z        }nt+        j0                  |      }t         j2                  rt         j2                  }n%t5        ||      }|d   dz  t7        |d   d	z        f}t9        |      }d}	g }
|D ]A  }|t         j:                  v rt=        |
      dk\  r|
d
xx   |z  cc<   1|
j?                  |       C t         j@                  rg }tC        |
      D ]  \  }}t         j@                  rt9        |      }tE        jF                  d|t        jH                  |djK                  |
                  }tE        jF                  dt5        |d|z        d      }tM        jN                  |      }|jQ                  dd|z  |d       t         jR                  r@|jU                  t        jV                  t         jR                   dtD        jX                        }|j[                  |j]                               }tE        jF                  d|      }|j_                  ||	t`        |	|jb                  d   z   t`        |jb                  d   z   f       |jb                  }tE        jd                  |||      }|	dz   |jb                  d   z   }	t         j@                  stg        |      }j?                  |        t         j@                  rtC              D ]  \  }}t         j2                  rvt9        |      }|j_                  |t7        |d   |	z
  dz        t7        |d   jb                  d   z
  dz  t`        z
        f       |j[                  dd|d   |d   f      ||<   |j[                  dd|	dz   |d   f      ||<    nt         j2                  rst9        |      }|j_                  |t7        |d   |	z
  dz        t7        |d   jb                  d   z
  dz  t`        z
        f       |j[                  dd|d   |d   f      }n|j[                  dd|	dz   |d   f      }ti               }t         j@                  rFd   jk                  |t         jl                  rdndd|dd  dddd       t         jl                  rdnd}ntg        |      }|jk                  |d       d}|jo                  d       t        |      }|jq                  |js                                |ju                         |d<   t        j                          |S # t        j                  $ r t        d      cY S w xY w) N   hashkey  statuszQsettings.CAPTCHA_FONT_PATH needs to be a path to a font or list of paths to fontsttfr      gffffff?r#    Lz %s z#000000)r   r   z#ffffff)r   fill)expandresampleAVIFGIFTFi  )save_allappend_imagesoptimisedurationloopdisposalz
image/avifz	image/gifPNGz	image/pngcontent_typezContent-length);r   CAPTCHA_2X_IMAGEr	   r   objectsgetDoesNotExistr
   randomseed	challenge
isinstanceCAPTCHA_FONT_PATHstrlistr   choicer   lowerstripendswithr   truetypeCAPTCHA_FONT_SIZEloadCAPTCHA_IMAGE_SIZEr   intr(   CAPTCHA_PUNCTUATIONlenappendCAPTCHA_ANIMATED	enumerater   r%   get_letter_colorjoinr   r+   r   CAPTCHA_LETTER_ROTATIONrotate	randrangeBICUBICcropr   pasteDISTANCE_FROM_TOPr&   	compositer0   r   saveCAPTCHA_ANIMATED_USE_AVIFseekwritereadtell)requestkeyscalestorer   fontpathr   r&   r'   xposcharlistcharframesindexfgimage	charimagechardraw	maskimageiframetmpimgoutrJ   responses                           r   captcha_imager   5   s{   z(33($$(((5
 KK??D(,,c2--	H..u	>==!;!;<"_
 	
 ~~((/!!(H,F,F,NO~~h'""**tT"Q!Sa3/0DMEDH "8///CMQ4FRLD LOOD!	"    * %!t $$DME))4225"''(:KL
 IIc74$#?K	>>),fftm$YG++!((  ("B"BC ) I
 NN9#4#4#67	IIc4(	!y~~a((!INN1$55		
 ~~	:ax)..++ $$e$EMM% K%!N   !&) 	BHAu** T!Wt^q01T!Wy~~a'88A=@QQR #KKAtAwQ(@Aq	!JJ1dQhQ'@Aq		B  &&T]FLLa41,-a9>>!#449<MMN KKAtAwQ 89EJJ1dQhQ89E
)C  q	88Fe * 	 		
 %>>LK 	
 % 

3"HHQK6HNN388:!$H KKMOc $$ (3''(s    X% %YYc                 n   t         j                  r\	 t        j                  j	                  |      }|j                  }dt         j                  k(  r3|j                  dd      j                  dd      j                  d	d
      }ndj                  t        |            }t        t        j                  j                  t        j                          | dt#        j$                  d       d            }t'        j(                  t         j                  d|d|g       t         j*                  r	 t'        j(                  t         j*                  dd|gd      j,                  j/                         j1                         }t        t        j                  j                  t        j                          | dt#        j$                  d       d            }t'        j(                  t         j*                  d|d|dddddg
       t        t        j                  j                  t        j                          | dt#        j$                  d       d            }t'        j(                  t         j*                  d||ddd d!|g	       t        j4                  |       t        j4                  |       t        j6                  ||       t        j                  j9                  |      rt        j:                         }t=        |d"      5 }	|j?                  |	jA                                d d d        |jC                  d#       t        j4                  |       tE        | |d$%      }
d&jG                  |      |
d'<   |
S tH        # t        j
                  $ r t        d      cY S w xY w# t2        $ r d}Y +w xY w# 1 sw Y   xY w)(Nr3   r5   r6   zcaptcha.helpers.math_challenge*times-minus+plusz, _   z.wavz-tz-oz--iz-rT)capture_output8000z
_noise.wavz-nsynth2
brownnoisegainz-15z_merged.wavz-mwavpcmz-b16rbr   z	audio/wavrI   zattachment; filename="{}.wav"zContent-Disposition)%r   CAPTCHA_FLITE_PATHr   rL   rM   rN   r
   rQ   CAPTCHA_CHALLENGE_FUNCTreplacere   rU   rT   ospathtempfile
gettempdirsecretstoken_urlsafe
subprocessrunCAPTCHA_SOX_PATHstdoutdecoderX   	ExceptionremoverenameisfileTemporaryFileopenrq   rr   rp   r   formatr	   )rt   ru   rw   r   r   sample_ratearbnoisepath
mergedpathtemporary_fileoriginal_filer   s              r   captcha_audior      s"   ""	, ((,,S,9E
 +x/O/OO<<W-55c7CKKCQWXD99T$Z(DGGLL,,.3%q9N9Nq9Q8RRV0WX
 	33T4tLM $$%NN!22E4F'+ VFFHUW  '')e1W22156jAL NN--   '')e1W22156kBJ NN-- 
 IIl#IIdOIIj$'77>>$%335NdD! ;]$$]%7%7%9:;"IIdO)kH /N.T.T/H*+ O
Mo (( 	,s++	,4  %$%b; ;s0    M4 -AN < N+4NNN('N(+N4c                    | j                   j                  d      dk(  st        t        j                         }|t        |      t        j                  rt        |      ndd}t        t        j                  |      d      S )z5Return json with new captcha for ajax refresh requestzx-requested-withXMLHttpRequestN)ru   	image_url	audio_urlzapplication/jsonrI   )headersrM   r	   r   pickr   r   r   r   r
   jsondumps)rt   new_keyto_json_responses      r   captcha_refreshr   ,  sq    ??126FF!G&w/&& 'w/ 

#34CUVVr)   )r9   )!r   r   rO   r   r   r   ior   PILr   r   r   ranged_responser   django.core.exceptionsr   django.httpr	   r
   captcha.confr   captcha.helpersr   r   captcha.modelsr   rl   r   r(   r0   r   r   r    r)   r   <module>r      s]     	      + + . 7 - ! @ '  "Vr[|Wr)   