
    6i                     0    d dl  d dlmZ  G d de      Zy)    )*)abortc                   b    e Zd ZdZdZed        Zd Zej                  j                  d        Zy)CaptchaMixinrestore_password_captcha   c                 6    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3    c           
      "   dt         dt         fd}| j                  syt        j                  j	                  dd      }t
        j	                  dd      }|s>t        j                  j                  | j                  dddd	id
ddd       t        d       d| }t        j                  j	                  |      }|s>t        j                  j                  | j                  ddddid
ddd       t        d       t        |t        t        f      r|j!                         n
t        |      }|r ||       ||      k7  r>t        j                  j                  | j                  ddddid
ddd       t        d       t
        j#                  dd       y)uo   Проверка капчи для восстановления пароля по captcha_id из сессии.sreturnc                 F    | xs dj                         j                         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   sp   	-S 	-S 	-##~~)))T:[[t4
OO'',,Y3T(U$Q d	 (  #Jj\*!!#&OO'',,Y3U(V$Q d	 (  #J(26E9;M(NV]]_TWX^T_
u\2eJ6GGOO'',,Y=(A$Q d	 (  #JL$'r   c                 z   ddl m | j                  syt        j	                  d      }|s&dd l}t        |j                               }|t        d<   d| }ddj                  fdt        d	      D              }t        j                  j                  ||| j                  
       |j                         }ddlm} ddlm}  |       }|j'                  t)        |t*        t,        f      r|j/                         n|      }	 ||	d      }
d|
j0                  d<   d|
j0                  d<   d|
j0                  d<   |
S )Nr   )choice)r   i  r   r(    ABCDEFGHJKLMNPQRSTUVWXYZ23456789r   c              3   .   K   | ]  }         y wr
    ).0_alphabetr?   s     r   	<genexpr>z+CaptchaMixin.captcha_img.<locals>.<genexpr>H   s     ;Qx(;s      )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   s   "## [[.
TZZ\*J$.GL!j\*5;%(;;e(8(89lln".~~jui>P.QcjjlWZ[{3(X_%!+X"%Yr   N)__name__
__module____qualname__r1   rU   propertyr   r=   cmfviewsactionr`   rB   r   r   r   r      sB    0OK4 4)(X 	YY r   r   N)cmf.includerW   r   objectr   rB   r   r   <module>rj      s     Q6 Qr   