B
    f@                 @   s   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	 d	ejjeZdS )
    N)abort)rollback_all_ds)*)normalize_email_address)ResponseMixin)urlparsec               @   sx   e Zd ZdZejj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/auth/signinc             C   s   t jj}| dS )Nzsignin.html)gglobal_settingsZservicedesk_allow_auth_guestsZrender)selfZshow_register_button r   %./modules/servicedesk/views/signin.pyget   s    zSigninView.getc             C   s   t jjsd S tjdd }d| }tj|}dt	j
tjdd}tj|| |stjjddd |dd	d
dd||d	 td | }|r||krtjjddd |dd	ddd||d	 td d S )Ncaptchazauth:user_login_captcha:    )kZauth_failedCmfAuthzRequire captcha)loginreasonZfailT   )	operatecmf_model_nameparent
audit_dataresult_statuscurrent_transactionsecurity_levelparent_nameparent_codei  authzBad captcha)r	   r
   auth_check_captcharequestvaluesr   APPREDIS_DBjoinrandomchoicesstringdigitssetmodelsCmfAuditaudit_eventr   decode)r   r   r   Zdb_keyZ
db_captchaZnew_captchar   r   r   _auth_check_captcha   s(    






zSigninView._auth_check_captchac             C   sz   t jjsd S ttjd }tjd| s0d S ddl	m
} ddlm} tjd|  }| }||}||ddS )Nr   zauth:user_login_captcha:r   )Response)ImageCaptchaz	image/png)Zmimetype)r	   r
   r!   r   r"   r#   r$   r%   existsflaskr1   Zcaptcha.imager2   r   r/   Zgenerate)r   r   r1   r2   r   Zimagedatar   r   r   captcha_img5   s    
zSigninView.captcha_imgc       	      C   sR  dd l }|jtjd }d|kr*t|}tjd }| | t   t	j
||}t	j
j  |si }tjrtjd |d< td| |jr4t |jkr4tjdd }tjd	d }|r|st	jjd
dd d|iddd||d	 td ||| |jr
d |_t	jjddd d|iddd||d	 |  td}| ||S Q R X d S )Nr   r   @challenge_respmessagei  Znew_password_hashZnew_password_saltZpassword_expiredr   password_expires_must_changeTr   )	r   r   r   r   r   r   r   r   r   i  Zpassword_changed   zSigned in successfully)urllibparseZunquoter"   r#   r   r0   ZcmfutilZdisable_aclr,   r   get_by_challenge_respdpcommitr	   alertr   r;   timer   r-   r.   Zset_pass_hashZsaveZmake_responseZ_ok)	r   r=   r   r8   r    abort_kwargshashsaltZresponser   r   r   postG   sB    





zSigninView.postc             C   s4   t tjd }tjj|dddgd}|s,dS | S )Nr   Ztoken_lengthrF   Zauth_options)r   Zfieldsr   )r   r"   r#   r,   r   r   Zgen_server_challenge)r   r   r    r   r   r   get_server_challengev   s
    zSigninView.get_server_challengec             C   s`   t tjd }tjd }tj||}tjj  |sXi }tj	rNtj	d |d< t
d| | S )u>   
            Ручка для авторизации
        r   passwordr9   r:   i  )r   r"   r#   r,   r   r?   r@   rA   r	   rB   r   Zrsa_sign_pack_jwt)r   r   rI   r    rD   r   r   r   signin_with_login_password~   s    

z%SigninView.signin_with_login_passwordc             C   sD   t jstd tdS t jjj}tjj	|d}|s<tdS tdS )uu    Определить по куке куда отправить пользователя автоматически. u7   1. Нет куки - форма авторизации.z/servicedesk/auth/signin)r   z./servicedesk/auth/signout?next_url=auth/signinz/servicedesk)
r	   r    ZlogginginfoZredirectZemailvaluer,   r   r   )r   r   r    r   r   r   proceed   s    

zSigninView.proceedN)__name__
__module____qualname__Z__url__cmfviewsactionr   r0   r6   rG   rH   rJ   rM   r   r   r   r   r      s   /r   )ZdatetimeZujsonr'   r)   rC   r4   r   Zcmf.data_providers.baser   Zcmf.includeZmodules.auth.models.emailr   Zmodules.auth.views.responser   Zurllib.parser   rQ   rR   ZBaseViewr   r   r   r   r   <module>   s   