
    Efw/                         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	 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ej*                  j,                  e      Zy)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                   <   e Zd ZdZdej
                   dZd e        dZe	j                  j                  d        Ze	j                  j                  d        Zed        Ze	j                  j                  d	        Ze	j                  j                  d
        Zd Zy)
SignupViewz/signupu,   Обратитесь в <a href="https://wwwu9   /support/">техническую поддержку</a>.u   Перейти в <a href="u   ">Ваш профиль</a>?c                 F    t         j                  ry| j                  d      S )N{   Регистрация без приглашения не поддерживается в коробочной версииzsignup.html)configIS_BOX_VERSIONrender)selfs    ./modules/auth/views/signup.pygetzSignupView.get$   s        Q{{=))    c                    t         j                  ryt        t        j                  d         }t        j                  d   }t        j                  d   }t        j                  d   }t
        j                  j                  |      }|rt        dd| d	       t
        j                  j                  |||      }|st        d
       t        d       ||_        |j                          |j                  j                          y)Nr   loginhashsaltphoner     u   Пользователь u'    уже зарегистрирован.znot authSigned up successfully)r   r   r	   requestvaluesmodelsCmfAuthr   r   new_from_login_hash_saltr   r   savedpcommit)r   r   _hashr   r   auths         r   postzSignupView.post*   s       Q'w(?@v&~~f%w'~~!!!.#25'9`ab ~~66ueTJ*%#J
		'r   c                 |    t         j                  | | ||      }|j                         }|j                          ||fS )N)r   emailorg_namer   )r"   r#   reset_passwordr%   )r   r-   r   r)   passwords        r   _create_authzSignupView._create_authC   s:    ~~EQV~W&&(		X~r   c                    t         j                  ryt        j                  s| j	                  dd      S t        j                  j
                  j                  }t        j                  j                  |      }|s| j	                  dd      S |j                  s|j                  r| j	                  dd| j                  z         S |j                  j                  }ddd	}|sd
|d<   |j                         D ]8  \  }}t        j                   j                  |      r&| j	                  d|      c S  t        j                   d   j#                  dd      j#                  dd      }t        j                   d   j%                         }t        j                   j                  d      }	|	st        j                   j                  d      }	t        j&                  j                  dd      }
|sat        j                   j                  d      rBt        j                   j                  d      }t)        |      }	 ||_        |j+                          t/        |      \  }}|s| j	                  d|      S t1                	 t3        j4                  |||||	|
      \  }}}| j=                  t?        ddt         j@                  z   dz   i      |      S # t,        $ r | j	                  ddd      cY S w xY w# t6        $ r}t8        j;                  d       |d}~ww xY w)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   r2   " 'r-   	user_namelead_contact_namelanding_project
evaprojectu@   Введите корректный номер телефона.)problem_fielduD   Не удалось выдать виртуальную машинуNhostnameaccountz/auth/signin?action=proceed)!r   r   gr)   _errorr,   valuer"   r#   r   scopegroups__support__r   itemsr    jsonreplacestripcookiesr
   r%   CmfValidationErrorr   r   r   cloud_assign	Exceptionlogging	exception_okjsonifyAUTH_SESSION_COOKIE_DOMAIN)r   r   r)   r   error_messageskeymessager2   r-   r6   r8   reserr_textr;   outerrs                   r   cloud_assign_continuez SignupView.cloud_assign_continueJ   s       Qvv;;s$|}}""~~!!!.;;s$rss:: ;;s$PSWScSc$cdd

  Wh
  'zN7#*002 	1LC<<##C({{300	1 ,,y)11#r:BB3K<<
+113LL$$[1	(()<=I!//--.?N))'2LL$$W-E#E*EC"
		 *(3X;;sH--	!+!8!87ESXZcet!uHc3 xxZV-N-N!NQn!nop 	# & C{{3(j  {B{  C  CC  	de
 I	s*   0K 4K& K#"K#&	L/LLc                    t        t        j                  d         }t        j                  j                  dd      }t	        |      dv rd}t        j                  d   }t
        j                  j                  |      }t        j                  |d   d         }||dt        |      d	z   |dt        |      d	z   z   k(  r!t        j                  r|dt        |      d	z   }	 t
        j                  j                  |g d
      }|r|j                  j                  rdt        dj!                  ||             |j#                         }|j%                  d      }| j'                  ||j(                  j*                         nt        dj!                  ||             t-        d       d| }nt        dj!                  ||             t
        j                  ||      }|j#                         }|rd|_        |j%                  d      }| j'                  ||j(                  j*                         dt        j0                   }	| j3                  d|      g}
t5        |
|	|j(                  j*                         t?                y# t6        $ r=}t8        j;                  d       | j=                  ddt	        |             cY d}~S d}~ww xY w)u   
        Приглашение по email. В эту функцию долбится CRM с уже подготовленным JWT-токеном.
        :return:
        r,   invite_must_change_passwordN)FalsefalseNone0Finvite_tokenpayloadissr   )	pass_hashr,   password_expires_must_change)r   fieldsu   INVITE. Отправляем существующему пользователю {} письмо с инвайтом в crm {} и высылаем ему письмо с паролемinvite)endpointu~   INVITE. Отправляем существующему пользователю {} письмо с инвайтом в crm {}Tabsolutezauth/signin?next_url=https://uz   INVITE. Создаем пользователя {} для crm {} и высылаем ему письмо с паролем)r   r,      u&   Ссылка для доступа к zinvite_by_email.html)
invite_urlu8   Не удалось зарегистрироватьсяi  u:   Не удалось зарегистрироваться: r   ) r	   r    r!   r   strr"   r#   check_tokenshlexquotelenr   r   ra   is_nullprintformatr.   reset_pass_linksend_passwordr,   r?   auth_base_hrefrb   HOSTNAME_FQDNrender_with_paramsr   rJ   rK   rL   r>   r   )r   r,   rY   r^   jwtr`   r)   r/   urlsubjectmsg_contentses               r   invite_by_emailzSignupView.invite_by_email   s    (w(?@&-nn&8&89VX\&]#*+/NN*/'~~n5nn((6kk#i./0 #ls3x{#c,3s8Q;&777F<Q<Qls3x{#C!	k>>%%E:p%qD >>))TTZTZ[`beTfh  $224H...AC&&x1A1AB  [  b  b  ch  jm  n  o ,T:;;XY\X]^C  S  Z  Z  [`  be  f  g~~E~?..0.89D5**H*=""8TZZ-=-=>>v?S?S>TUG 334JWZ3[\L|Wdjj.>.>? 	'	  	kXY;;s&`adefag`h$ijj	ks   !FJ 	K	2K>K	K	c                     t        d       d}| j                  d||      }dt        j                   }t	        |||       y)u   
        Некрасивый дубль models.CmfAuth.send_password(), потому что неясно как делать вызов View -> Model -> View
        Trf   zauth/signin?action=proceedzsend_password.html)r/   proceed_linku&   Пароль для доступа к N)rt   rv   r   ru   r   )r   r/   r,   r~   rz   ry   s         r   rs   zSignupView.send_password   sO     )$788RS../Cheq.r:6;O;O:PQ<%0r   N)__name__
__module____qualname____url__r   rO   rB   rt   __profile__cmfviewsactionr   r*   staticmethodr0   rW   r|   rs    r   r   r   r      s    G@AbAb@c dC CK/0@/AA]^KYY* *
 	YY( (0   	YYA AF 	YY6( 6(p1r   r   )__doc__rl   idnaflaskr   	cmf.viewsr   cmf.data_providers.baser   cmf.includemodules.auth.views.responser   models.emailr   r	   models.phoner
   models.supervisorr   models.org_namer   r   BaseViewr   r   r   r   <module>r      sG        1  5 > * * /
p1##] p1r   