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/auth/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 W 5 Q R X t  | ddS t
jj|dddgd}td |st	 " t
jjddd|dddd W 5 Q R X tddiS |jrZ|jt krZ|jd t d krZt	 " t
jjddd|dddd W 5 Q R X tddiS zrdtj }| }|dd}| jd|dg}t|||jj t	   t
jjdddd|i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failoperatecmf_model_nameparent
audit_dataresult_statusi  uJ   Слишком много запросов. Повторите позже.reset_password_expiresemailr   Zfieldsg      ?Login not foundr   r   messageu   Если пользователь существует, ссылка для сброса пароля будет отправлена на его почту.iQ zAlready sentuC   Ссылка для восстановления доступа к z/auth/z/servicedesk/auth/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replacerender_with_paramsr   r   value	Exceptionstr)
selfr   r   Z	limit_keyZattemptsauthsubjectlinkmsg_contentse r6   /./modules/servicedesk/views/restore_password.pypost   sl    





 

 

 &zRestorePasswordView.postc                 C   s  t tjd }tjd }tjj|ddgd}|sxt " tjj	ddd|d	d
dd W 5 Q R X t
  | ddtdS d}| rd}||jkrd}|dkr|jdd t " tjj	ddd||d
dd W 5 Q R X t
  td| S z`| }|  | ||jj| |jdd t   tjj	dddd|idd W 5 Q R X W n tk
r } zhd}tt| t " tjj	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   reset_password_hashr   Zrestore_passwordr   Nr   r   r   r   r   znot authz/servicedesk/auth/signinr   ZexpiredZwrongT)resetz!/servicedesk/auth/signin?restore=)r   r   r   r!   r   r&   r   r    r"   r#   r$   r%   ZredirectZreset_pass_is_expiredr:   Zreset_pass_set_dataZreset_passwordZsavesend_passwordr   r-   r.   ZloggingZwarningr/   Zmake_responseZ_ok)r0   r   hashr1   resultpasswordr5   Zresponser6   r6   r7   r&   K   sf    


 


 

 

 .zRestorePasswordView.getc              	   C   sj   t dd d}| jd||d}dtj }t||| t   tjj	ddd	|i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&servicedesk/auth/signin?action=proceedzsend_password.html)r?   proceed_linku&   Пароль для доступа к r<   r   r   Nr   )r   r   r   r   r   )
Zauth_base_hrefr,   r)   r*   r   r   r    r!   r"   r#   )r0   r?   r   r   rA   r4   r2   r6   r6   r7   r<      s    

 z!RestorePasswordView.send_passwordc                 C   s
   |  dS )Nzrestore_password.html)Zrender)r0   r6   r6   r7   restore_password_form   s    z)RestorePasswordView.restore_password_formN)__name__
__module____qualname____doc__Z__url__cmfviewsactionr8   r&   r<   rB   r6   r6   r6   r7   r   
   s   
<
3r   )r'   Z	cmf.viewsrG   Zcmf.data_providers.baser   Zcmf.includeZmodules.auth.views.responser   Zmodules.auth.models.emailr   r   rH   ZBaseViewr   r6   r6   r6   r7   <module>   s   