U
    Vc                     @   s  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mZ d dl	m
Z
mZ d dlmZmZmZmZ d dlmZ d dlT G d	d
 d
ejjZdd ZG dd dejjZG dd dejjZG dd dejjZG dd dejjZG dd dejjZdS )    N)copy)AES)get_random_bytes)padunpad)abortredirectflashResponsecommit_all_ds)*c                   @   s    e Zd ZdZejjdd ZdS )	IndexView/c                 C   s   t dS )NZsignin)r   self r   &/opt/crm/./modules/auth/views/index.pyget   s    zIndexView.getN__name__
__module____qualname____url__cmfviewsactionr   r   r   r   r   r      s   r   c                 C   s   i }| dkrt dddd}|S )N)z	127.0.0.1	localhostTstrict)securehttponlysamesite)dict)cookie_domaincookie_kwargsr   r   r   get_cookie_kwargs   s    r%   c                   @   s@   e Zd ZdZejjdd Zejjdd Zejjdd Z	dS )	
SigninViewz/signinc                 C   s
   |  dS )Nzsignin.htmlrenderr   r   r   r   r   &   s    zSigninView.getc                 C   s   t jd }t jd }tj||}|s.td td}ttdt j	}t
|}|jd| f|tj tjdd d	| |jd|tj tjdd d	| |S )Nloginchallenge_resp  zSigned in successfullyAUTH_SESSION_COOKIE_DOMAINaccess_token   daysdomainexpiresnginx_auth_tokenpassword123)r4   r5   )requestvaluesmodelsCmfAuthZget_by_challenge_respr   make_responsegetattrconfighostr%   
set_cookiersa_sign_pack_jwtdatetimenow	timedelta)r   r)   r*   authresponser#   r$   r   r   r   post*   s6    

  zSigninView.postc                 C   s,   t jd }tjj|d}|s$td | S )Nr)   r)   r+   )r6   r7   r8   r9   r   r   Zgen_server_challenge)r   r)   rC   r   r   r   get_server_challengeE   s
    
zSigninView.get_server_challengeN)
r   r   r   r   r   r   r   r   rE   rG   r   r   r   r   r&   #   s   

r&   c                   @   s@   e Zd ZdZejjdd Zdd Zejjdd Z	dd	 Z
d
S )
SignupViewz/signupc                 C   s
   |  dS )Nzsignup.htmlr'   r   r   r   r   r   Q   s    zSignupView.getc              
   C   sR  t jd }t jd }| d}tjj|d}|r<| ddS ztj|}||_|  W n6 t	k
r } z| dt
| W Y S d}~X Y nX |s| dd	S d
| d| }t  t|\}}|r| d|S ttdt j}	t|	}
td|i}|jd| f|	tj tjdd d|
 |jd|	tj tjdd d|
 |S )u   
        Регистрируем пользователя и создаем виртуалку с CRM
        :return: билеты авторизации и hostname виртуалки
        r)   org_namez.active360.rurF   r+   uJ   Такой пользователь уже зарегистрирован.i  Nu8   Не удалось зарегистрироватьсяzHssh supervisor.active360.ru /opt/fox_acrm/cloud/cloud_assign.sh --admin=z --hostname=r,   hostnamer-   r.   r/   r1   r4   r5   )r4   r5   )r6   r7   r8   r9   r   _errorZnew_from_loginrI   save	Exceptionstrr   run_bash_commandr;   r<   r=   r%   jsonifyr>   r?   r@   rA   rB   )r   r)   rI   rJ   rC   ecmdresoutr#   r$   rD   r   r   r   _cloud_assignU   sR    


&  zSignupView._cloud_assignc                 C   sx   t jddkr|  S t jd }t jd }t jd }t jd }tj|||}|s\td ||_|	  |j
  dS )	NrR   Zcloud_assignr)   hashsaltphoner+   zSigned up successfully)r6   r7   r   rU   r8   r9   Znew_from_login_hash_saltr   rX   rL   dpcommit)r   r)   rV   rW   rX   rC   r   r   r   rE      s    




zSignupView.postc                 C   s   t | d||dddS )Nz2.0)codemessage )ZjsonrpcerrorZcallidr   )r   r[   r\   r   r   r   rK      s
    zSignupView._errorN)r   r   r   r   r   r   r   r   rU   rE   rK   r   r   r   r   rH   N   s   
,
rH   c                   @   s    e Zd ZdZejjdd ZdS )SignOutViewz/signoutc                 C   s   dt jkrtt jd }n"dt jkr4tt jd }ntd}ttdt j}t|}|j	d
|dd| |j	d|dd| |S )Nnext_urlRefererzSigned out successfullyr,   r-   Noner   r1   r4   )r-   rb   )r4   rb   )
r6   r7   r   headersr:   r;   r<   r=   r%   r>   )r   rD   r#   r$   r   r   r   r      s4    

        zSignOutView.getNr   r   r   r   r   r_      s   r_   c                   @   s@   e Zd ZdZejjdd Zejjdd Zejjdd Z	dS )	ProfileViewz/profilec                 C   s
   |  dS )Nzprofile.htmlr'   r   r   r   r   r      s    zProfileView.getc                 C   s   t jtjd }|std tj D ]:\}}t||}|d krL|dkrLq(||krVq(t||| q(|	  |j
  td ttjS )Nidr+   r]   u"   Сохранено успешно!)r8   r9   r   r6   formr   itemsr;   setattrrL   rY   rZ   r	   r   path)r   Zcmf_authkvold_valr   r   r   rE      s    

zProfileView.postc                 C   sZ   t jd }t jd }t jd }tjj|d}|s8td ||| |  |j	  dS )Nr)   rV   rW   rF   r+   u*   Пароль успешно изменен)
r6   r7   r8   r9   r   r   Zset_pass_hashrL   rY   rZ   )r   r)   rV   rW   rC   r   r   r   set_password   s    



zProfileView.set_passwordN)
r   r   r   r   r   r   r   r   rE   rm   r   r   r   r   rd      s   

rd   c                   @   s    e Zd ZdZejjdd ZdS )SyncAccountsViewz/sync_accountsc                 C   s   t tj}|d }|d D ]}tjj|d d}|s8q|jjrJ|g i|_||jkr^g |j|< |d D ],}||j| krzqf|j| 	| d|j_
qft|j| D ](}||d kr|j| | d|j_
q|  qdS )NrI   Zpersonsr)   rF   rg_member_ofTzAccounts sync successfully)jsonloadsr6   datar8   r9   r   groupsis_nullappend
is_changedr   removerL   )r   rr   rI   Zperson_dictuserZ
group_namer   r   r   rE      s*    





zSyncAccountsView.postN)r   r   r   r   r   r   r   rE   r   r   r   r   rn      s   rn   )r@   hashlibsecretstimer   ZCrypto.Cipherr   ZCrypto.Randomr   ZCrypto.Util.Paddingr   r   flaskr   r   r	   r
   cmf.data_providers.baser   cmf.includer   r   BaseViewr   r%   r&   rH   r_   rd   rn   r   r   r   r   <module>   s"   +P*