B
    fg)                 @   s   d dl Z d dlZd dlZd dlZ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T ejej Zd	ddZG dd dejjZdS )
    N)	send_file)*   c             C   s   d dd t| D S )N c             s   s   | ]}t tV  qd S )N)secretschoicealphabet).0_ r   ./modules/rdisk/models/index.py	<genexpr>   s    zgen_token.<locals>.<genexpr>)joinrange)lengthr   r   r   	gen_token   s    r   c               @   s  e Zd ZdZdZejjjddddddddd	d
g
 Ze	dd Z
e
Ze	dd Zedd Zdd Zdd Zdd Zdd Zedd Zdd Zdd Zedd  Zd7d"d#Zed$d% Zed&d'd(Zd8d)d*Zed+d,d-Zed.d/d0Zeed1d2d3Z ed!d4d5d6Z!d!S )9CmfRFileTrenameZ
favouritesgen_url_for_webdavcreate_rfile_from_templateget_versionsremove_versionget_url_fileget_local_url	sdesk_getc             C   sH   | j r
d S | jjr| jsd S | jjd}|dr>d| S d| S )N/zobj/zfiles/zrdisk/file/)is_diridZ
is_definedvaluelstrip
startswith)selfZid_r   r   r   _download_url'   s    

zCmfRFile._download_urlc             C   s   | j S )N)r   )r!   r   r   r   _code6   s    zCmfRFile._codec             C   s   d S )Nr   )clsr   r   r   gen_id:   s    zCmfRFile.gen_idc             C   s   d S )Nr   )r!   r   r   r   gen_code>   s    zCmfRFile.gen_codec             C   s   | j j| jj| d S )N)dpdata_driverwriter   r   )r!   datar   r   r   r)   A   s    zCmfRFile.writec             O   s   | j jj| jjf|| d S )N)r'   r(   stream_writer   r   )r!   argskwargsr   r   r   r+   D   s    zCmfRFile.stream_writec             O   s(   t jjj }|| jj}|j||S )N)	modelsr   r'   r(   get_rd	get_rfiler   r   get_fullview)r!   r,   r-   rdiskrfiler   r   r   r1   G   s    zCmfRFile.get_fullviewc             C   s(   | j jj||| d}| j|dddgdS )N)Zmodelr   namecode)fields)r'   r(   r   get)r$   dirnamefilenamer   r   r   r   r   L   s    z#CmfRFile.create_rfile_from_templatec          
   O   s  |dkr\ddddd}d}x|  D ]*\}}| jjdd	 |kr$||}P q$W td
nb|dkrjd}nT|dkrxd}nF|dkrd}n8|dkrd}n*|dkrd}n|dkrd}ntd| tjj	j}t
d| }	|	jddd d }
xf|	 D ]Z}| sq| }t|}|d }|t k r6|  q|d}| j|kr|}
qW d }|
rt|
 }|d ry(tj|d tj ddgd |
j}W n< tjk
r } ztd||
 |
  W d d }~X Y nX ntd|
 |
  |std}d }d!| d"| d"| }tj rBt!j"#t$j%d#\}}|& }nt$j%d$}|t't d% | jjd&}|	| }|j(jdd' |)t*| t+d|d(}| d)| d*t,j-.| jj/d* }|S )+NZmsoffice)ZxlsZxltZxlmZxlsmZxlsxZxltmZxltxZods)	ZppsZpptZpptmZpptxZpotmZpotxZppsmZppsxZodp)	docdotZdocmZdocxZdotmZdotxZodtZhtmlZrtf)ZvsdZvsdmZvsdxZvstmZvstxZodg)ZexcelZ
powerpointZwordZvisiozms-{}:ofe|u|https.uF   Не могу открыть файл в пакете Microsoft OfficeZlibreofficeZwebdavsZkeynoteZ	office365Z
googledocsZ	activecrmZfolderZdavu)   Неизвестный редактор: z/opt/rdisk/sessions/T)exist_okparentsexpr9   jwtZRS256ZHS256)keyZ
algorithmsz'Invalid webdav session token %s from %sz"Empty webdav session token from %sr   W   Zs_r
   Zsession_tokenZaccess_token   )rA   r@   r9   )r>   )Zfull_urlprotocolz/webdav/r   )0itemsr   r   splitformat
ValueError	ExceptiongZcurrent_personloginpathlibZPathmkdirZiterdiris_fileZ	read_textujsonloadstimeunlinkr7   jwtlibdecodeZAPPZrsa_public_keyZ
export_keyr4   ZInvalidTokenErrorZloggingerrorr   ZconfigZIS_BOX_VERSIONr.   Z
CmfSessionZ
from_tokenZrequestZcookiesZrsa_sign_pack_jwtintparentZ
write_textdumpsZapp_base_hrefurllibparseZquoter   )r!   Zeditorr,   r-   Zms_office_type_to_ext_maprE   kvrL   Z	login_dirZ
found_pathpZp_textZp_datar@   r9   Zsession_nameZ	json_dataetokenZsecretZauthZ_sessionrA   Z	base_hrefurlr   r   r   r   Q   s    










&zCmfRFile.gen_url_for_webdavc          
   K   sN   y| j j| | W n. tk
rB } ztt| W d d }~X Y nX | |S )N)r'   r(   r   FileExistsErrorZ	cmf_alertstrr7   )r!   Z	target_idr-   r_   r   r   r   r      s
    zCmfRFile.renamec          	   C   sN   t jjdd}|sJt * t jd}t jd|dd}|  W d Q R X |S )Nz/Trash)r   r   ZTrashT)r4   rX   r   )r.   r   r7   ZcmfutilZdisable_aclZsave)r$   trashrootr   r   r   ensure_trash   s    
zCmfRFile.ensure_trashNc             K   sR   |   }| jj dtj d}|r4| d| }|j d| }| | d S )Nr
   z%Y-%m-%d-%H%M%Sr   )rf   r4   r   datetimeZnowr   r   )r!   prefix_kwargsrd   Znew_idr   r   r   move_to_trash   s    zCmfRFile.move_to_trashc                sd   |   } fddtjjdd|jjgdD }|r`|jdd d |  |d	 | |d	 S d S )
Nc                s"   g | ]}|j   d r|qS )r
   )r4   r    )r	   obj)r4   r   r   
<listcomp>   s    z/CmfRFile.restore_from_trash.<locals>.<listcomp>Z	parent_idz==)filterc             S   s   | j jS )N)r4   r   )rk   r   r   r   <lambda>       z-CmfRFile.restore_from_trash.<locals>.<lambda>)rB   r   )	rf   r.   r   listr   r   sortreverser   )r$   r4   Z
target_dirri   rd   Zrfilesr   )r4   r   restore_from_trash   s    &zCmfRFile.restore_from_trash)returnc          
   C   s   |  ddddg g }tjjj }|| jj}xX|	 j
D ]J}tjj|jd}||j| j d|j t|j|j ||jd q>W |S )ua   
        Возвращает список версий файла со ссылками
        st_ctimest_sizeZdownload_urlabspath)rL   z	?version=)versionra   rw   Zcreate_dateauthorrv   )Zload_fieldsr.   r   r'   r(   r/   r0   r   r   file_versionsversionsZ	CmfPersonsgetry   appendrx   r"   rc   pathZdateZ	isoformatrv   )r!   r{   r2   r3   verZ
cmf_authorr   r   r   r      s    zCmfRFile.get_versionsc             C   sH   |   }|s|r|d S d S n&t|}x|D ]}|d |kr,|S q,W d S )Nr=   rx   )r   rW   )r!   rx   r{   r   r   r   r   get_version   s    
zCmfRFile.get_version)rx   c            O   sN   t jjj }|| jj}| }x$|j	D ]}|j
|kr,|| P q,W d S )N)r.   r   r'   r(   r/   r0   r   r   rz   r{   rx   remove)r!   rx   r,   r-   r2   r3   Zversion_managerr   r   r   r   r     s    

zCmfRFile.remove_version)os_typec             C   sZ   |dkr4d| j  d| | d}| j  d|dS d| | }| j  d|dS d	S )
u   
        Возвращаем файл ссылку для локального открытия
        os_type: str - linux, windows
        linuxzl
                [Desktop Entry]
                Version=1.0
                Type=Link
                Name=zR
                Comment=
                Icon=user-bookmarks
                URL=z
            z.desktop)	file_namecontentz[InternetShortcut]
URL=z.urlN)r4   r   )r!   r   r   r   r   r   r     s
    	zCmfRFile.get_url_file)r   rt   c             C   sj   d}|dkr|t jjj7 }n>|dkr4|t jjj7 }n&|dkrL|t jjj7 }ntd| || jj7 }|S )Nzfile://Zwindowsr   Zmacosu.   Тип ОС не поддерживается )rK   Zglobal_settingsZrdisk_windowsr   Zrdisk_linuxZrdisk_macosrJ   r   )r!   r   Zresr   r   r   r   &  s    zCmfRFile.get_local_url)r6   c            O   s   d S )Nr   )r$   r6   r,   r-   r   r   r   r   3  s    zCmfRFile.sdesk_get)N)N)"__name__
__module____qualname__ZTEXKOM_no_cacheZ	api_allowcmfr.   	BaseModelZapi_methodspropertyr"   Z_upload_urlr#   classmethodr%   r&   r)   r+   r1   r   r   r   rf   rj   rs   rp   r   r   rW   r   rc   r   r   r   r   r   r   r   r      sD   u



	r   )r   )rg   rM   r   stringZtempfilerR   Zurllib.parserZ   rA   rT   rP   Zflaskr   Zcmf.includeZascii_lettersdigitsr   r   r   r.   r   r   r   r   r   r   <module>   s   
