U
     h                     @   s(   d dl T d dlmZ G dd deZdS )    )*)abortc                   @   s8   e Zd ZdZdZedd Zdd Zej	j
dd Zd	S )
CaptchaMixinZrestore_password_captcha   c                 C   s   t jjS N)gZglobal_settingsZauth_check_captcha)self r	   ./modules/auth/views/captcha.pycaptcha_enabled   s    zCaptchaMixin.captcha_enabledc                 C   s  t t ddd}| jsdS tjdd}tdd}|sdtjj| j	dddd	id
ddddd	 t
d d| }tj|}|stjj| j	ddddid
ddddd	 t
d t|ttfr| nt |}|r||||kr
tjj| j	ddddid
ddddd	 t
d tdd dS )uo   Проверка капчи для восстановления пароля по captcha_id из сессии.)sreturnc                 S   s   | pd   S )N )striplower)r   r	   r	   r
   _norm   s    z*CaptchaMixin._check_captcha.<locals>._normNZcaptcha
captcha_idZCmfAuthreasonzRequire captcha (no session id)ZfailT   )	ZoperateZcmf_model_nameparentZ
audit_dataZresult_statusZcurrent_transactionZsecurity_levelparent_nameZparent_codei  auth:captcha:z Require captcha (no redis value)zBad captcha)strr   ZrequestvaluesgetsessionZmodelsZCmfAuditZaudit_eventcaptcha_operater   APPREDIS_DB
isinstancebytes	bytearraydecodepop)r   r   Zcaptcha_userr   keyZstoredZ
stored_valr	   r	   r
   _check_captcha   s`         
          zCaptchaMixin._check_captchac                    s   ddl m | jsdS td}|s@dd l}t| }|td< d| }d d fdd	t	d
D }t
jj||| jd | }ddlm} ddlm} | }|t|ttfr| n|}	||	dd}
d|
jd< d|
jd< d|
jd< |
S )Nr   )choice)r   i  r   r   Z ABCDEFGHJKLMNPQRSTUVWXYZ23456789r   c                 3   s   | ]} V  qd S r   r	   ).0_Zalphabetr&   r	   r
   	<genexpr>H   s     z+CaptchaMixin.captcha_img.<locals>.<genexpr>   )ex)Response)ImageCaptchaz	image/png)Zmimetypez.no-store, no-cache, must-revalidate, max-age=0zCache-Controlzno-cacheZPragma0ZExpires)Zsecretsr&   r   r   r   uuidr   Zuuid4joinranger   r   setcaptcha_ttlencodeflaskr-   Zcaptcha.imager.   Zgenerater   r    r!   r"   Zheaders)r   r   r0   r$   valuevalr-   r.   ZimagedataZrespr	   r)   r
   captcha_img8   s,    

 


zCaptchaMixin.captcha_imgN)__name__
__module____qualname__r   r4   propertyr   r%   ZcmfZviewsactionr:   r	   r	   r	   r
   r      s   
,r   N)Zcmf.includer6   r   objectr   r	   r	   r	   r
   <module>   s   