U
    &3f*                     @   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edd Zedd 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d0ddZedd Zedd d!Zd1d"d#Zed$d%d&Zed'd(d)Zeed*d+d,Zedd-d.d/ZdS )2CmfRFileTc                 C   sT   | j r
d S | jjr| jsd S | jds4| jdrDtjd | j S tjd | j S Nzobj/z/obj/zfiles/z
rdisk/fileis_diridZ
is_defined
startswithrequestZhost_urlselfr   r   r   _download_url   s    zCmfRFile._download_urlc                 C   sT   | j r
d S | jjr| jsd S | jds4| jdrDtjd | j S tjd | j S r   r   r   r   r   r   _upload_url%   s    zCmfRFile._upload_urlc                 C   s   | j S r   r   r   r   r   r   _code3   s    zCmfRFile._codec                 C   s   d S r   r   )clsr   r   r   gen_id7   s    zCmfRFile.gen_idc                 C   s   d S r   r   r   r   r   r   gen_code;   s    zCmfRFile.gen_codec                 C   s   | j j| jj| d S r   )dpdata_driverwriter   value)r   datar   r   r   r%   >   s    zCmfRFile.writec                 O   s   | j jj| jjf|| d S r   )r#   r$   stream_writer   r&   )r   argskwargsr   r   r   r(   A   s    zCmfRFile.stream_writec                 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   r.   D   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$   create_rfile_from_templateget)r    dirnamefilenamer   r   r   r   r5   I   s    z#CmfRFile.create_rfile_from_templatec              
   O   s  t jd}|rd}nt j d}|dkr|ddddd	}d
}| D ],\}}	| jjdd |	krD||} qqDtdnj|dkrd}|rd}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 d }| D ]b}| s,q| }t|}|d }|t k r`|  q|d }| j|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#rnt$j%&t j'd+\}}|( }nt j'd,}|t)t d- | jjd.}|| }|j*jdd/ |+t,| || | d0 t-j./| jj }|S )1Nz	127.0.0.1z127.0.0.1:8081/webdav/z/webdav/Z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
webdavs://z	webdav://Zkeynotez
keynote://Z	office365zoffice365://Z
googledocszgoogledocs://Z	activecrmzactivecrm://Zfolderzdav://u)   Неизвестный редактор: z/opt/rdisk/sessions/T)exist_okparentsexpr8   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   )r@   r?   r8   )r=   /)0r   Zhostr   itemsr   r&   splitformat
ValueError	ExceptiongZcurrent_personloginpathlibPathmkdirZiterdiris_fileZ	read_textujsonloadstimeunlinkr6   jwtlibdecodeZAPPZrsa_public_keyZ
export_keyr1   ZInvalidTokenErrorZloggingerrorr   ZconfigZIS_BOX_VERSIONr+   Z
CmfSessionZ
from_tokenZcookiesZrsa_sign_pack_jwtintparentZ
write_textdumpsurllibparseZquote)r   Zeditorr)   r*   Zis_localhostZ
webdav_urlZms_office_type_to_ext_mapZprotocolkvrK   Z	login_dirZ
found_pathpZp_textZp_datar?   r8   Zsession_nameZ	json_dataetokenZsecretZauthZ_sessionr@   urlr   r   r   gen_url_for_webdavN   s    








 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$   renameFileExistsErrorZ	cmf_alertstrr6   )r   Z	target_idr*   r_   r   r   r   rc      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   rD   ZTrashT)r1   rX   r   )r+   r   r6   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%SrD   )rh   r1   r&   datetimeZnowr   rc   )r   prefix_kwargsrf   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   )r1   r   )r
   objr1   r   r   
<listcomp>   s      z/CmfRFile.restore_from_trash.<locals>.<listcomp>Z	parent_idz==)filterc                 S   s   | j jS r   )r1   r&   )rm   r   r   r   <lambda>       z-CmfRFile.restore_from_trash.<locals>.<lambda>)rA   r   )	rh   r+   r   listr   r&   sortreverserc   )r    r1   Z
target_dirrk   rf   Zrfilesr   rn   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}|	 j
D ]J}tjj|jd}||j| j d|j t|j|j ||jd q<|S )ua   
        Возвращает список версий файла со ссылками
        st_ctimest_sizeZdownload_urlabspath)rK   z	?version=)versionra   rz   Zcreate_dateauthorry   )Zload_fieldsr+   r   r#   r$   r,   r-   r   r&   file_versionsversionsZ	CmfPersonsgetr|   appendr{   r   re   pathdateZ	isoformatry   )r   r~   r/   r0   verZ
cmf_authorr   r   r   get_versions   s    
zCmfRFile.get_versionsc                 C   sH   |   }|s|r|d S d S n&t|}|D ]}|d |kr*|  S q*d S )Nr<   r{   )r   rW   )r   r{   r~   r   r   r   r   get_version  s    zCmfRFile.get_version)r{   c                O   sL   t jjj }|| jj}| }|j	D ]}|j
|kr*||  qHq*d S r   )r+   r   r#   r$   r,   r-   r   r&   r}   r~   r{   remove)r   r{   r)   r*   r/   r0   Zversion_managerr   r   r   r   remove_version  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)r1   get_local_url)r   r   r   r   r   r   get_url_file  s    	zCmfRFile.get_url_file)r   rw   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.   Тип ОС не поддерживается )rJ   Zglobal_settingsZrdisk_windowsr&   Zrdisk_linuxZrdisk_macosrI   r   )r   r   resr   r   r   r   ,  s    zCmfRFile.get_local_urlr3   c                O   s   d S r   r   )r    r4   r)   r*   r   r   r   	sdesk_get9  s    zCmfRFile.sdesk_get)N)N)__name__
__module____qualname__ZTEXKOM_no_cachepropertyr   r   r   classmethodr!   r"   r%   r(   r.   r5   rb   rc   rh   rl   rv   rs   r   r   rW   r   re   r   r   r   r   r   r   r   r      s:   





~
	

	
	r   )r   )ri   rL   r   stringZtempfilerR   Zurllib.parserZ   r@   rT   rP   Zflaskr   Zcmf.includeZascii_lettersdigitsr	   r   Zcmfr+   Z	BaseModelr   r   r   r   r   <module>   s   
