
     h                         d dl Z d dlZd dlmZ d dl d dlmZ d dlm	Z	m
Z
  G d dej                  j                  e      Zy)    N)commit_all_ds)*)ResponseMixin)
send_emailnormalize_email_addressc                       e Zd ZdZdZej                  j                  d        Zej                  j                  d        Z	d Z
ej                  j                  d        Zy)RestorePasswordViewu)    Всё для сброса пароля z/auth/restore_passwordc           
      \   t        t        j                  d         }t        j	                         }d| }t
        j                  j                  |      }|dk(  r t
        j                  j                  |d       |dkD  rat        j                         5  t        j                  j                  ddd||d	d
d       ddd       t                | j                  dd      S t        j                  j!                  |g d      }t#        j$                  d       |sQt        j                         5  t        j                  j                  ddd|ddd       ddd       t'        ddi      S |j(                  r|j(                  t#        j"                         kD  rx|j(                  dz
  t#        j"                         dz
  kD  rQt        j                         5  t        j                  j                  ddd|ddd       ddd       t'        ddi      S 	 dt*        j,                   }|j/                         }|j1                  dd      }| j3                  d|      g}t5        |||j6                  j8                         t        j                         5  t        j                  j                  dddd|id       ddd       t'        ddi      S # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   <xY w# t:        $ r%}	| j                  dt=        |	            cY d}	~	S d}	~	ww xY w)ua    Запрос письма на почту для сброса пароля с формочки. loginz!auth:restore_password:rate_limit:   i,  
   restore_password_get_linkCmfAuthNzToo many attempts)ipr   reasonfailoperatecmf_model_nameparent
audit_dataresult_statusi  uJ   Слишком много запросов. Повторите позже.)reset_password_expiresr   emailr   fieldsg      ?Login not foundr   r   messageu   Если пользователь существует, ссылка для сброса пароля будет отправлена на его почту.iQ zAlready sentuC   Ссылка для восстановления доступа к z/auth/z/servicedesk/auth/zreset_password_email.html)restore_linkok  )r   requestvaluescmfutilget_client_ipAPPREDIS_DBincrexpiredisable_aclmodelsCmfAuditaudit_event
cmf_commit_errorr   gettimesleepjsonifyr   configHOSTNAME_FQDNreset_pass_linkreplacerender_with_paramsr   r   value	Exceptionstr)
selfr   r   	limit_keyattemptsauthsubjectlinkmsg_contentses
             /./modules/servicedesk/views/restore_password.pypostzRestorePasswordView.post   s    (w(?@""$7t<	 <<$$Y/q=LL	3/b=$$& ++7#,&(5DWX"( ,  L;;s$pqq~~!!6b!c

3$$& B++4O`i37e_pDq:@ , BB I  (G  H  I  I &&++diik9++|<tyy{f?UU$$& B++4O`i37e_mDn:@ , BB I  (G  H  I  I	,[\b\p\p[qrG'')D<<*>?D 334O^b3cdL|Wdjj.>.>?$$& @++4O`i37WeDT:> , @@ 	  $C  D  E  	E]  B BB B@ @  	,;;sCF++	,s[   )K.(K(K%A>K= 'K16K= KK"%K.1K:6K= =	L+L& L+&L+c           
         t        t        j                  d         }t        j                  d   }t        j                  j                  |ddg      }|sjt        j                         5  t        j                  j                  ddd|d	d
d       ddd       t                | j                  ddt        d            S d}|j                         rd}||j                  k7  rd}|dk7  rn|j                  d       t        j                         5  t        j                  j                  ddd||d
d       ddd       t                t        d|       S 	 |j!                         }|j#                          | j%                  ||j&                  j(                  |       |j                  d       t        j                         5  t        j                  j                  dddd|id       ddd       t3        t        d|             }| j5                  ||      S # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   KxY w# t*        $ r}d}t,        j/                  t1        |             t        j                         5  t        j                  j                  ddd||d
d       ddd       n# 1 sw Y   nxY wt                | j                  d|t        d|             cY d}~S d}~ww xY w)us    Непосредственно выполнение сброса пароля по ссылке из письма r   hr   reset_password_hashr   restore_passwordr   Nr   r   r   r   r"   znot authz/servicedesk/auth/signinr!   expiredwrongT)resetz!/servicedesk/auth/signin?restore=)r   r#   r$   r,   r   r1   r%   r+   r-   r.   r/   r0   redirectreset_pass_is_expiredrI   reset_pass_set_datareset_passwordsavesend_passwordr   r:   r;   loggingwarningr<   make_response_ok)r=   r   hashr@   resultpasswordrD   responses           rE   r1   zRestorePasswordView.getK   s    (w(?@~~c"~~!!7OQf6g!h$$& B++4FW`37e_pDq:@ , BB L;;sJ9S0TUU%%'F4+++FT>$$4$0$$& B++4FW`37e_eDf:@ , BB L?xHII	_**,HIIKx)9)95A$$4$0$$& @++4FW`37WeDT:> , @@ !,MfX*V!WXxx$''SB BB B@ @  	_FOOCF#$$& B++4FW`37e_eDf:@ , BB B B L;;sAx2STZS[0\']^^	_sg   )(H(H*A-I 'H6,I H'*H36H?;I 	K/4K*?(J0'	K*0J9	5/K*$K/*K/c                 (   t        d       d}| j                  d||      }dt        j                   }t	        |||       t
        j                         5  t        j                  j                  ddd	|id
d       d
d
d
       y
# 1 sw Y   y
xY w)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)rZ   proceed_linku&   Пароль для доступа к rS   r   r   Nr!   )r   r   r   r   r   )
auth_base_hrefr9   r5   r6   r   r%   r+   r,   r-   r.   )r=   rZ   r   r   r^   rC   rA   s          rE   rS   z!RestorePasswordView.send_password   s    
 )$788^_../Cheq.r:6;O;O:PQ<%0  " 	IOO''PY4;U3C/34 ( I	I 	I 	Is   'BBc                 $    | j                  d      S )Nzrestore_password.html)render)r=   s    rE   restore_password_formz)RestorePasswordView.restore_password_form   s    {{233    N)__name__
__module____qualname____doc____url__cmfviewsactionrF   r1   rS   rb    rc   rE   r	   r	   
   sl    3&GYY:E :Ex 	YY1( 1(fI 	YY4 4rc   r	   )r2   	cmf.viewsri   cmf.data_providers.baser   cmf.includemodules.auth.views.responser   modules.auth.models.emailr   r   rj   BaseViewr	   rl   rc   rE   <module>rs      s1      1  5 IF4#)),,m F4rc   