
    SIgw/                         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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                      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dS )
SignupViewz/signupu,   Обратитесь в <a href="https://wwwu9   /support/">техническую поддержку</a>.u   Перейти в <a href="u   ">Ваш профиль</a>?c                 H    t           j        rdS |                     d          S )N{   Регистрация без приглашения не поддерживается в коробочной версииzsignup.html)configIS_BOX_VERSIONrender)selfs    ./modules/auth/views/signup.pygetzSignupView.get$   s,      	Q Q  Q{{=)))    c                 "   t           j        rdS t          t          j        d                   }t          j        d         }t          j        d         }t          j        d         }t
          j                            |          }|rt          dd| d	           t
          j        	                    |||          }|st          d
           t          d           ||_        |                                 |j                                         dS )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 Q  Q'w(?@@v&~f%w'~!!!.. 	c#a5aaabbb ~66ueTJJ 	*%%%#JJJ
		''r   c                     t                               | | ||          }|                                }|                                 ||fS )N)r   emailorg_namer   )r"   r#   reset_passwordr%   )r   r-   r   r)   passwords        r   _create_authzSignupView._create_authC   sD    ~~EQV~WW&&((		X~r   c                 @   t           j        rdS t          j        s|                     dd          S t          j        j        j        }t          j        	                    |          }|s|                     dd          S |j
        s|j        r|                     dd| j        z             S |j        j        }ddd	}|sd
|d<   |                                D ]<\  }}t          j        	                    |          s|                     d|          c S =t          j        d                             dd                              dd          }t          j        d                                         }t          j        	                    d          }	|	st          j        	                    d          }	t          j        	                    dd          }
|st          j        	                    d          rst          j        	                    d          }t)          |          }	 ||_        |                                 n(# t,          $ r |                     ddd          cY S w xY wt/          |          \  }}|s|                     d|          S t1                       	 t3          j        |||||	|
          \  }}}n.# t6          $ r!}t8                              d           |d}~ww xY w|                     t?          ddt           j         z   dz   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   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   sT      	Q Q  Qv 	~;;s$|}}}"~!!!.. 	t;;s$rsss: 	e 	e ;;s$PSWSc$cddd
 Wh
 
  	z 'zN7#*0022 	1 	1LC<##C(( 1{{3000001 ,y)11#r::BB3KK<
+1133L$$[11	 	>(()<==I!/--.?NN 	C))'22 	CL$$W--E#E**EC"
		% C C C{{3(j  {B{  C  C  C  C  CC)(33X 	.;;sH---	!+!87ESXZcet!u!uHc33 	 	 	deee
 I	 xxZV-N!NQn!nopp  	s*   "H> >"I#"I#J= =
K(K##K(c                 0   t          t          j        d                   }t          j                            dd          }t	          |          dv rd}t          j        d         }t
          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                            |g d
          }|r|j        j        rnt          d                    ||                     |                                }|                    d          }|                     ||j        j                   nt          d                    ||                     t-          d           d| }nt          d                    ||                     t
                              ||          }|                                }|rd|_        |                    d          }|                     ||j        j                   dt          j         }	|                     d|          g}
t5          |
|	|j        j                   nW# t6          $ rJ}t8                              d           |                     ddt	          |                     cY d}~S d}~ww xY wt?                       dS )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   sc    (w(?@@&-n&8&89VX\&]&]#*++/NNN*/'~n5n((66k#i./00 #ls3xx{l#c,3s88Q;,&7777F<Q7ls3xx{l#C!	k>%%E:p:p:p%qqD ? >) _TTZTZ[`beTfTfh h h  $2244H...AAC&&x1ABBBB  [  b  b  ch  jm  n  n  o  o  o ,T:::^^Y\^^CC  S  Z  Z  [`  be  f  f  g  g  g~~E~??..00. :89D5**H*==""8TZ-=>>>Uv?SUUG 334JWZ3[[\L|Wdj.>???? 	k 	k 	kXYYY;;s$iadefagag$i$ijjjjjjjj	k 	''s   F,J1 1
L;?L :L Lc                     t          d           d}|                     d||          }dt          j         }t	          |||           dS )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   sa     )$777SSS../Cheq.rrQ6;OQQ<%0000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CAb C C CK^0@0@^^^KY* * *
 	Y( ( (0   \ 	YA A AF 	Y6( 6( 6(p1 1 1 1 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      s                1 1 1 1 1 1     5 5 5 5 5 5 > > > > > > > > * * * * * * * * * * * * / / / / / /
p1 p1 p1 p1 p1#] p1 p1 p1 p1 p1r   