U
    [Sez                     @   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j 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   ddl m} |tjd }tjd }tjd }tjd }tjd}tjd}tj|||}|sttd	 t	d
 ||_
|  ztjj||||d W n   td	  Y nX |j  dS )Nr   )r   loginhashsaltnamephonecompanyznot authi  )r   r   Zcompany_nameZphone_numberSigned up successfully)modules.auth.models.emailr   requestvaluesr   modelsCmfAuthZnew_from_login_hash_saltr   r   r   ZsaveZ	CmfPersonZ#register_sdesk_user_without_projectZdpZcommit)	r	   r   r   _hashr   r   r   r   authr
   r
   r   post   s2    


   

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  }ztjj|dgd}|r$|jjrtd|| | }|jdd}	| ||jj n td|| tj d| }	nNtd|| tj||d}| }|rVd|_|jdd}	| ||jj ||	}
|
j}tj d| }	dtj }| jd|	dg}t|||jj W nH tk
r } z(t !d | "ddt|  W Y S d}~X Y nX t#  dS )u   
        Приглашение по email. В эту функцию долбится CRM с уже подготовленным JWT-токеном.
        :return:
        r   )parseemailinvite_must_change_passwordN)FalseZfalseNone0Finvite_tokenZpayloadiss   	pass_hash)r   Zfieldsu   INVITE. Отправляем существующему пользователю {} письмо с инвайтом в crm {} и высылаем ему письмо с паролемZinvite)Zendpointu~   INVITE. Отправляем существующему пользователю {} письмо с инвайтом в crm {}z*/servicedesk/auth/signin?next_url=https://uz   INVITE. Создаем пользователя {} для crm {} и высылаем ему письмо с паролем)r   r      z/servicedesk/auth/invite?u&   Ссылка для доступа к zinvite_by_email.html)Z
invite_urlu8   Не удалось зарегистрироватьсяi  u:   Не удалось зарегистрироваться: r   )$Zurllibr   r   r   r   r   strr   r   Zcheck_tokenshlexZquotelenconfigZIS_BOX_VERSIONr%   Zis_nullprintformatZreset_passwordZreset_pass_linksend_passwordr   valueAUTH_SERVER_URLZpassword_expires_must_changeZurlparsequeryHOSTNAME_FQDNrender_with_paramsr   	ExceptionZloggingZ	exception_errorr   )r	   r   r   r   r"   Zjwtr#   r   passwordZurlZparse_qr0   subjectmsg_contentser
   r
   r   invite_by_email.   sV    
2
 

,zSignupView.invite_by_emailc                 C   s8   t j d}| jd||d}dt j }t||| dS )u   
        Некрасивый дубль models.CmfAuth.send_password(), потому что неясно как делать вызов View -> Model -> View
        z'/servicedesk/auth/signin?action=proceedzsend_password.html)r5   proceed_linku&   Пароль для доступа к N)r*   r/   r2   r1   r   )r	   r5   r   r:   r7   r6   r
   r
   r   r-   k   s    zSignupView.send_passwordN)__name__
__module____qualname__Z__url__r*   ZAUTH_SESSION_COOKIE_DOMAINZ__support__r/   Z__profile__cmfviewsactionr   r   r9   r-   r
   r
   r
   r   r   
   s   


<r   )r(   Zflaskr   Z	cmf.viewsr>   Zcmf.data_providers.baser   Zcmf.includeZmodules.auth.views.responser   r   r   r   r?   ZBaseViewr   r
   r
   r
   r   <module>   s   