
    sh81                         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 ej                  ej                  z   ZddZ G d dej&                  j(                        Zy)    N)	send_file)*c                 D    dj                  d t        |       D              S )N c              3   N   K   | ]  }t        j                  t                y wN)secretschoicealphabet).0_s     ./modules/rdisk/models/index.py	<genexpr>zgen_token.<locals>.<genexpr>   s     C7>>(+Cs   #%)joinrange)lengths    r   	gen_tokenr      s    77CU6]CCC    c                   v   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efdZed%dededdf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&y)&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y | j                  j                  r| j                  sy | j                  j                  j	                  d      }|j                  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'   s_    ;;ww!!ggmm""3'>>&!C5>!SE""r   c                     | j                   S r   r#   r(   s    r   _codezCmfRFile._code6   s    wwr   c                      y r    )clss    r   gen_idzCmfRFile.gen_id:   s    r   c                      y r   r0   r-   s    r   gen_codezCmfRFile.gen_code>   s    r   c                      | j                   j                  j                  | j                  j                  g|i | y r   )dpdata_driverwriter#   r%   r(   argskwargss      r   r8   zCmfRFile.writeA   s.    !!!$''--A$A&Ar   c                      | j                   j                  j                  | j                  j                  g|i | y r   )r6   r7   stream_writer#   r%   r9   s      r   r=   zCmfRFile.stream_writeD   s.    (((HHHr   c                 t    | j                   j                  j                  | j                  j                        S r   )r6   r7   tmp_readonly_pathr#   r%   r-   s    r   r?   zCmfRFile.tmp_readonly_pathG   s%    ww""44TWW]]CCr   c                     t         j                  j                  j                  j	                         }|j                  | j                  j                        } |j                  |i |S r   )	modelsr   r6   r7   get_rd	get_rfiler#   r%   get_fullview)r(   r:   r;   rdiskrfiles        r   rD   zCmfRFile.get_fullviewJ   sN    ""..557.!u!!42622r   c                 |    | j                   j                  j                  |||       }| j                  |g d      S )N)model)r#   namecodefields)r6   r7   r   get)r1   dirnamefilenamer#   s       r   r   z#CmfRFile.create_rfile_from_templateO   s8    VV::7HTW:Xwwr"8w99r   RWN)ux_modeversionc                   |dk(  rddddd}|dk(  rd}nd	}|j                         D ]P  \  }}	| j                  j                  j                  d
      d   j	                         |	v s?|j                  |      } nJ t        d      |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|dk(  rd}nt        d|       t        j                  j                  j                  }
t        j                  d|
       }|j                  dd       |rd| j                  |      d   z   }nd| j                  j                  z   }d }|j                         D ]~  }|j!                         s|j#                         }t%        j&                  |      }|d   }|t)        j(                         k  r|j+                          f|j-                  d      }||k(  s}|} d }|rt%        j&                  |j#                               }|d   rG	 t/        j0                  |d   t2        j4                  j7                         ddg        |j8                  }n&t<        j?                  d"|       |j+                          |stA        d#      }d$}d%|
 d&| d&| }tB        jD                  rRtF        jH                  jK                  tL        jN                  j-                  d'      d(      \  }}|jQ                         }ntL        jN                  j-                  d)      }|tS        t)        j(                         d*z         ||d+}||z  }|jT                  j                  d,       |jW                  t%        jX                  |             t[        t\        j\                  j_                         ja                               j                  d
      d-   d.d  }tc        d|/      }| d0| d1| | dtd        jf                  ji                  | j                  j                  jk                  d             }|S # t.        j:                  $ r2}t<        j?                  d!||       |j+                          Y d }~d }~ww xY w)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exprO   jwtRS256HS256)key
algorithmsz'Invalid webdav session token %s from %sz"Empty webdav session token from %s   W   s_r   session_token)require_scopesaccess_token   )r   r   rO   rR   )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unlinkrM   jwtlibdecodeAPPrsa_public_key
export_keyrI   InvalidTokenErrorloggingerrorr   configIS_BOX_VERSIONrA   
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(   editorrQ   rR   r:   r;   ms_office_type_to_ext_mapr   kvr   	login_dirversion_path
found_pathpp_textp_datar   rO   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 k177==&&s+B/5571<'q1Hk
 !!ijj}$ Hy  H{""H|##H{""HxHGxPQQ  &&,, LL#7w!?@	t4!1!1'!:6!BBL.L
""$ 	A99;[[]F[[(F-CTYY[ 
zz*-Hx'
	  J$8$8$:;I(MM)E"28J8J8U8U8Welnudvw#-??L BJO!!# aLE Fwawax8L $$!'!2!2!=!=goo>Q>QRa>bsw!=!xh,,.oo)).9499;+,("	I L(AHHNNDN)LLY/0 h''++-779:@@EaHM!4(C	8L>WIgYaHZHZ[_[b[b[h[h[o[ops[tHuGvw
M // (MM"KQPZ[%%''(s   AP Q$2'QQ$c                     	 | j                   j                  j                  | |       | j                  |      S # t        $ r}t	        t        |             Y d }~3d }~ww xY wr   )r6   r7   r   FileExistsError	cmf_alertr   rM   )r(   	target_idr;   r   s       r   r   zCmfRFile.rename   sS    	GG&&tY7 xx	""  	c!f	s   &9 	A AA c                 0   t         j                  j                  d      }|sft        j	                         5  t         j                  j                  d      }t         j                  d|d      }|j                          d d d        |S |S # 1 sw Y   |S xY w)Nz/Trashr,   r!   TrashT)rI   r   r"   )rA   r   rM   cmfutildisable_aclsave)r1   trashroots      r   ensure_trashzCmfRFile.ensure_trash   s{    ##x#0$$& **3/WT$O

 u	 s   ABB	is_renamec                    | j                         }|r8| j                  j                   dt        j                  j	                         dn| j                  j                  }|r| d| }|j
                   d| }| j                  |       y )Nr   z%Y-%m-%d-%H%M%Sr!   )r   rI   r%   r   r   r#   r   )r(   prefixr   r   new_ids        r   move_to_trashzCmfRFile.move_to_trash   s    !!#S\DIIOO$Ah&7&7&;&;&=o%NObfbkbkbqbqxq)FHH:Qvh'Fr   name_before
target_dirreturnc                 ,   | j                         }t        j                  j                  |j                   d|       }|r|j                  |       y t        j                  j                  dd|j                  j                  g      }|D cg c]P  }|j                  j                  j                  |      s'|r'|j                  j                  j                  |      r|R }	}|	r)|	j                  d d       |	d   j                  |       y y c c}w )	Nr!   	parent_idz==)filterc                 .    | j                   j                  S r   )rI   r%   )objs    r   <lambda>z-CmfRFile.restore_from_trash.<locals>.<lambda>  s     r   T)r   reverser   )r   rA   r   rM   r#   r   listr%   rI   r'   sort)
r1   r   r   
name_after_kwargsr   	trash_obj
trash_objsr   rfiless
             r   restore_from_trashzCmfRFile.restore_from_trash   s      "OO''588*Ak](CD	Z( __))+tUXX^^1T)U
 &
xx~~((5sxx~~88D 
 

 KK6KE1IZ( 
s   ADc                     t         j                  j                  j                  j	                         }|j                  | j                  j                        S r   )rA   r   r6   r7   rB   rC   r#   r%   )r(   rE   s     r   rC   zCmfRFile.get_rfile  s7    ""..557tww}}--r   c                 @    | j                         j                          y r   )rC   make_previewr-   s    r   r   zCmfRFile.make_preview
  s    %%'r   c                 x   | j                  g d       g }t        j                  j                  j                  j                         }|j                  | j                  j                        }|j                         j                  D ]  }t        j                  j                  |j                        }|j                  |j                  | j                    d|j                   t#        |j$                        t#        |j&                        |j(                  j+                         ||j,                  d        |S )ua   
        Возвращает список версий файла со ссылками
        )st_ctimest_sizedownload_urlabspath)r   z	?version=)rR   r   r  r   create_dateauthorr  )load_fieldsrA   r   r6   r7   rB   rC   r#   r%   file_versionsversions	CmfPersonsgetr  appendrR   r*   r   r  r   date	isoformatr  )r(   r	  rE   rF   ver
cmf_authors         r   r   zCmfRFile.get_versions  s     	KL""..557.&&(11 	6C))..SZZ.@JOO'+'9'9&:)CKK=$Q(+CKK(8%(],/HH,>,>,@'1(+5 6	6 r   c                 t    | j                         }|s|r|d   S y t        |      }|D ]  }|d   |k(  s|c S  y )Nr{   rR   )r   r   )r(   rR   r	  r  s       r   r   zCmfRFile.get_version   sL    $$&|#'lG y>W,Jr   c                 R   t         j                  j                  j                  j	                         }|j                  | j                  j                        }|j                         }|j                  sy |j                  d   }|j                  ry d|_
        |j                          y )Nr{   T)rA   r   r6   r7   rB   rC   r#   r%   r  r	  	is_publicdump_versions_file)r(   rE   rF   version_managerlast_versions        r   
do_publishzCmfRFile.do_publish-  s    ""..557.--/''&//3!!!%**,r   rR   c                8   t         j                  j                  j                  j	                         }|j                  | j                  j                        }|j                         }|j                  D ]$  }|j                  |k(  s|j                  |        y  y r   )rA   r   r6   r7   rB   rC   r#   r%   r  r	  rR   remove)r(   rR   r:   r;   rE   rF   r  r  s           r   r   zCmfRFile.remove_version9  sv    ""..557.--/"++ 	C{{g%&&s+	r   os_typec                     |dk(  r4d| j                    d| j                  |       d}| j                    d|dS d| j                  |       }| 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)rI   r   )r(   r  r  s      r   r   zCmfRFile.get_url_fileB  s    
 g ii[ ! ''01 2G %)II;h!7GLL!//89;G$(II;d!3HHr   c                 f   d}|dk(  r(|t         j                  j                  j                  z  }nh|dk(  r(|t         j                  j                  j                  z  }n;|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_urlW  s    i1$$22888C1$$00666C1$$00666CLWIVWWtww}}
r   rK   c                     y r   r0   )r1   rL   r:   r;   s       r   r   zCmfRFile.sdesk_getd  s     r   )NTr   )'__name__
__module____qualname__TEXKOM_no_cache	api_allowcmfrA   	BaseModelapi_methodspropertyr*   _upload_urlr.   classmethodr2   r4   r8   r=   r?   rD   r   r   r   r   boolr   r   r   rC   r   r   r   r   r  r   r   r   r   r   r0   r   r   r   r      s]   OI**&&22 6
 
K 
# 
#  K   BID3
 : : 9=d AF#  D  )S )c )bf ) )*.(d &
-S IC I*S S  %)  r   r   )r   )r   r   r	   stringtempfiler   urllib.parser   r   r   r   flaskr   cmf.includeascii_lettersdigitsr   r   r-  rA   r.  r   r0   r   r   <module>r;     sZ               &--/DPszz## Pr   