U
    `e                     @   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jj|dgd}|sbt $ tjj	ddd|ddd	d
d W 5 Q R X | 
ddS |jr|jt kr|jd t d krt $ tjj	ddd|ddd	d
d W 5 Q R X tddiS ztdtj }| }|dd}| 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
rv } z| 
dt| W Y S d}~X Y nX tddiS )ua    Запрос письма на почту для сброса пароля с формочки. loginr   r   ZfieldsZrestore_password_get_linkCmfAuthNLogin not foundr   reasonfailToperatecmf_model_nameparent
audit_dataresult_statuscurrent_transactioni  u,   Такого пользователя нетiQ i,  zAlready sentmessageu   Вам на почту уже отправлена ссылка для сброса пароля. Для повторной отправки повторите попытку позже.uC   Ссылка для восстановления доступа к z/auth/z/servicedesk/auth/zreset_password_email.html)Zrestore_linkok  uY   Вам на почту отправлена ссылка для сброса пароля)r   requestvaluesmodelsr
   getcmfutildisable_aclCmfAuditaudit_event_errorZreset_password_expirestimeZjsonifyconfigHOSTNAME_FQDNZreset_pass_linkreplacerender_with_paramsr   emailvalue	Exceptionstr)selfr   authsubjectlinkmsg_contentse r1   /./modules/servicedesk/views/restore_password.pypost   sP    

  

  

  &zRestorePasswordView.postc                 C   s  t tjd }tjd }tjj|dgd}|sxt $ tjj	d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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	   Zrestore_passwordr
   Nr   r   r   Tr   r   znot authz/servicedesk/auth/signinr   ZexpiredZwrong)resetz!/servicedesk/auth/signin?restore=)r   r   r   r   r
   r   r   r   r   r    r   r!   ZredirectZreset_pass_is_expiredZreset_password_hashZreset_pass_set_dataZreset_passwordZsavesend_passwordr'   r(   r)   ZloggingZwarningr*   Zmake_responseZ_ok)r+   r   hashr,   resultpasswordr0   Zresponser1   r1   r2   r   5   sn    


  


  

  

  .zRestorePasswordView.getc              	   C   sh   t j 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
        z'/servicedesk/auth/signin?action=proceedzsend_password.html)r9   proceed_linku&   Пароль для доступа к r6   r
   r   Nr   T)r   r   r   r   r   r   )
r#   ZAUTH_SERVER_URLr&   r$   r   r   r   r   r   r    )r+   r9   r'   r   r:   r/   r-   r1   r1   r2   r6   k   s    

  z!RestorePasswordView.send_passwordc                 C   s
   |  dS )Nzrestore_password.html)Zrender)r+   r1   r1   r2   restore_password_formz   s    z)RestorePasswordView.restore_password_formN)__name__
__module____qualname____doc__Z__url__cmfviewsactionr3   r   r6   r;   r1   r1   r1   r2   r   
   s   
&
5r   )r"   Z	cmf.viewsr@   Zcmf.data_providers.baser   Zcmf.includeZmodules.auth.views.responser   Zmodules.auth.models.emailr   r   rA   ZBaseViewr   r1   r1   r1   r2   <module>   s   