
    h                     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                 ^   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d	  	         t          d           d| }t          j                            |          }|s>t          j                            | j	        ddddid
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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)failT   )	operatecmf_model_nameparent
audit_dataresult_statuscurrent_transaction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ranger3   r4   setcaptcha_ttlencodeflaskrJ   captcha.imagerK   generater5   r6   r7   r8   headers)r   r   rQ   r;   valuevalrJ   rK   imagedataresprF   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__r2   rV   propertyr   r>   cmfviewsactionra   rC   r   r   r   r      sh        0OK4 4 X4)( )( )(X 	Y    r   r   N)cmf.includerX   r   objectr   rC   r   r   <module>rk      sa             Q Q Q Q Q6 Q Q Q Q Qr   