U
    Rd-                     @   s   d Z ddlZ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 dd	lmZ dd
lmZ ddlmZ G dd dejjeZdS )u  
Документация по выдаче VM: https://bcrm.carbonsoft.ru/project/Document/DOC-000884
Если кратко:
+----------+--------+-----------------------+
|   Этап   |  View  |      Supervisor       |
+----------+--------+-----------------------+
| Register | Signup | ---                   |
| Assign   | CRM    | cloud_assign_vm.sh    |
| Prepare  | CRM    | vm_assign_prepare.sh  |
| Branding | CRM    | vm_assign_branding.sh |
+----------+--------+-----------------------+
    N)abort)commit_all_ds)*)ResponseMixin   )
send_emailnormalize_email_address)normalize_phone)
Supervisor)validate_org_namec                   @   s   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d
d Ze	j
jdd Ze	j
jdd Zdd ZdS )
SignupViewz/signupu,   Обратитесь в <a href="https://wwwu9   /support/">техническую поддержку</a>.u   Перейти в <a href="u   ">Ваш профиль</a>?c                 C   s   t jr
dS | dS )N{   Регистрация без приглашения не поддерживается в коробочной версииzsignup.html)configIS_BOX_VERSIONZrender)self r   ./modules/auth/views/signup.pyget$   s    zSignupView.getc                 C   sv   t jr
dS ttjd }tjd }tjd }tjd }tj|||}|sZtd t	d ||_
|  |j  dS )	Nr   loginhashsaltphoneznot auth  Signed up successfully)r   r   r   requestvaluesmodelsCmfAuthZnew_from_login_hash_saltr   r   r   saveZdpZcommit)r   r   _hashr   r   authr   r   r   post*   s    



zSignupView.postc                 C   s*   t j| | ||d}| }|  ||fS )N)r   emailorg_namer   )r   r   reset_passwordr   )r   r#   r   r    passwordr   r   r   _create_auth=   s    zSignupView._create_authc              
   C   s  t jr
dS tjs| ddS tjjj}tjj	|d}|sD| ddS |j
sP|jrb| dd| j S |jj}ddd	}|sd
|d< | D ]$\}}tj	|s| d|  S qtjd dddd}tjd  }tj	d}	|	stj	d}	tj	dd}
|sbtj	drbtj	d}t|}z||_|  W n& tk
r`   | jdddd Y S X t|\}}|s| d|S t  zt|||||	|
\}}}W n2 tk
r } ztd |W 5 d}~X Y nX | tddt j  d i|S )u  
        Запрос приходит от авторизованного пользователя из account.evacrm.ru
        Позволяем продолжить выдачу виртуалки в случае если первая попытка провалилась, но учётку создали
        Не отправляем запрос напрямую в cloud_assign_supervisor_call, здесь валидируем то что:
        1. Юзер авторизован.
        2. Его учётка есть в БД.
        3. У него нет виртуалки (иногда происходит, сделали хак _cloud_assign_continue_crm_already_exists).
        r   r   uV   Зарегистрируйтесь, чтобы получить демо-версию.)r   uL   Ваша учётная запись, похоже, была удалена.u*   У вас уже есть продукт. u=   Укажите адрес входа для продукта.uO   Укажите название компании для регистрации.)r#   companyu   Проверьте введенные данные, номер телефона должен содержать от 11 до 14 символов.r   r'   " 'r#   	user_nameZlead_contact_namelanding_projectZ
evaprojectu@   Введите корректный номер телефона.)Zproblem_fielduD   Не удалось выдать виртуальную машинуNhostnameZaccount/auth/signin?action=proceed)!r   r   gr    _errorr"   valuer   r   r   Zscopegroups__support__r   itemsr   ZjsonreplacestripZcookiesr	   r   ZCmfValidationErrorr   r   r
   Zcloud_assign	Exceptionlogging	exceptionZ_okZjsonifyAUTH_SESSION_COOKIE_DOMAIN)r   r   r    r   Zerror_messageskeymessager'   r#   r+   r,   resZerr_textr-   outerrr   r   r   cloud_assign_continueD   s\    


z SignupView.cloud_assign_continuec              
   C   s  t tjd }tjdd}t|dkr,d}tjd }tj|}t	|d d }||dt
|d	  |dt
|d	   krtjr|dt
|d	  }ztjj|d
gd}|r|jjrtd|| | }|jdd}| ||jj n td|| tj d| }nNtd|| tj||d}| }|rFd|_|jdd}| ||jj 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"   invite_must_change_passwordN)FalseZfalseNone0Finvite_tokenZpayloadissr   	pass_hash)r   Zfieldsu   INVITE. Отправляем существующему пользователю {} письмо с инвайтом в crm {} и высылаем ему письмо с паролемZinvite)Zendpointu~   INVITE. Отправляем существующему пользователю {} письмо с инвайтом в crm {}z/auth/signin?next_url=https://uz   INVITE. Создаем пользователя {} для crm {} и высылаем ему письмо с паролем)r   r"      u&   Ссылка для доступа к zinvite_by_email.html)Z
invite_urlu8   Не удалось зарегистрироватьсяi  u:   Не удалось зарегистрироваться: r   ) r   r   r   r   strr   r   Zcheck_tokenshlexZquotelenr   r   rG   Zis_nullprintformatr$   Zreset_pass_linksend_passwordr"   r1   AUTH_SERVER_URLZpassword_expires_must_changePROJECT_NAMErender_with_paramsr   r7   r8   r9   r0   r   )r   r"   rA   rE   ZjwtrF   r    r%   Zurlsubjectmsg_contentser   r   r   invite_by_email   sN    
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
        r.   zsend_password.html)r%   proceed_linku&   Пароль для доступа к N)r   rO   rQ   rP   r   )r   r%   r"   rV   rS   rR   r   r   r   rN      s    zSignupView.send_passwordN)__name__
__module____qualname__Z__url__r   r:   r3   rO   Z__profile__cmfviewsactionr   r!   staticmethodr&   r@   rU   rN   r   r   r   r   r      s   



C
8r   )__doc__rJ   ZidnaZflaskr   Z	cmf.viewsrZ   Zcmf.data_providers.baser   Zcmf.includeZmodules.auth.views.responser   Zmodels.emailr   r   Zmodels.phoner	   Zmodels.supervisorr
   Zmodels.org_namer   r[   ZBaseViewr   r   r   r   r   <module>   s   