
    &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 d dlmZ d dlmZ d dlmZ  G d d	ej$                  j&                  e      Zy)
    N)abort)rollback_all_ds)*)normalize_email_address)ResponseMixin)copyc                   v   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y)
SigninViewz/signin   c                     t         j                  j                  d      }|sFt         j                  r6t	        j
                  t         j                        }|r|j                  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   sH    **>:{{7<<0H'||N;    c                 f    | j                         }|rt        j                  j                  |      S y )N)r   modelsCmfAuthrsa_verify_unpack_jwt)r   r   s     r   _jwt_from_requestzSigninView._jwt_from_request   s-    --/>>77EE r   c           	      .   dd l }ddlm} t        j                  j                  dd      }t        j                  j                  |      }t        j                  |      sd}| j                         }|r8	 |d   d   }|d   d   }t        |d   d         }d	}d }	|sd}|r&t&        j(                  j                  |dg      }	|	sd}|r|	j*                  |k7  rd}|rt,        j,                  j/                         t,        j,                  j1                  |      z
  j2                  }
|
dk  r8dt        j                  v rht5        d| d| dt        j                  d           nBd|
cxk  rt6        j8                  k  r)n n&t;        t=        |            }| j?                  ||	      S tA                d }	t        jB                  j                  d      }|r"t&        jD                  jG                  |      \  }	} |dg      }|	r(|s&t;        t=        |            }| j?                  ||	      S tI        |      D ]  }|dk(  s	|jK                  |        tL        jN                   }g }t&        jP                  jS                  g dddg      D ]7  }|jU                  tW        |jX                  |j[                  |                   9 t]        |      }| j_                  d      S # t        t        t        t         f$ r! t"        j%                  d
       d }d }d}d}Y {w xY w)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<<''1''1H$$& 
Iw/Iw/#i./0 D ~~))wi)H"F ::&"F  ( 1 1 5 5 7(:K:K:Y:YZ]:^ ^dd!#!W^^3&&+WHUG:gnnU_F`Eacd ,@)@)@@,Xh-?@H88Hd33 ++O<#..99-HND('G$Xh%78H88Hd++> 	%CAA$	% $*#8#880055=V`ceo_p5q 	dFt@W@WX`@abc	d,{{=))u 	>8D !!"34s   5#K 6LLc           
         t         j                  j                  sy d| j                         }t	        t
        j                  j                  |      xs d      }|dk7  ry t        j                  j                  dd       }d| j                         }t
        j                  j                  |      }dj                  t        j                  t        j                  d            }t
        j                  j                  ||       |s5t         j"                  j%                  d	d
d |dddd||       t'        d       |j)                         }|r||k7  r6t         j"                  j%                  d	d
d |dddd||       t'        d       y y )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   sX      33-eW5;;=cll..v6;!<a..$$Y5+E7399;\\%%f-
ggfnnV]]a@A-OO''i/3%[l@m6<Q49u ( N #J&&(
'Z/OO''i/3%[h@i6<Q49u ( N #J 0r   c                    t         j                  j                  sy dd l}|j                  j                  t        j                  d         }d|v rt        |      }t        j                  j                  d| j                               sy ddlm} ddlm} t        j                  j#                  d| j                               j%                         } |       }|j'                  |      } ||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3$$W^^G%<=%<+E2E||""%=eW#E#K#K#MN".,,""%=eW#E#K#K#MNUUW~~g&{33r   c                    dd l }ddlm} |j                  j	                  t
        j                  d         }d|v rt        |      }t
        j                  d   }| j                  |       |j                         5  t        j                  j                  ||      }t        j                  j                  j                          |s4i }t        j                   rt        j                   d   |d<   t#        d|       |j%                         }|rt
        j                  j'                  d	d       }t
        j                  j'                  d
d       }	|r|	s4t        j(                  j+                  ddd d|idd||       t#        d       |j-                  ||	       |j.                  rd |_        t        j(                  j+                  ddd d|idd||       |j1                          t
        j                  j'                  dd      }
|j                  j	                  |
      }
|j3                  |
      sd}
t5        t7        d|
i            }| j9                  ||      cd d d        S # 1 sw Y   y xY w)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2E (89  '  " )	,>>77~NDNN$$&!77./ggbkL+c<(#'#<#<#> #~~))*=tD~~))*=tD4OO//8J[d7;RWHX>\?@eaf 0 h
 #J""4. 448<D5++4FW`37WeDT:L;<%]b , d
 		~~))*c:H||++H5H++H5$Wnh-G%HIH88Hd+S)	, )	, )	,s   :GI  I)c                      y)Nrc    )r   s    r   get_server_challengezSigninView.get_server_challenge   s     r   c                    t         j                  s t        j                  d       t	        d      S t         j                  j
                  j                  }t        j                  j                  |ddg      }|st	        d      S |j                  j                  r1t        j                  d       | j                  t	        d      |	      S t        |j                  j                  j                         D cg c]  }|j                  d
      d    c}      }|s1t        j                  d       | j                  t	        d      |	      S t        |      dk(  rMt        j                  d       t        |      D ]*  }t         j#                  d|      s|j%                  |       , t        |      dk(  rt        j                  d       |j'                         }t	        d|z   t(        j*                  z         }t(        j,                  r;t(        j*                  j/                  |      rt	        dt(        j*                  z         }| j                  ||	      S t        j                  d       | j                  t	        d      |	      S c c}w )uu    Определить по куке куда отправить пользователя автоматически. u7   1. Нет куки - форма авторизации.z/auth/signinr$   r#   r&   z"/auth/signout?next_url=auth/signinuO   2.1. У пользователя нет scope - форма создания VM.z/auth/assign)rU   :r   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}   splitrQ   rematchdiscardpoprJ   AUTH_SESSION_COOKIE_DOMAINrK   
startswith)r   r#   rU   r$   scopesrW   s         r   proceedzSigninView.proceed   s    vvLLRSl,, ""~~!!w6H!I@BB::LLjk88H|5D8AAtzz7G7G7M7M7OPeekk#&q)PQLLjk88H|5D8AAv;!LL  N  OV *88/7NN5)* v;!LL  K  LJJLE
U 2V5V5V VWH$$)J)J)U)UV[)\#J1R1R$RS88H4800z{xx1Tx22% Qs   7Jc                    t        t        j                  d         }t        j                  d   }t        j	                         5  t
        j                  j                  ||      }t
        j                  j                  j                          |s4i }t        j                  rt        j                  d   |d<   t        d|       ddd       |j                         S # 1 sw Y   j                         S xY w)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HDNN$$&!77./ggbkL+c<(	) %%''	) %%''s   A?CC3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
 	YYJ* J*XB 	YY4 4( 	YY3, 3,j 	YY  	YY#3 #3J 	YY( (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      sC           3  = 5 I(##] I(r   