
    m'i                          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)urlparsec                      e 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/auth/signinc           	         dd l }ddlm} t          j        j        }d }t          j                            d          }t          j	                            dd          }|j
                            |          }t                              |          sd}|r"t          j                            |          \  }} |dg          }|r4|s2t#          t%          |                    }	|                     |	|          S g }
t          j                            g dg d	gd
dg          D ]>}|
                    t/          |j        |                    |                               ?t5          |
          }|                     d          S )Nr   )get_flashed_messagessession_tokennext_url/
auth_error)category_filter)servicedesk_support==T)disabledr   Fr   zplugin.*)filterfields)name	login_urlzsignin.html)urllibflaskr   gglobal_settingsservicedesk_allow_auth_guestsrequestcookiesgetvaluesparseunquotecmfutilis_safe_next_urlmodels
CmfSession
from_tokenmake_responseredirect_okCmfAuthOpenIdPluginlistappenddictr   get_redirect_urllenrender)selfr   r   show_register_buttonauthr   r   _sessionmessagesresponsesso_buttonspluginsso_buttons_counts                %./modules/servicedesk/views/signin.pyr    zSigninView.get   s   ...... 0N++O<<>%%j#66<''11''11 	H 	I#.99-HHND(''GGG 	, 	,$Xh%7%788H88Hd+++055>`>`>`>W>W>W>Y>A:=N 6 P P 	d 	dF t@W@WX`@a@abbbcccc,,{{=)))    c           
         t           j        j        s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 )Ncaptchaauth:user_login_captcha:    )kauth_failedCmfAuthzRequire captcha)loginreasonfail   operatecmf_model_nameparent
audit_dataresult_statussecurity_levelparent_nameparent_codei  r5   zBad captcha)r   r   auth_check_captchar   r!   r    lowerAPPREDIS_DBjoinrandomchoicesstringdigitssetr&   CmfAuditaudit_eventr   decode)r3   rF   r?   db_key
db_captchanew_captchas         r<   _auth_check_captchazSigninView._auth_check_captcha+   sd     3 	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''y/3%[h@i@i6CTU49u ( 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   rF   @r@   )Response)ImageCaptchaz	image/png)mimetype)r   r   rS   r   r"   r#   r   r!   r   rU   rV   existsrT   r   rf   captcha.imagerg   r    r_   generate)r3   r   rF   rf   rg   r?   imagedatas           r<   captcha_imgzSigninView.captcha_imgG   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 }|j                            t          j        d                   }d|v rt          |          }t          j        d         }|                     |           t                                          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                            |          }t                              |          sd}t3          t5          d|i                    }	|                     |	|          cd d d            S # 1 swxY w Y   d S )Nr   rF   re   challenge_respmessage  new_password_hashnew_password_saltpassword_expiredrE   password_expires_must_changerI   rJ   i  password_changed   r   r   redirect_url)r   r"   r#   r   r!   r   rc   r$   disable_aclr&   rE   get_by_challenge_respdpcommitr   alertr   need_change_passwordr    r]   r^   set_pass_hashrw   saver%   r)   jsonifyr+   )
r3   r   rF   rp   r5   abort_kwargshashsaltr   r8   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]^8=5 , R R R
 		~))*c::H|++H55H++H55 $Wnh-G%H%HIIH88Hd++O'	, '	, '	, '	, '	, '	, '	, '	, '	, '	, '	, '	, '	, '	, '	, '	, '	, '	,s   G3JJ	Jc                     t          t          j        d                   }t          j                            |g d          }|sdS |                                S )NrF   )token_lengthr   auth_options)rF   r   rA   )r   r   r!   r&   rE   r    gen_server_challenger3   rF   r5   s      r<   get_server_challengezSigninView.get_server_challenge   sV    'w(?@@~!!6^6^6^!__ 	2((***r=   c                 |   t          t          j        d                   }t          j        d         }t          j                            ||          }t          j        j                                         |s3i }t          j	        rt          j	        d         |d<   t          d|           |                                S )u>   
            Ручка для авторизации
        rF   passwordrq   rr   rs   )r   r   r!   r&   rE   r|   r}   r~   r   r   r   rsa_sign_pack_jwt)r3   rF   r   r5   r   s        r<   signin_with_login_passwordz%SigninView.signin_with_login_password   s    
 (w(?@@>*-~33E8DD  """ 	%Lw 6*+'"+Y'#|$$$%%'''r=   c                    t           j        s)t                              d           t	          d          S t           j        j        j        }t          j        	                    |          }|st	          d          S t	          d          S )uu    Определить по куке куда отправить пользователя автоматически. u7   1. Нет куки - форма авторизации.z/servicedesk/auth/signin)rF   z./servicedesk/auth/signout?next_url=auth/signinz/servicedesk)
r   r5   logginginfor*   emailvaluer&   rE   r    r   s      r<   proceedzSigninView.proceed   s|     v 	9LLRSSS7888 "~!!!.. 	OMNNN(((r=   N)__name__
__module____qualname____url__cmfviewsactionr    rc   rn   r   r   r   r    r=   r<   r
   r
      s        G 	Y* * *0  8 	Y4 4 4( 	Y0, 0, 0,d 	Y+ + + 	Y( ( ($ 	Y) ) ) ) )r=   r
   )datetimeujsonrX   rZ   r   r   cmf.data_providers.baser   cmf.includemodules.auth.models.emailr   modules.auth.views.responser   urllib.parser   r   r   BaseViewr
   r   r=   r<   <module>r      s              3 3 3 3 3 3     = = = = = = 5 5 5 5 5 5 ! ! ! ! ! !k) k) k) k) k)#] k) k) k) k) k)r=   