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   ./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.1Z	localhostTstrict)ZsecureZhttponlyZ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Z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   ZdaysdomainZexpiresnginx_auth_tokenpassword123)r-   r.   )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&   )r/   r0   r1   r2   r   r   Zgen_server_challenge)r   r$   r<   r   r   r   get_server_challengeE   s
    
zSigninView.get_server_challengeN)
r   r   r   r   r   r   r   r   r>   r@   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.rur?   r&   uJ   Такой пользователь уже зарегистрирован.i  Nu8   Не удалось зарегистрироватьсяzHssh supervisor.active360.ru /opt/fox_acrm/cloud/cloud_assign.sh --admin=z --hostname=r'   hostnamer(   r)   r*   r+   r-   r.   )r-   r.   )r/   r0   r1   r2   r   _errorZnew_from_loginrB   save	Exceptionstrr   Zrun_bash_commandr4   r5   r6   r!   Zjsonifyr7   r8   r9   r:   r;   )r   r$   rB   rC   r<   ecmdresoutr   r    r=   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 )	NrI   Zcloud_assignr$   hashsaltphoner&   zSigned up successfully)r/   r0   r   rL   r1   r2   Znew_from_login_hash_saltr   rO   rE   dpcommit)r   r$   rM   rN   rO   r<   r   r   r   r>      s    




zSignupView.postc                 C   s   t | d||dddS )Nz2.0)codemessage )ZjsonrpcerrorZcallidr   )r   rR   rS   r   r   r   rD      s
    zSignupView._errorN)r   r   r   r   r   r   r   r   rL   r>   rD   r   r   r   r   rA   N   s   
,
rA   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 )NZnext_urlZRefererzSigned out successfullyr'   r(   Noner   r+   r-   )r(   rW   )r-   rW   )
r/   r0   r   Zheadersr3   r4   r5   r6   r!   r7   )r   r=   r   r    r   r   r   r      s4    

        zSignOutView.getNr   r   r   r   r   rV      s   rV   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&   rT   u"   Сохранено успешно!)r1   r2   r   r/   Zformr   itemsr4   setattrrE   rP   rQ   r	   r   path)r   Zcmf_authkvZold_valr   r   r   r>      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$   rM   rN   r?   r&   u*   Пароль успешно изменен)
r/   r0   r1   r2   r   r   Zset_pass_hashrE   rP   rQ   )r   r$   rM   rN   r<   r   r   r   set_password   s    



zProfileView.set_passwordN)
r   r   r   r   r   r   r   r   r>   r_   r   r   r   r   rX      s   

rX   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 )NrB   Zpersonsr$   r?   Zrg_member_ofTzAccounts sync successfully)Zjsonloadsr/   datar1   r2   r   groupsZis_nullappendZ
is_changedr   removerE   )r   rb   rB   Zperson_dictuserZ
group_namer   r   r   r>      s*    





zSyncAccountsView.postN)r   r   r   r   r   r   r   r>   r   r   r   r   r`      s   r`   )r9   ZhashlibZsecretstimer   ZCrypto.Cipherr   ZCrypto.Randomr   ZCrypto.Util.Paddingr   r   Zflaskr   r   r	   r
   Zcmf.data_providers.baser   Zcmf.includer   r   ZBaseViewr   r!   r"   rA   rV   rX   r`   r   r   r   r   <module>   s"   +P*