
    6i                     6    d dl T d dlmZ  G d de          ZdS )    )*)abortc                   \    e Zd ZdZdZed             Zd Zej	        j
        d             ZdS )CaptchaMixinrestore_password_captcha   c                 $    t           j        j        S N)gglobal_settingsauth_check_captcha)selfs    ./modules/auth/views/captcha.pycaptcha_enabledzCaptchaMixin.captcha_enabled   s     33    c           
      X   dt           dt           fd}| j        sdS t          j                            dd          }t
                              dd          }|s=t          j                            | j	        dddd	id
ddd           t          d           d| }t          j                            |          }|s=t          j                            | j	        ddddid
ddd           t          d           t          |t          t          f          r|                                nt          |          }|r ||           ||          k    r=t          j                            | j	        ddddid
ddd           t          d           t
                              dd           dS )uo   Проверка капчи для восстановления пароля по captcha_id из сессии.sreturnc                 R    | pd                                                                 S )N )striplower)r   s    r   _normz*CaptchaMixin._check_captcha.<locals>._norm   s"    G??$$**,,,r   Ncaptcha
captcha_idCmfAuthreasonzRequire captcha (no session id)fail   )operatecmf_model_nameparent
audit_dataresult_statussecurity_levelparent_nameparent_codei  auth:captcha:z Require captcha (no redis value)zBad captcha)strr   requestvaluesgetsessionmodelsCmfAuditaudit_eventcaptcha_operater   APPREDIS_DB
isinstancebytes	bytearraydecodepop)r   r   captcha_userr   keystored
stored_vals          r   _check_captchazCaptchaMixin._check_captcha   s   	-S 	-S 	- 	- 	- 	-# 	F~)))T::[[t44
 	O'',Y3T(U$Q d	 (    #JJJ*j**!!#&& 	O'',Y3U(V$Q d	 (    #JJJ(26E9;M(N(N_V]]___TWX^T_T_
 	uu\22eeJ6G6GGGO'',Y=(A$Q d	 (    #JJJL$'''''r   c                    ddl m | j        sdS t                              d          }|s/dd l}t          |                                          }|t          d<   d| }dd                    fdt          d	          D                       }t          j                            ||| j        
           |                                }ddlm} ddlm}  |            }|                    t)          |t*          t,          f          r|                                n|          }	 ||	d          }
d|
j        d<   d|
j        d<   d|
j        d<   |
S )Nr   )choice)r   i  r   r(    ABCDEFGHJKLMNPQRSTUVWXYZ23456789r   c              3   .   K   | ]}           V  d S r
    ).0_alphabetr?   s     r   	<genexpr>z+CaptchaMixin.captcha_img.<locals>.<genexpr>H   s-      ;;Qx((;;;;;;r      )ex)Response)ImageCaptchaz	image/png)mimetypez.no-store, no-cache, must-revalidate, max-age=0zCache-Controlzno-cachePragma0Expires)secretsr?   r   r-   r,   uuidr)   uuid4joinranger2   r3   setcaptcha_ttlencodeflaskrI   captcha.imagerJ   generater4   r5   r6   r7   headers)r   r   rP   r:   valuevalrI   rJ   imagedataresprE   r?   s              @@r   captcha_imgzCaptchaMixin.captcha_img8   su   """"""# 	7 [[..
 	/KKKTZZ\\**J$.GL!*j**5;;;;;%((;;;;;e(8999llnn""""""......~~jui>P.Q.QZcjjlllWZ[[x{333(X_%!+X"%Yr   N)__name__
__module____qualname__r1   rU   propertyr   r=   cmfviewsactionr`   rB   r   r   r   r      sh        0OK4 4 X4)( )( )(X 	Y    r   r   N)cmf.includerW   r   objectr   rB   r   r   <module>rj      sa             Q Q Q Q Q6 Q Q Q Q Qr   