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 )N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)r5   r6   )requestvaluesmodelsCmfAuth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,   )r7   r8   r9   r:   r   r   gen_server_challenge)r   r*   rE   r   r   r   get_server_challengeE   s
    
zSigninView.get_server_challengeN)
r   r   r   r   r   r   r   r   rG   rJ   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.rurH   r,   uJ   Такой пользователь уже зарегистрирован.i  Nu8   Не удалось зарегистрироватьсяzHssh supervisor.active360.ru /opt/fox_acrm/cloud/cloud_assign.sh --admin=z --hostname=r-   hostnamer.   r/   r0   r2   r5   r6   )r5   r6   )r7   r8   r9   r:   r   _errornew_from_loginrL   save	Exceptionstrr   run_bash_commandr=   r>   r?   r&   jsonifyr@   rA   rB   rC   rD   )r   r*   rL   rM   rE   ecmdresoutr$   r%   rF   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 )	NrV   Zcloud_assignr*   hashsaltphoner,   zSigned up successfully)r7   r8   r   rY   r9   r:   new_from_login_hash_saltr   r\   rP   dpcommit)r   r*   rZ   r[   r\   rE   r   r   r   rG      s    




zSignupView.postc                 C   s   t | d||dddS )Nz2.0)codemessage )jsonrpcerrorcallidr   )r   r`   ra   r   r   r   rN      s
    zSignupView._errorN)r   r   r   r   r   r   r   r   rY   rG   rN   r   r   r   r   rK   N   s   
,
rK   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   r2   r5   )r.   ri   )r5   ri   )
r7   r8   r   headersr<   r=   r>   r?   r&   r@   )r   rF   r$   r%   r   r   r   r      s4    

        zSignOutView.getNr   r   r   r   r   rf      s   rf   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,   rb   u"   Сохранено успешно!)r9   r:   r   r7   formr   itemsr=   setattrrP   r^   r_   r	   r   path)r   cmf_authkvold_valr   r   r   rG      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*   rZ   r[   rH   r,   u*   Пароль успешно изменен)
r7   r8   r9   r:   r   r   set_pass_hashrP   r^   r_   )r   r*   rZ   r[   rE   r   r   r   set_password   s    



zProfileView.set_passwordN)
r   r   r   r   r   r   r   r   rG   rv   r   r   r   r   rk      s   

rk   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 )NrL   personsr*   rH   rg_member_ofTzAccounts sync successfully)jsonloadsr7   datar9   r:   r   groupsis_nullappend
is_changedr   removerP   )r   r|   rL   Zperson_dictuser
group_namer   r   r   rG      s*    





zSyncAccountsView.postN)r   r   r   r   r   r   r   rG   r   r   r   r   rw      s   rw   )rB   hashlibsecretstimer   Crypto.Cipherr   ZCrypto.Randomr   Crypto.Util.Paddingr   r   flaskr   r   r	   r
   cmf.data_providers.baser   cmf.includer   r   BaseViewr   r&   r'   rK   rf   rk   rw   r   r   r   r   <module>   s"   +P*