U
    h                      @   sZ   d dl Z d dlZd dlmZ d dlT d dlmZ ddlm	Z	m
Z
 G dd dejjeZdS )	    N)commit_all_ds)*)ResponseMixin   )
send_emailnormalize_email_addressc                   @   sL   e Zd ZdZdZejjdd Zejjdd Z	dd Z
ejjd	d
 ZdS )RestorePasswordViewu)    Всё для сброса пароля z/restore_passwordc           
   
   C   s  t tjd }t }d| }tj|}|dkrBtj|d |dkrt	 & t
jjddd||d	d
ddd W 5 Q R X t  | ddS t
jj|dddddgd}td |st	 $ t
jjddd|ddddd W 5 Q R X tddiS |jrd|jt krd|jd t d krdt	 $ t
jjddd|ddddd W 5 Q R X tddiS zhdtj }| }| jd|dg}t|||jj t	 " t
jjdddd|iddd W 5 Q R X W n8 tk
r }	 z| d t|	 W Y S d}	~	X Y nX tddiS )!ua    Запрос письма на почту для сброса пароля с формочки. loginz!auth:restore_password:rate_limit:   i,  
   Zrestore_password_get_linkCmfAuthNzToo many attempts)ipr	   reasonfailToperatecmf_model_nameparent
audit_dataresult_statuscurrent_transactioni  uJ   Слишком много запросов. Повторите позже.reset_password_expiresreset_password_hashemailscoper	   Zfieldsg      ?Login not foundr	   r   messageu   Если пользователь существует, ссылка для сброса пароля будет отправлена на его почту.iQ zAlready sentuC   Ссылка для восстановления доступа к zreset_password_email.html)Zrestore_linkok  )r   requestvaluescmfutilZget_client_ipZAPPZREDIS_DBZincrZexpiredisable_aclmodelsCmfAuditaudit_event
cmf_commit_errorr   gettimesleepZjsonifyr   configHOSTNAME_FQDNZreset_pass_linkrender_with_paramsr   r   value	Exceptionstr)
selfr	   r   Z	limit_keyZattemptsauthsubjectlinkmsg_contentse r9   (./modules/auth/views/restore_password.pypost   sr    


	


  

  

  &zRestorePasswordView.postc                 C   s  t tjd }tjd }tjj|ddddgd}|sjtjjdd	d
|ddddd t  | 	ddt
dS d}| rzd}||jkrd}|dkr|jdd t $ tjjdd	d
||dddd W 5 Q R X t  t
d| S zb| }|  | ||jj| |jdd t " tjjdd	d
d|iddd W 5 Q R X W n tk
r } zjd}tt| t $ tjjdd	d
||dddd W 5 Q R X t  | 	d|t
d|  W Y S d
}~X Y nX tt
d| }| ||S )us    Непосредственно выполнение сброса пароля по ссылке из письма r	   hr   r   r   r   r   Zrestore_passwordr   Nr   r   r   Tr   r    znot authz/auth/signinr   ZexpiredZwrong)resetz/auth/signin?restore=)r   r!   r"   r%   r   r*   r&   r'   r(   r)   ZredirectZreset_pass_is_expiredr   Zreset_pass_set_datar#   r$   Zreset_passwordZsavesend_passwordr   r0   r1   ZloggingZwarningr2   Zmake_responseZ_ok)r3   r	   hashr4   resultpasswordr8   Zresponser9   r9   r:   r*   K   sl    

  


  

  

  .zRestorePasswordView.getc              	   C   sl   t dd d}| jd||d}dtj }t||| t " tjj	ddd	|id
ddd W 5 Q R X d
S )uK  
        Некрасивый дубль models.CmfAuth.send_password(), потому что неясно как делать вызов View -> Model -> View
        А также дубль views.signup.SignupView.send_password() потому что не ясно как импортировать View внутри View
        T)absolutezauth/signin?action=proceedzsend_password.html)rA   proceed_linku&   Пароль для доступа к r>   r   r	   Nr   )r   r   r   r   r   r   )
Zauth_base_hrefr/   r-   r.   r   r#   r$   r%   r&   r'   )r3   rA   r   r	   rC   r7   r5   r9   r9   r:   r>   ~   s    

  z!RestorePasswordView.send_passwordc                 C   s
   |  dS )Nzrestore_password.html)Zrender)r3   r9   r9   r:   restore_password_form   s    z)RestorePasswordView.restore_password_formN)__name__
__module____qualname____doc__Z__url__cmfviewsactionr;   r*   r>   rD   r9   r9   r9   r:   r   
   s   
<
2r   )r+   Z	cmf.viewsrI   Zcmf.data_providers.baser   Zcmf.includeZmodules.auth.views.responser   Zmodels.emailr   r   rJ   ZBaseViewr   r9   r9   r9   r:   <module>   s   