U
    /qc8                     @   sn   d dl Z d dlZd dlm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 G dd	 d	ejje
ZdS )
    N)abort)rollback_all_ds)*)normalize_email_address)ResponseMixin)urlparsec                   @   st   e Zd ZdZdZdd Zdd Zejj	dd Z
ejj	d	d
 Zejj	dd Zejj	dd Zejj	dd ZdS )
SigninViewz/signin   c                 C   s4   t jd}|s0t jr0tt j}|r0|d}|S )Naccess_token)requestZcookiesgetdataujsonloads)selfr
   Zjson_res r   ./modules/auth/views/signin.py_get_access_token   s    

zSigninView._get_access_tokenc                 C   s   |   }|rtj|S d S )N)r   modelsCmfAuthZrsa_verify_unpack_jwt)r   r
   r   r   r   _jwt_from_request   s    zSigninView._jwt_from_requestc           
      C   sl  |   }|rZz0|d d }|d d }t|d d }d}W n6 ttttfk
rt   td d }d }d}d}Y nX d }|sd}|rtj	j
|dgd	}|sd}|r|j|krd}|rTtj tj| j}|dk rd
tjkrTtd| d| dtjd
   nLd|  kr"tjk rTn n.ttd
tjkr@tjd
 nd}| ||S t  tj }	| dS )NZpayloadloginscopeexpTzjwt value errorr   Fr   ZfieldsZnext_urlz !!! Maybe Cycle Redirect: login=z, scope=z
 next_url=/zsignin.html)r   int
ValueError	TypeErrorAttributeErrorKeyErrorloggingZ	exceptionr   r   r   r   datetimeZnowZfromtimestampZdaysr   valuesprintr   prolong_daysmake_responseredirect_okr   configIS_BOX_VERSIONZrender)
r   Zjwtr   r   r   Zjwt_okauthZexpired_daysresponseZshow_register_buttonr   r   r   r      sL    



zSigninView.getc                 C   sF   t tjd }tjd }tj||}|s2td td}| ||S )Nr   challenge_respi  zSigned in successfully)	r   r   r#   r   r   Zget_by_challenge_respr   r&   r(   )r   r   r-   r+   r,   r   r   r   postU   s    
zSigninView.postc                 C   sV   t tjd }tjj|dgd}dd |jj D }d|krRt	|dkrR|
 S dS )	Nr   z***r   c                 S   s   g | ]\}}|r|qS r   r   ).0keyvalr   r   r   
<listcomp>d   s      z3SigninView.get_server_challenge.<locals>.<listcomp>Z
allow_base    )r   r   r#   r   r   r   Zauth_optionsvalueitemslenZgen_server_challenge)r   r   r+   Zallowr   r   r   get_server_challenge`   s    zSigninView.get_server_challengec                 C   sT  t jstd tdS t jjj}tjj	|d}|s<tdS |j
jr`td | jtd|dS tdd	 |j
j D }|std
 | jtd|dS t|dkrtd t|D ]}td|r|| qt|dkr8td | }td| tj }tjr*tj|r*tdtj }| j||dS td | jtd|dS )uu    Определить по куке куда отправить пользователя автоматически. u7   1. Нет куки - форма авторизации.z/auth/signin)r   z"/auth/signout?next_url=auth/signinuO   2.1. У пользователя нет scope - форма создания VM.z/auth/assign)r+   c                 S   s   g | ]}| d d qS ):r   )split)r/   r   r   r   r   r2   {   s     z&SigninView.proceed.<locals>.<listcomp>uO   2.2. У пользователя нет scope - форма создания VM.   ur   3.2. У пользователя два scope, проверим, не системный ли один из нихz^acrm[0-9]{5,6}$r3   uo   3. У пользователя один единственный scope - на эту CRM и отправить.zhttps://uc   4. У пользователя несколько scope - отправить на список CRM.r   )gr+   r!   infor'   Zemailr5   r   r   r   r   Zis_nullr(   setr:   r7   rematchdiscardpopr)   ZAUTH_SESSION_COOKIE_DOMAINr*   
startswith)r   r   r+   Zscopesr   r,   r   r   r   proceedi   s8    






zSigninView.proceedc                 C   s:   t tjd }tjd }tj||}|s2td | S )u>   
            Ручка для авторизации
        r   passwordi  )r   r   r#   r   r   Zfrom_login_passwordr   Zrsa_sign_pack_jwt)r   r   rE   r+   r   r   r   signin_with_login_password   s    
z%SigninView.signin_with_login_passwordN)__name__
__module____qualname__Z__url__r%   r   r   cmfviewsactionr   r.   r8   rD   rF   r   r   r   r   r      s   
5



%r   )r"   r   Zflaskr   Zcmf.data_providers.baser   Zcmf.includeZmodules.auth.models.emailr   Zmodules.auth.views.responser   Zurllib.parser   rJ   rK   ZBaseViewr   r   r   r   r   <module>   s   