U
    Įwh@                     @   sf   d dl Z d dlm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abort)commit_all_ds)*)ResponseMixin)
send_emailnormalize_email_addressc                   @   sd   e Zd ZdZdej dZde  dZe	j
jdd Ze	j
jdd	 Ze	j
jd
d Zdd ZdS )
SignupViewz/auth/signupu,   Обратитесь в <a href="https://wwwu9   /support/">техническую поддержку</a>.u   Перейти в <a href="u   ">Ваш профиль</a>?c                 C   s
   |  dS )Nzsignup.html)Zrender)self r   %./modules/servicedesk/views/signup.pyget   s    zSignupView.getc              
   C   s  t jjstddd ddlm} ddlm} |tj	d }tj	d }tj	d	 }tj	d
 }tj	
d}tj	
d}tjj
|dstjj
|ddrtddd tj|||}	|	std td ||	_|	  ztjj||||d W n   td  Y nX |	j  |	jddd}
dtj }| jd|
dg}zt|||	jj W n: tk
r~ } ztd| tdd W 5 d }~X Y nX dS )Nu,   Регистрация недоступна!Tr   r   )r   parseloginhashsaltnamephonecompany)r   )r   Zinclude_deleteduI   Такой пользователь уже зарегистрированznot authi  )r   r   Zcompany_nameZphone_numberinvite)endpointZsdesk&   Ссылка для доступа к zsignup_send_link.html)Z	auth_linkuA   Не удалось отправить уведомление: %s  u   Не удалось отправить уведомление. Обратитесь в техническую поддержку.Signed up successfully) gZglobal_settingsZservicedesk_allow_auth_guestsZ	cmf_alertmodules.auth.models.emailr   urllibr   requestvaluesr   modelsCmfAuthZ	CmfPersonZnew_from_login_hash_saltr   r   r   ZsaveZ#register_sdesk_user_without_projectZdpZcommitreset_pass_linkconfigHOSTNAME_FQDNrender_with_paramsr   emailvalue	Exceptionlogging	exception)r
   r   r   r   _hashr   r   r   r   authurlsubjectmsg_contentser   r   r   post   sL    


   

zSignupView.postc              
   C   s>  ddl m} ttjd }tjdd}t|dkr8d}tjd }tj	|}t
|d	 d
 }||dt|d  |dt|d   krtjr|dt|d  }zBtjj|ddgd}|rJ|jjr$td|| | }|jdd}	||	}
|
j}tj d| }	| ||jj n$td|| tdd d| }	nrtd|| tj||d}| }|r|d|_|jdd}	| ||jj ||	}
|
j}tdd d| }	dtj }| jd|	dg}t|||jj W nH t k
r2 } z(t!"d | #ddt|  W Y S d}~X Y nX t$  d S )!u   
        Приглашение по email. В эту функцию долбится CRM с уже подготовленным JWT-токеном.
        :return:
        r   r   r&   invite_must_change_passwordN)FalseZfalseNone0Finvite_tokenZpayloadiss   	pass_hash)r   Zfieldsu   INVITE. Отправляем существующему пользователю {} письмо с инвайтом в crm {} и высылаем ему письмо с паролемr   )r   z/servicedesk/auth/invite?u~   INVITE. Отправляем существующему пользователю {} письмо с инвайтом в crm {}Tabsolutez)servicedesk/auth/signin?next_url=https://uz   INVITE. Создаем пользователя {} для crm {} и высылаем ему письмо с паролем)r   r&      zservicedesk/auth/invite?r   zinvite_by_email.html)Z
invite_urlu8   Не удалось зарегистрироватьсяr   u:   Не удалось зарегистрироваться: r   )%r   r   r   r   r   r   strr    r!   Zcheck_tokenshlexquotelenr#   ZIS_BOX_VERSIONr9   Zis_nullprintformatZreset_passwordr"   urlparsequeryZAUTH_SERVER_URLsend_passwordr&   r'   auth_base_hrefZpassword_expires_must_changer$   r%   r   r(   r)   r*   _errorr   )r
   r   r&   r2   r6   Zjwtr7   r,   passwordr-   Zparse_qrD   r.   r/   r0   r   r   r   invite_by_email@   s\    
2
 


,zSignupView.invite_by_emailc                 C   s<   t dd d}| jd||d}dtj }t||| dS )u   
        Некрасивый дубль models.CmfAuth.send_password(), потому что неясно как делать вызов View -> Model -> View
        Tr:   z&servicedesk/auth/signin?action=proceedzsend_password.html)rH   proceed_linku&   Пароль для доступа к N)rF   r%   r#   r$   r   )r
   rH   r&   rJ   r/   r.   r   r   r   rE      s    zSignupView.send_passwordN)__name__
__module____qualname__Z__url__r#   ZAUTH_SESSION_COOKIE_DOMAINZ__support__rF   Z__profile__cmfviewsactionr   r1   rI   rE   r   r   r   r   r	   
   s   

+
?r	   )r>   Zflaskr   Z	cmf.viewsrN   Zcmf.data_providers.baser   Zcmf.includeZmodules.auth.views.responser   r   r   r   rO   ZBaseViewr	   r   r   r   r   <module>   s   