
    1*)if3                         d dl Z d dlZd dlZd dlZ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	ej        j        e          ZdS )
    N)abort)rollback_all_ds)*)normalize_email_address)ResponseMixin)copyc                   $   e Zd ZdZdZd Zd Zej        j	        d             Z
d Zej        j	        d             Zej        j	        d             Zej        j	        d	             Zej        j	        d
             Zej        j	        d             ZdS )
SigninViewz/signin   c                     t           j                            d          }|sAt           j        r5t	          j        t           j                  }|r|                    d          }|S )Naccess_token)requestcookiesgetdataujsonloads)selfr   json_ress      ./modules/auth/views/signin.py_get_access_tokenzSigninView._get_access_token   sX    **>:: 	< 	<{7<00H <'||N;;    c                 p    |                                  }|rt          j                            |          S d S )N)r   modelsCmfAuthrsa_verify_unpack_jwt)r   r   s     r   _jwt_from_requestzSigninView._jwt_from_request   s>    --// 	F>77EEE	F 	Fr   c           	         dd l }ddlm} t          j                            dd          }t          j                            |          }t          
                    |          sd}|                                 }|r	 |d         d         }|d         d         }t          |d         d                   }d	}nE# t          t          t          t           f$ r% t"                              d
           d }d }d}d}Y nw xY wd }	|sd}|r&t&          j                            |dg          }	|	sd}|r|	j        |k    rd}|rt,          j                                        t,          j                            |          z
  j        }
|
dk     r7dt          j        v r(t5          d| d| dt          j        d                     nLd|
cxk    rt6          j        k     r5n n2t;          t=          |                    }|                     ||	          S tA                       d }	t          j!                            d          }|r"t&          j"        #                    |          \  }	} |dg          }|	r4|s2t;          t=          |                    }|                     ||	          S tI          |          D ]}|dk    r|%                    |           tL          j'         }g }t&          j(        )                    g dddg          D ]>}|*                    tW          |j,        |-                    |                               ?t]          |          }| /                    d          S )Nr   )get_flashed_messagesnext_url/payloadloginscopeexpTzjwt value errorFr#   fieldsz !!! Maybe Cycle Redirect: login=z, scope=z
 next_url=session_token
auth_error)category_filteru)   Требуется авторизация)disabledz==Fr   zplugin.*)filterr'   )name	login_urlzsignin.html)0htmlflaskr   r   valuesr   urllibparseunquotecmfutilis_safe_next_urlr   int
ValueError	TypeErrorAttributeErrorKeyErrorlogging	exceptionr   r   r$   datetimenowfromtimestampdaysprintr
   prolong_daysmake_responseredirect_okr   r   
CmfSession
from_tokenr   removeconfigIS_BOX_VERSIONCmfAuthOpenIdPluginlistappenddictr-   get_redirect_urllenrender)r   r/   r   r    jwtr#   r$   r%   jwt_okauthexpired_daysresponser(   _sessionmessagesmsgshow_register_buttonsso_buttonspluginsso_buttons_counts                       r   r   zSigninView.get#   s   ......>%%j#66<''11''11 	H$$&&  +	
Iw/Iw/#i./00	>8D   !!"3444 D   #~))wi)HH #"F  #:&&"F  
4 ( 1 5 5 7 7(:K:Y:YZ]:^:^ ^d!##!W^33c&+c c5:c cFMnU_F`c cd d d ,@@@@)@@@@@@,Xh-?-?@@H88Hd333 ++O<< 	I#.99-HHND(''GGG 	, 	,$Xh%7%788H88Hd+++>> 	% 	%CAAA$$$#)#88055=V=V=V`ceo_p5qq 	d 	dFt@W@WX`@a@abbbcccc,,{{=)))s   >9B8 8?C:9C:c           
      <   t           j        j        sd S d|                                 }t	          t
          j                            |          pd          }|dk    rd S t          j	                            dd           }d|                                 }t
          j                            |          }d
                    t          j        t          j        d                    }t
          j                            ||           |s9t           j                            d	d
d |dddd||           t'          d           |                                }|r||k    r;t           j                            d	d
d |dddd||           t'          d           d S d S )Nzauth:user_last_login_fail:r      captchaauth:user_login_captcha:    )kauth_failedr   zRequire captcha)r#   reasonfailoperatecmf_model_nameparent
audit_dataresult_statussecurity_levelparent_nameparent_codei  zBad captcha)gglobal_settingsauth_check_captchalowerr7   APPREDIS_DBr   r   r1   joinrandomchoicesstringdigitssetr   CmfAuditaudit_eventr   decode)r   r#   db_keylast_login_failra   
db_captchanew_captchas          r   _auth_check_captchazSigninView._auth_check_captchap   s     3 	F5e55;;==cl..v66;!<<aF.$$Y553E3399;;\%%f--
ggfnV]a@@@AA--- 	O''i/3%[l@m@m6<Q49u ( N N N #JJJ&&((
 	'Z//O''i/3%[h@i@i6<Q49u ( N N N #JJJJJ 0/r   c                    t           j        j        sd S dd l}|j                            t          j        d                   }d|v rt          |          }t          j
                            d|                                           sd S ddlm} ddlm} t          j
                            d|                                                                           } |            }|                    |          } ||d          S )	Nr   r#   @rb   )Response)ImageCaptchaz	image/png)mimetype)rr   rs   rt   r2   r3   r4   r   r1   r   rv   rw   existsru   r0   r   captcha.imager   r   r   generate)r   r2   r#   r   r   ra   imager   s           r   captcha_imgzSigninView.captcha_img   s    3 	F$$W^G%<==%<<+E22E|""#Ee#E#E#K#K#M#MNN 	F""""""......,""#Ee#E#E#K#K#M#MNNUUWW~~g&&x{3333r   c                    dd l }ddlm} |j                            t
          j        d                   }d|v rt          |          }t
          j        d         }|                     |           |	                                5  t          j                            ||          }t          j        j                                         |s3i }t          j        rt          j        d         |d<   t#          d|           |                                }|rt
          j                            d	d           }t
          j                            d
d           }	|r|	s8t          j                            ddd d|idd||           t#          d           |                    ||	           |j        rd |_        t          j                            ddd d|idd||           |                                 t
          j                            dd          }
|j                            |
          }
|                    |
          sd}
t5          t7          d|
i                    }|                     ||          cd d d            S # 1 swxY w Y   d S )Nr   )r5   r#   r   challenge_respmessage  new_password_hashnew_password_saltpassword_expiredr   password_expires_must_changer`   ri   i  password_changed   r    r!   redirect_url)r2   cmf.utilr5   r3   r4   r   r1   r   r   disable_aclr   r   get_by_challenge_respdpcommitrr   alertr   need_change_passwordr   r~   r   set_pass_hashr   saver6   rD   jsonifyrF   )r   r2   r5   r#   r   rU   abort_kwargsr   hashsaltr    rW   s               r   postzSigninView.post   s   $$$$$$$$W^G%<==%<<+E22E (89  '''  "" )	, )	,>77~NNDN$$&&& )!7 :./gbkL+c<(((#'#<#<#>#> # ~))*=tDD~))*=tDD 4 O//8J[d7;RWHX>\?@eaf 0 h h h
 #JJJ""4... 4 =8<D5++4FW`37WeDT:L;<%]b , d d d
 		~))*c::H|++H55H++H55 $Wnh-G%H%HIIH88Hd++S)	, )	, )	, )	, )	, )	, )	, )	, )	, )	, )	, )	, )	, )	, )	, )	, )	, )	,s   G0J  JJc                     dS )Nrc    )r   s    r   get_server_challengezSigninView.get_server_challenge   s	     rr   c                 T   t           j        s)t                              d           t	          d          S t           j        j        j        }t          j        	                    |ddg          }|st	          d          S |j
        j        r>t                              d           |                     t	          d          |	          S t          d
 |j
        j                                        D                       }|s>t                              d           |                     t	          d          |	          S t          |          dk    r\t                              d           t          |          D ]2}t                               d|          r|                    |           3t          |          dk    rt                              d           |                                }t	          d|z   t(          j        z             }t(          j        r;t(          j                            |          rt	          dt(          j        z             }|                     ||	          S t                              d           |                     t	          d          |	          S )uu    Определить по куке куда отправить пользователя автоматически. u7   1. Нет куки - форма авторизации.z/auth/signinr$   r#   r&   z"/auth/signout?next_url=auth/signinuO   2.1. У пользователя нет scope - форма создания VM.z/auth/assign)rU   c                 D    g | ]}|                     d           d         S ):r   )split).0r$   s     r   
<listcomp>z&SigninView.proceed.<locals>.<listcomp>   s)    PPPeekk#&&q)PPPr   uO   2.2. У пользователя нет scope - форма создания VM.r   ur   3.2. У пользователя два scope, проверим, не системный ли один из нихz^acrm[0-9]{5,6}$r`   uo   3. У пользователя один единственный scope - на эту CRM и отправить.zhttps://uc   4. У пользователя несколько scope - отправить на список CRM.r!   )rr   rU   r<   inforE   emailvaluer   r   r   r$   is_nullrF   r}   r   rQ   rematchdiscardpoprJ   AUTH_SESSION_COOKIE_DOMAINrK   
startswith)r   r#   rU   scopesr$   rW   s         r   proceedzSigninView.proceed   s`    v 	-LLRSSSO,,, "~!!w6H!II 	CABBB: 	BLLjkkk88H_55D8AAAPPtz7G7M7M7O7OPPPQQ 	BLLjkkk88H_55D8AAAv;;!LL  N  O  O  OV * *88/77 *NN5)))v;;!LL  K  L  L  LJJLLE
U 2V5V VWWH$ T)J)U)UV[)\)\ T#J1R$RSS88H48000z{{{xxTx222r   c                    t          t          j        d                   }t          j        d         }t                                          5  t
          j                            ||          }t
          j        j        	                                 |s3i }t          j        rt          j        d         |d<   t          d|           ddd           n# 1 swxY w Y   |                                S )u>   
            Ручка для авторизации
        r#   passwordr   r   r   N)r   r   r1   r5   r   r   r   r   r   r   rr   r   r   rsa_sign_pack_jwt)r   r#   r   rU   r   s        r   signin_with_login_passwordz%SigninView.signin_with_login_password  s   
 (w(?@@>*-   "" 	) 	)>77xHHDN$$&&& )!7 :./gbkL+c<(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) %%'''s   A9CCCN)__name__
__module____qualname____url__rC   r   r   cmfviewsactionr   r   r   r   r   r   r   r   r   r   r
   r
      s       GL  F F F
 	YJ* J* J*X  B 	Y4 4 4( 	Y3, 3, 3,j 	Y   	Y#3 #3 #3J 	Y( ( ( ( (r   r
   )r>   urllib.parser2   r   ry   r{   timer0   r   cmf.data_providers.baser   cmf.includemodules.auth.models.emailr   modules.auth.views.responser   r   r   r   BaseViewr
   r   r   r   <module>r      s                   3 3 3 3 3 3     = = = = = = 5 5 5 5 5 5      I( I( I( I( I(#] I( I( I( I( I(r   