U
    Rdk!                     @   s   d 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 dd	lmZ dd
lmZ G dd dejje
ZdddZdS )ug    Документация по выдаче VM: https://bcrm.carbonsoft.ru/project/Document/DOC-000884     N)CmfValidationError)commit_all_ds)*)ResponseMixin   )normalize_phone)
Supervisor)validate_org_namec                   @   sz   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edddZe	j
jdd ZdS )CRMViewz/crmu,   Обратитесь в <a href="https://wwwu9   /support/">техническую поддержку</a>.u!   Перейдите по <a href="uf   /auth/signin?action=proceed">ссылке</a> чтобы повторить попытку позже.c                 C   s   dS )NzNo default action specified )selfr   r   ./modules/auth/views/crm.pypost   s    zCRMView.postc                 C   s  t d tjjjr$| dd| j S tj	d}|sF| dd| j S t
|\}}|sd| d| S zttjjj| W n*   td | dd| j  Y S X t  tjj	tjjd	}|s| dd
| j S |jjr| dd| j S ||_|  t ddd | d|S )u,  
        По куке получаем юзера и пытаемся застолбить за ним виртуалку. Email берём строго из куки!
        :return: служебный hostname виртуалки + кука с логином и scope с этим hostname
        assign  u5   Не удалось получить CRM. Код #1. org_nameu:   Не удалось получить ORG_NAME. Код #2. uP   Ошибка сервера, не удалось получить CRM. Код #3  uR   Ошибка сервера, не удалось получить CRM. Код #3. loginu(   Ошибка сервера. Код #4. u(   Ошибка сервера. Код #5. Tdoneu?   Успешно выдана виртуальная машина)pretty_log_linegauthr   is_null_error__support__requestvaluesgetr	   r   r   valuelogging	exception__proceed__r   modelsCmfAuthscoper   Zsave_ok)r   r   resZerr_textr   r   r   r   r      s0    

zCRMView.assignc                 C   sz   t d tjjjr&| dd| j S zt }t	
| W n"   td | dd Y S X t ddd | d	tjS )
u  
        Обновляем демо-данные внутри виртуальной машины пользователя в фоне,
        пока он заполняет форму с дополнительными данными для следующего этапа.
        :return: те же самые билеты авторизации, что и шагом выше.
        preparer   un   Ошибка: недостаточно прав для обновления демо-данных. Код #6. uQ   Произошла ошибка при подготовке демо-данныхr   ur   WARNING: Ошибка сервера, не удалось обновить демо-данные внутри CRM.Tr   uU   Демо-данные в виртуальной машине подготовлены)r   r   r   r&   r   r   r#   r
   _get_org_name_from_scoper   r)   r!   r"   r'   )r   r   r   r   r   r)   >   s    

zCRMView.prepareNc                 C   s   | d krt j} tdd | jj D }t|dksDtd| j t|dks`td| j | }|d | jj kstd|S )	Nc                 S   s   g | ]}| d d qS ):r   )split).0r&   r   r   r   
<listcomp>W   s     z4CRMView._get_org_name_from_scope.<locals>.<listcomp>r   ui   Пользователь не имеет прав ни на одну виртуальную машину    u{   Пользователь владеет более 1 CRM, не ясно какую именно переименовать z:AdminsuY   У пользователя нет административных прав на EvaTeam)	r   r   setr&   r    r,   lenAssertionErrorpop)r   scopesr   r   r   r   r*   S   s    z CRMView._get_org_name_from_scopec           
      C   s  t jd}|s.d}td|  | dS |  dd }t	j
sRtdS tjjt	j
jjd}|srtd	S |jjr| jtd
|dS | }|s| jtd
|dS ||krd| d}td| d| d| dt	j
jj  | dS t jddkrzt|\}}}W n0 tk
rF } zd}t|}W 5 d}~X Y nX |dkrd}	td|	 d| d| dt	j
jj d| d|  | dS | jtd|dS | dS )uH  
        Сюда попадает клиент, когда у него остановлена vm по idle.
        Отображаем ему список vm, по клику запускаем restore и редиректим.
        TODO: в шаблоне поправить оформление и верстку
        	acrm_nameuG   Ошибка запуска системы. Не указано имя.u    Ошибка restore_idle_acrm: zcrm_restore_idle_acrm.html.r   z/auth/signinr   z#/auth/signout?next_url=/auth/signinz/auth/assign)r   u<   Нет доступа к указанной системе (u+   ), либо её не существует.z acrm_name=z	; scopes=z; email=run1r/   Nu   Ошибка запуска.z; res=z; out=/)r   r   r   r!   infoZrenderlowerstripr,   r   r   Zredirectr$   r%   Zemailr    r&   r   r'   Zprepare_scopeZformr   restore_idle_acrm	Exceptionstrr"   )
r   r5   errorr   r4   _outr(   eZerror_restorer   r   r   r=   _   s@    
(

4
zCRMView.restore_idle_acrm)N)__name__
__module____qualname__Z__url__ZconfigZAUTH_SESSION_COOKIE_DOMAINr   ZAUTH_SERVER_URLr#   cmfviewsactionr   r   r)   staticmethodr*   r=   r   r   r   r   r
      s   

#
r
   Fc                 C   s@   d}t d|  d|  d|rdnd dtjj dd|  	 d S )N   = ZDONEZBEGIN)printr   r   r   )Zstager   lengthr   r   r   r      s    r   )F)__doc__ZidnaZcmf.base_errorr   Z	cmf.viewsrG   Zcmf.data_providers.baser   Zcmf.includeZmodules.auth.views.responser   Zmodels.phoner   Zmodels.supervisorr   Zmodels.org_namer	   rH   ZBaseViewr
   r   r   r   r   r   <module>   s    