U
    kh/                     @   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dd Zedd Zdddd d!Zd"d# Zed$d% ZdAd&d'Zed(d) Zd*d+ Zd,d- Zed.d/d0ZdBd1d2Zd3d4 Ze d5d6d7Z!e"d8d9d:Z#e"e"d;d<d=Z$edd>d?d@Z%dS )C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 r   r   r"   r   r   r   _code6   s    zCmfRFile._codec                 C   s   d S r   r   )clsr   r   r   gen_id:   s    zCmfRFile.gen_idc                 C   s   d S r   r   r%   r   r   r   gen_code>   s    zCmfRFile.gen_codec                 O   s   | j jj| jjf|| d S r   )dpdata_driverwriter   r   r"   argskwargsr   r   r   r,   A   s    zCmfRFile.writec                 O   s   | j jj| jjf|| d S r   )r*   r+   stream_writer   r   r-   r   r   r   r0   D   s    zCmfRFile.stream_writec                 C   s   | j j| jjS r   )r*   r+   tmp_readonly_pathr   r   r%   r   r   r   r1   G   s    zCmfRFile.tmp_readonly_pathc                 O   s(   t jjj }|| jj}|j||S r   )	modelsr   r*   r+   get_rd	get_rfiler   r   get_fullview)r"   r.   r/   rdiskrfiler   r   r   r5   J   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   O   s    z#CmfRFile.create_rfile_from_templateZRWN)ux_modeversionc                O   s.  |dkrlddddd}|dkr$d}nd	}|  D ]0\}}	| jjd
d  |	kr0||} qq0tdnb|dkrzd}nT|dkrd}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 |rd| |d  }nd| jj }d }| D ]`}| s:q(| }t|}|d }|t k rn|  q(|d}||kr(|}q(d }|r(t| }|d rz(tj|d tj ddgd  |j}W n< tjk
r } ztd!|| |  W 5 d }~X Y nX ntd"| |  |st d#}d$}d%|
 d&| d&| }t!j"r~t#j$j%t&j'd'dd(\}}|( }nt&j'd)}|t)t d* ||d+}|| }|j*jdd, |+t,| t-t.j./ 0 d
d- d.d  }t1d|d/}| d0| d1| | dt2j34| jj5d }|S )2NZ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ROzms-{}:ofv|u|httpszms-{}:ofe|u|https.uF   Не могу открыть файл в пакете Microsoft OfficeZlibreofficeZwebdavsZkeynoteZ	office365Z
googledocsZ	activecrmZfolderZdavu)   Неизвестный редактор: z/opt/rdisk/sessions/T)exist_okparentsr   pathexpr>   jwtZRS256ZHS256)keyZ
algorithmsz'Invalid webdav session token %s from %sz"Empty webdav session token from %sr   W   Zs_r   Zsession_token)Zrequire_scopesZaccess_token   )rI   rH   r>   r@   )rE   r   )Zfull_urlprotocolz/webdav/z-UX)6itemsr   r   splitlowerformat
ValueError	ExceptiongZcurrent_personloginpathlibPathmkdirget_versioniterdiris_file	read_textujsonloadstimeunlinkr<   jwtlibdecodeZAPPZrsa_public_keyZ
export_keyr8   ZInvalidTokenErrorZloggingerrorr   ZconfigZIS_BOX_VERSIONr2   Z
CmfSessionZ
from_tokenZrequestZcookiesZrsa_sign_pack_jwtintparent
write_textdumpsstrdatetimenowZ	timestampZapp_base_hrefurllibparsequoter    )r"   Zeditorr?   r@   r.   r/   Zms_office_type_to_ext_maprN   kvrV   Z	login_dirZversion_pathZ
found_pathpZp_textZp_datarH   r>   Zsession_nameZ	json_dataetokenZsecretZauthZ_sessionrI   ZsecondsZ	base_hrefurlr   r   r   r   T   s    









$0zCmfRFile.gen_url_for_webdavc              
   K   sN   z| j j| | W n. tk
rB } ztt| W 5 d }~X Y nX | |S r   )r*   r+   r   FileExistsErrorZ	cmf_alertri   r<   )r"   Z	target_idr/   rr   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 5 Q R X |S )Nz/Trashr$   r   ZTrashT)r8   rf   r   )r2   r   r<   ZcmfutilZdisable_aclZsave)r'   trashrootr   r   r   ensure_trash   s    
zCmfRFile.ensure_trashc                 K   sR   |   }| jj dtj d}|r4| d| }|j d| }| | d S )Nr   z%Y-%m-%d-%H%M%Sr   )rx   r8   r   rj   rk   r   r   )r"   prefix_kwargsrv   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   )r8   r!   )r
   objr8   r   r   
<listcomp>   s      z/CmfRFile.restore_from_trash.<locals>.<listcomp>Z	parent_idz==)filterc                 S   s   | j jS r   )r8   r   )r|   r   r   r   <lambda>       z-CmfRFile.restore_from_trash.<locals>.<lambda>)rJ   r   )	rx   r2   r   listr   r   sortreverser   )r'   r8   Z
target_dirrz   rv   Zrfilesr   r}   r   restore_from_trash   s    &zCmfRFile.restore_from_trashc                 C   s   t jjj }|| jjS r   )r2   r   r*   r+   r3   r4   r   r   )r"   r6   r   r   r   r4      s    zCmfRFile.get_rfilec                 C   s   |     d S r   )r4   make_previewr%   r   r   r   r      s    zCmfRFile.make_preview)returnc                 C   s   |  ddddg g }tjjj }|| jj}|	 j
D ]R}tjj|jd}||j| j d|j t|jt|j|j ||jd q<|S )ua   
        Возвращает список версий файла со ссылками
        st_ctimest_sizeZdownload_urlabspath)rV   z	?version=)r@   rt   r   rG   Zcreate_dateauthorr   )Zload_fieldsr2   r   r*   r+   r3   r4   r   r   file_versionsversionsZ	CmfPersonsgetr   appendr@   r#   ri   r   rG   dateZ	isoformatr   )r"   r   r6   r7   verZ
cmf_authorr   r   r   r     s    
zCmfRFile.get_versionsc                 C   sH   |   }|s|r|d S d S n&t|}|D ]}|d |kr*|  S q*d S )NrD   r@   )r   re   )r"   r@   r   r   r   r   r   rZ     s    zCmfRFile.get_versionc                 C   sT   t jjj }|| jj}| }|j	s.d S |j	d }|j
rBd S d|_
|  d S )NrD   T)r2   r   r*   r+   r3   r4   r   r   r   r   Z	is_publicZdump_versions_file)r"   r6   r7   version_managerZlast_versionr   r   r   
do_publish"  s    
zCmfRFile.do_publish)r@   c                O   sL   t jjj }|| jj}| }|j	D ]}|j
|kr*||  qHq*d S r   )r2   r   r*   r+   r3   r4   r   r   r   r   r@   remove)r"   r@   r.   r/   r6   r7   r   r   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)r8   r   )r"   r   r   r   r   r   r   7  s    	zCmfRFile.get_url_file)r   r   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.   Тип ОС не поддерживается )rU   Zglobal_settingsZrdisk_windowsr   Zrdisk_linuxZrdisk_macosrT   r   )r"   r   resr   r   r   r   L  s    zCmfRFile.get_local_urlr:   c                O   s   d S r   r   )r'   r;   r.   r/   r   r   r   r   Y  s    zCmfRFile.sdesk_get)N)N)&__name__
__module____qualname__ZTEXKOM_no_cacheZ	api_allowcmfr2   	BaseModelZapi_methodspropertyr#   Z_upload_urlr&   classmethodr(   r)   r,   r0   r1   r5   r   r   r   rx   r{   r   r4   r   r   r   rZ   r   re   r   ri   r   r   r   r   r   r   r   r      s\   



 
	

	
	r   )r   )rj   rW   r   stringZtempfiler`   urllib.parserl   rI   rb   r^   Zflaskr   Zcmf.includeascii_lettersdigitsr	   r   r   r2   r   r   r   r   r   r   <module>   s   
