
    X(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 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)urlparsec                   f   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y	)

SigninViewz/auth/signinc           	         dd l }ddlm} t        j                  j
                  }d }t        j                  j                  d      }t        j                  j                  dd      }|j                  j                  |      }t        j                  |      sd}|r"t        j                  j!                  |      \  }} |dg      }|r(|s&t#        t%        |            }	| j'                  |	|      S g }
t        j(                  j+                  g dg d	gd
dg      D ]7  }|
j-                  t/        |j0                  |j3                  |                   9 t5        |
      }| j7                  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   sB   . 00NN++O<>>%%j#6<<''1''1H#..99-HND('G$Xh%78H88Hd++0055>`>W>Y>A:=N 6 P 	dF t@W@WX`@abc	d  ,{{=))    c           
         t         j                  j                  s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 )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+   s      33..$$Y5+E7399;\\%%f-
ggfnnV]]a@A-OO''i/3%[l@m6<Q49u ( N #J&&(
'Z/OO''y/3%[h@i6CTU49u ( 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   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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 }|j                  j                  t        j                  d         }d|v rt        |      }t        j                  d   }| j                  |       t        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||       |j/                          t        j                  j%                  dd      }|j                  j                  |      }t        j1                  |      sd}t3        t5        d|i            }	| j7                  |	|      cd d d        S # 1 sw Y   y xY w)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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]^8=5 , R
 		~~))*c:H||++H5H++H5$Wnh-G%HIH88Hd+O'	, '	, '	,s   8GI  I)c                     t        t        j                  d         }t        j                  j                  |g d      }|sy|j                         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   sD    'w(?@~~!!6^!_((**r=   c                 |   t        t        j                  d         }t        j                  d   }t        j                  j                  ||      }t        j                  j                  j                          |s4i }t        j                  rt        j                  d   |d<   t        d|       |j                         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  "Lww*+''"+Y'#|$%%''r=   c                    t         j                  s t        j                  d       t	        d      S t         j                  j
                  j                  }t        j                  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   sj     vvLLRS688 ""~~!!!.LNN,((r=   N)__name__
__module____qualname____url__cmfviewsactionr    rc   rn   r   r   r   r    r=   r<   r
   r
      s    G 	YY* *08 	YY4 4( 	YY0, 0,d 	YY+ + 	YY( ($ 	YY) )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  = 5 !k)##] k)r=   