o
    Ci5                  
   @   s  d dl mZ d dlmZ d dlmZ d dlm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mZ d d	lmZ d d	lmZ d d	lmZ d d	lmZ d d
lmZ d dl	Z	d dlmZ d dlmZ ed Zd dlZd dl Z d dl!Z!d dl"Z"zej#dej$ej%dZ&W n e'y Z( z
e)e( W Y dZ([(ndZ([(ww G dd de	j*Z+dd Z,dd Z-de.de.fddZ/de.de.fddZ0dd Z1dd Z2dd Z3d d! Z4d"d# Z5d$d% Z6G d&d' d'eZ7d dl"Z"d d(l8m9Z9 d/d)d*Z:d0d-d.Z;dS )1    )text)logger)now)settingsN)Fernet)ContentFile)default_storage)models)PageNumberPaginationz,frdrjUMenQ4U5V0Fe4gKkDIgfY8YxMmW8rPoK3eRCoc=s3)aws_access_key_idaws_secret_access_keyc                       s   e Zd Z fddZ  ZS )UUIDEncoderc                    s    t |tjr
t|S t |S N)
isinstanceuuidUUIDstrsuperdefault)selfobj	__class__ $/var/www/Datamplify/Service/utils.pyr   &   s   zUUIDEncoder.default)__name__
__module____qualname__r   __classcell__r   r   r   r   r   %   s    r   c                 C   s&   t | d}t|}|d}|S Nutf-8)r   encodebase64	b64encodedecode)input_stringinput_bytesencoded_bytesencoded_stringr   r   r   encode_value+   s   

r*   c                 C   s   t | d}|d}|S r    )r#   	b64decoder"   r%   )r)   decoded_bytesdecoded_stringr   r   r   decode_value1   s   
r.   datareturnc                 C   sH   i }|   D ]\}}|d u rd ||< qtt|  ||< q|S r   )itemsfernetencryptjsondumpsr"   r%   )r/   	encryptedkvr   r   r   encrypt_json7   s   
r9   c                 C   sH   i }|   D ]\}}|d u rd ||< qtt|  ||< q|S r   )r1   r4   loadsr2   decryptr"   r%   )r/   	decryptedr7   r8   r   r   r   decrypt_jsonE   s   

r=   c                 C   sp  t jdkrttj ddddd t|  }d| }t| z|d tj	|t j
|dd	id
 W n<   z!t| d}t	|t j
| W d    n1 sUw   Y  W n   t| }tj	|t j
|dd	id
 Y Y dt j
 d| }||d}|S ttj ddddd t|  }d| }t| }t|| t j d| }||d}|S )Nr    _:_IN_zDatamplify/files/r   ACLzpublic-read)	ExtraArgsrbhttps://.s3.amazonaws.com/file_keyfile_urlzinsightapps/files/media/)r   file_save_pathr   datetimer   replaceprintseekr   upload_fileobjAWS_STORAGE_BUCKET_NAMEopentemporary_file_pathr   readr   savefile_save_url)	file_pathfile_path112t1
file_path1r/   rI   data_fnfile_contentr   r   r   file_files_saveR   s>   
*

*
r]   c                 C   s0   | j d}|r|dd  S | j ddS )NHTTP_X_FORWARDED_FOR,r   REMOTE_ADDRz0.0.0.0)METAgetsplitstrip)requestx_forwarded_forr   r   r   get_client_ipy   s   rg   c                 C   sB   |   dkrtjj }n|   dkrtjj }n	 |r|S dS )Nflowtaskr   )lowerflow_models	FlowBoardobjectscounttask_modelsTaskPlan)typelast_objr   r   r   get_last_model_id   s   rs   c                 C   s<   t | dd}t d}t|}| d| d| }|S )z<Generate a unique code using IP + timestamp + model last ID.. z%Y%m%d%H%M%S-)rg   rM   r   strftimers   )re   rq   ip	timestamplast_idseedr   r   r   generate_user_unique_code   s
   r|   c                 C   s*   zdt |  }t| W d S    Y d S )NrJ   )r   osremove)r/   a1r   r   r   delete_file   s
   r   c                 C   s  t jdkrnttj dddd}| | | d}tj| dd}t	|
d}d	| d
| }	|dkrKtj|t j|	d dt j d|	 }
ntjt jt|d tj|t j|	d dt j d|	 }
|	|
d}|S |dksv|d krwntt| ttj dddd}d| d
| d}tj| dd}t|d}|| W d    n1 sw   Y  t j d| }
||
d}|S )Nr   r>   r?   r@   z.txt   )indentr!   zDatamplify//ru   )BucketKeyrE   rF   rG   zinsightapps/wrJ   )r   rK   r   rL   r   rM   r4   r5   ioBytesIOr"   r   rP   rQ   delete_objectr   r   rR   writerV   )r/   	server_idqueryset_idrx   dl_keyrY   rW   	json_datafile_bufferrH   rI   r[   filer   r   r   file_save_1   s<   
r   c                   @   s   e Zd ZdZdZdZdZdS )CustomPaginator   	page_size
   i@B N)r   r   r   pagepage_size_query_paramr   max_page_sizer   r   r   r   r      s
    r   )FTPc           	   
   C   s  |   dkr?zt }|t  |j||pd||d || ddW S  ty> } zdt|dW  Y d }~S d }~ww |   dkrwzt	 }|||pOd	 |j
||d
 |ddW S  tyv } zdt|dW  Y d }~S d }~ww |   dkrd S td|  )Nsftp   )usernamepassword   )
ssh_clientsftp_clientstatusi  )r   messageftp   )userpasswd)
connectionr   smbzUnsupported connection type: )rj   paramiko	SSHClientset_missing_host_key_policyAutoAddPolicyconnect	open_sftp	Exceptionr   r   login
ValueError)	connection_typehostr   r   portsharessher   r   r   r   
SSHConnect   s4   r   ru   r?   c                 C   s   dd l }	 g }|  D ]=\}}|r| | | n|}t|tr-|t|||d  qt|trA|||r<||nd f q|||f qt|S )Nr   )sep)	r4   r1   r   dictextendflatten_documentlistappendr5   )doc
parent_keyr   r4   r1   r7   r8   new_keyr   r   r   r      s   

r   )NN)ru   r?   )<
sqlalchemyr   Datamplify.settingsr   django.utils.timezoner   
Datamplifyr   rL   r4   r   r#   cryptography.fernetr   django.core.files.baser   django.core.files.storager   authenticationr	   auth_modelsConnectionsconn_modelsrl   rk   rp   ro   rest_framework.paginationr
   r"   r2   boto3r}   r   r   clientAWS_S3_ACCESS_KEY_IDAWS_S3_SECRET_ACCESS_KEYr   r   r   rN   JSONEncoderr   r*   r.   r   r9   r=   r]   rg   rs   r|   r   r   r   ftplibr   r   r   r   r   r   r   <module>   sP      '		)
%