
    Y~h/                         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   ZddZ G d dej        j                  ZdS )	    N)	send_file)*   c                 Z    d                     d t          |           D                       S )N c              3   H   K   | ]}t          j        t                    V  d S N)secretschoicealphabet).0_s     ./modules/rdisk/models/index.py	<genexpr>zgen_token.<locals>.<genexpr>   s,      CC7>(++CCCCCC    )joinrange)lengths    r   	gen_tokenr      s)    77CCU6]]CCCCCCr   c                   n   e Zd ZdZdZej        j        j        g dz   Ze	d             Z
e
Ze	d             Zed             Zd Zd Zd Zd	 Zd
 Zed             ZddddZd Zed             Zd!dZed             Zd Zd ZdefdZd!dZd Zde fdZ!de"fdZ#de"de"fdZ$eddd             Z%dS )"CmfRFileT)
rename
favouritesgen_url_for_webdavcreate_rfile_from_templateget_versionsremove_versionr   get_url_fileget_local_url	sdesk_getc                     | 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id
is_definedvaluelstrip
startswith)selfid_s     r   _download_urlzCmfRFile._download_url'   sq    ; 	4w! 	 	4gm""3''>>&!! 	"!C>>!"S"""r   c                     | j         S r	   r$   r)   s    r   _codezCmfRFile._code6   s	    wr   c                     d S r	    )clss    r   gen_idzCmfRFile.gen_id:   s    tr   c                     d S r	   r1   r.   s    r   gen_codezCmfRFile.gen_code>   s    tr   c                 P     | j         j        j        | j        j        g|R i | d S r	   )dpdata_driverwriter$   r&   r)   argskwargss      r   r9   zCmfRFile.writeA   s4    !!$'-A$AAA&AAAAAr   c                 P     | j         j        j        | j        j        g|R i | d S r	   )r7   r8   stream_writer$   r&   r:   s      r   r>   zCmfRFile.stream_writeD   s4    ((HHHHHHHHHr   c                 T    | j         j                            | j        j                  S r	   )r7   r8   tmp_readonly_pathr$   r&   r.   s    r   r@   zCmfRFile.tmp_readonly_pathG   s    w"44TW]CCCr   c                     t           j        j        j                                        }|                    | j        j                  } |j        |i |S r	   )	modelsr   r7   r8   get_rd	get_rfiler$   r&   get_fullview)r)   r;   r<   rdiskrfiles        r   rE   zCmfRFile.get_fullviewJ   sH    ".5577..!u!426222r   c                 x    | j         j                            |||           }|                     |g d          S )N)model)r$   namecodefields)r7   r8   r   get)r2   dirnamefilenamer$   s       r   r   z#CmfRFile.create_rfile_from_templateO   s?    V::7HTW:XXwwr"8"8"8w999r   RWN)ux_modeversionc                `	   |dk    rddddd}|dk    rd}nd	}|                                 D ]U\  }}	| j        j                            d
          d                                         |	v r|                    |          } nVt          d          nH|dk    rd}n?|dk    rd}n6|dk    rd}n-|dk    rd}n$|dk    rd}n|dk    rd}nt          d|           t          j	        j
        j        }
t          j        d|
           }|                    dd           |rd|                     |          d         z   }nd| j        j        z   }d }|                                D ]}|                                s|                                }t%          j        |          }|d         }|t)          j                    k     r|                                 s|                    d          }||k    r|}d }|rt%          j        |                                          }|d         r	 t/          j        |d         t2          j                                        ddg            |j        }n{# t.          j        $ r:}t<                              d!||           |                                 Y d }~n7d }~ww xY wt<                              d"|           |                                 |stA          d#          }d$}d%|
 d&| d&| }tB          j"        rVtF          j$        %                    tL          j'                            d'          d(          \  }}|(                                }ntL          j'                            d)          }|tS          t)          j                    d*z             ||d+}||z  }|j*                            d,           |+                    t%          j,        |                     t[          t\          j.        /                                0                                                              d
          d-         d.d          }tc          d|/          }| d0| d1| | dtd          j3        4                    | j        j        5                    d                     }|S )2Nmsoffice)xlsxltxlmxlsmxlsxxltmxltxods)	ppspptpptmpptxpotmpotxppsmppsxodp)	docdotdocmdocxdotmdotxodthtmlrtf)vsdvsdmvsdxvstmvstxodg)excel
powerpointwordvisioROzms-{}:ofv|u|httpszms-{}:ofe|u|https.uF   Не могу открыть файл в пакете Microsoft Officelibreofficewebdavskeynote	office365
googledocs	activecrmfolderdavu)   Неизвестный редактор: z/opt/rdisk/sessions/T)exist_okparentsr"   pathexprP   jwtRS256HS256)key
algorithmsz'Invalid webdav session token %s from %sz"Empty webdav session token from %sr   W   s_r   session_token)require_scopesaccess_token   )r   r   rP   rS   )r   r   )full_urlprotocolz/webdav/z-UX)6itemsr$   r&   splitlowerformat
ValueError	Exceptiongcurrent_personloginpathlibPathmkdirget_versioniterdiris_file	read_textujsonloadstimeunlinkrN   jwtlibdecodeAPPrsa_public_key
export_keyrJ   InvalidTokenErrorloggingerrorr   configIS_BOX_VERSIONrB   
CmfSession
from_tokenrequestcookiesrsa_sign_pack_jwtintparent
write_textdumpsstrdatetimenow	timestampapp_base_hrefurllibparsequoter'   )r)   editorrR   rS   r;   r<   ms_office_type_to_ext_mapr   kvr   	login_dirversion_path
found_pathpp_textp_datar   rP   session_name	json_dataetokensecretauth_sessionr   seconds	base_hrefurls                                 r   r   zCmfRFile.gen_url_for_webdavT   s   ZU

 H1) )%4 $..17799 k k17=&&s++B/55771<<'q11HE = !!ijjj  }$$ HHy   HH{"""HH|###HH{"""HHxHHPPPQQQ &, L!?!?!?@@	t444 	/!1!1'!:!:6!BBLL.L
""$$ 	 	A99;; [[]]F[((F-CTY[[  


zz*--Hx''
 	$J$8$8$:$:;;I 
$(M)E"28J8U8U8W8Welnudvwwww#-?LL/ ( ( (MM"KQPZ[[[%%''''''''(
 BJOOO!!###  	1aLLE F8888888L $ :!'!2!=!=go>Q>QRa>b>bsw!=!x!xh,,..o)).9949;;+,,("	 I L(AHNNDN)))LLY//000 h'++--7799::@@EEaHM!4(CCC	wwLwwWwgwwHZHZ[_[b[h[o[ops[t[tHuHuww
s   )AI, ,J5;0J00J5c                     	 | j         j                            | |           n3# t          $ r&}t	          t          |                     Y d }~nd }~ww xY w|                     |          S r	   )r7   r8   r   FileExistsError	cmf_alertr   rN   )r)   	target_idr<   r   s       r   r   zCmfRFile.rename   sy    	G&&tY7777 	 	 	c!ff	xx	"""s    # 
AAAc                 L   t           j                            d          }|st                                          5  t           j                            d          }t                               d|d          }|                                 d d d            n# 1 swxY w Y   |S )Nz/Trashr-   r"   TrashT)rJ   r   r#   )rB   r   rN   cmfutildisable_aclsave)r2   trashroots      r   ensure_trashzCmfRFile.ensure_trash   s    ##x#00 	$$&&  **3//WT$OO

               s   ABB Bc                     |                                  }| j        j         dt          j                                        d}|r| d| }|j         d| }|                     |           d S )Nr   z%Y-%m-%d-%H%M%Sr"   )r   rJ   r&   r   r   r$   r   )r)   prefix_kwargsr   new_ids        r   move_to_trashzCmfRFile.move_to_trash   s    !!##IOOOh&7&;&;&=&=OOO 	*))))FH''v''Fr   c                 B   |                                  }fdt          j                            dd|j        j        g          D             }|rN|                    d            |                                 |d                             |           |d         S d S )Nc                 N    g | ]!}|j                              d           |"S )r   )rJ   r(   )r   objrJ   s     r   
<listcomp>z/CmfRFile.restore_from_trash.<locals>.<listcomp>   sg      F  F  F#ehemexex  }A  zD  zD  zD  fE  fE  F#  F  F  Fr   	parent_idz==)filterc                     | j         j        S r	   )rJ   r&   )r   s    r   <lambda>z-CmfRFile.restore_from_trash.<locals>.<lambda>   s
     r   )r   r   )	r   rB   r   listr$   r&   sortreverser   )r2   rJ   
target_dirr   r   rfiless    `    r   restore_from_trashzCmfRFile.restore_from_trash   s      "" F  F  F  F!5!5k4QVQYQ_=`!5!a!a  F  F  F 	KK66K777NN1IZ(((!9		 	r   c                     t           j        j        j                                        }|                    | j        j                  S r	   )rB   r   r7   r8   rC   rD   r$   r&   )r)   rF   s     r   rD   zCmfRFile.get_rfile   s1    ".5577tw}---r   c                 R    |                                                                   d S r	   )rD   make_previewr.   s    r   r   zCmfRFile.make_preview   s$    %%'''''r   returnc                 *   |                      g d           g }t          j        j        j                                        }|                    | j        j                  }|	                                j
        D ]}t          j                            |j                  }|                    |j        | j         d|j         t#          |j                  t#          |j                  |j                                        ||j        d           |S )ua   
        Возвращает список версий файла со ссылками
        )st_ctimest_sizedownload_urlabspath)r   z	?version=)rS   r   r  r   create_dateauthorr   )load_fieldsrB   r   r7   r8   rC   rD   r$   r&   file_versionsversions	CmfPersonsgetr  appendrS   r+   r   r  r   date	isoformatr   )r)   r  rF   rG   ver
cmf_authors         r   r   zCmfRFile.get_versions  s    	KKKLLL".5577..&&((1 	6 	6C)..SZ.@@JOO'+'9$Q$QCK$Q$Q(+CK(8(8%(]],/H,>,>,@,@'1(+5 5 6 6 6 6 r   c                     |                                  }|s|r|d         S d S t          |          }|D ]}|d         |k    r|c S d S )Nr|   rS   )r   r   )r)   rS   r  r  s       r   r   zCmfRFile.get_version  ss    $$&& 		 |#t'llG  y>W,,JJJ - r   c                 0   t           j        j        j                                        }|                    | j        j                  }|                                }|j	        sd S |j	        d         }|j
        rd S d|_
        |                                 d S )Nr|   T)rB   r   r7   r8   rC   rD   r$   r&   r  r  	is_publicdump_versions_file)r)   rF   rG   version_managerlast_versions        r   
do_publishzCmfRFile.do_publish"  s    ".5577..--//' 	F&/3! 	F!%**,,,,,r   rS   c                   t           j        j        j                                        }|                    | j        j                  }|                                }|j	        D ]%}|j
        |k    r|                    |            d S &d S r	   )rB   r   r7   r8   rC   rD   r$   r&   r  r  rS   remove)r)   rS   r;   r<   rF   rG   r  r  s           r   r   zCmfRFile.remove_version.  s    ".5577..--//"+ 	 	C{g%%&&s+++ &	 	r   os_typec                     |dk    r.d| j          d|                     |           d}| j          d|dS d|                     |           }| j          d|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.url)rJ   r   )r)   r  r  s      r   r   zCmfRFile.get_url_file7  s    
 g i	  ''00  G %)I!7!7!7GLLL;!//88; ;G$(I!3!3!3HHHr   c                    d}|dk    r|t           j        j        j        z  }nR|dk    r|t           j        j        j        z  }n2|dk    r|t           j        j        j        z  }nt          d|           || j        j        z  }|S )Nzfile://windowsr  macosu.   Тип ОС не поддерживается )r   global_settingsrdisk_windowsr&   rdisk_linuxrdisk_macosr   r$   )r)   r  ress      r   r   zCmfRFile.get_local_urlL  s    i1$288CC1$066CC1$066CCVWVVWWWtw}
r   rL   c                    d S r	   r1   )r2   rM   r;   r<   s       r   r    zCmfRFile.sdesk_getY  s	     tr   r	   )&__name__
__module____qualname__TEXKOM_no_cache	api_allowcmfrB   	BaseModelapi_methodspropertyr+   _upload_urlr/   classmethodr3   r5   r9   r>   r@   rE   r   r   r   r   r   r   rD   r   r   r   r   r  r   r   r   r   r   r    r1   r   r   r   r      sd       OI*&2 6
 6
 6
 
K 
# 
# X
#  K  X   [  B B BI I ID D D3 3 3
 : : [: 9=d A A A A AF# # #   [      [. . .
( ( (d    &   
- 
- 
-S    IC I I I I*S S     %)     [  r   r   )r   )r   r   r
   stringtempfiler   urllib.parser   r   r   r   flaskr   cmf.includeascii_lettersdigitsr   r   r*  rB   r+  r   r1   r   r   <module>r7     s                             &-/D D D DE E E E Esz# E E E E Er   