
    9ih7                         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
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)Path)	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                      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&e' e(dd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._code8   s    wwr   c                      y r	    )clss    r   gen_idzCmfRFile.gen_id<   s    r   c                      y r	   r1   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   r9   zCmfRFile.writeC   s.    !!!$''--A$A&Ar   c                 p   t        t        j                  j                  t        j
                  | j                  j                              }t        j                  d|       5   | j                  j                  j                  | j                  j                  g|i | d d d        y # 1 sw Y   y xY w)NCmfLock:)r   ospathr   configS3_CACHE_PATHr$   r&   cmfutilCmfLockr7   r8   stream_write)r)   r:   r;   
cache_paths       r   rD   zCmfRFile.stream_writeF   s    "'',,v';';TWW]]KL
__x
|45 	M,DGG,,TWW]]LTLVL	M 	M 	Ms   $?B,,B5c                 t    | j                   j                  j                  | j                  j                        S r	   )r7   r8   tmp_readonly_pathr$   r&   r.   s    r   rG   zCmfRFile.tmp_readonly_pathK   s%    ww""44TWW]]CCr   c                     t         j                  j                  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   rL   zCmfRFile.get_fullviewN   sN    ""..557.!u!!42622r   c                 |    | j                   j                  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_templateS   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"   r?   exprW   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   rW   rZ   )r   r   )full_urlprotocolz/webdav/z-UX)6itemsr$   r&   splitlowerformat
ValueError	Exceptiongcurrent_personloginpathlibr   mkdirget_versioniterdiris_file	read_textujsonloadstimeunlinkrU   jwtlibdecodeAPPrsa_public_key
export_keyrQ   InvalidTokenErrorloggingerrorr   r@   IS_BOX_VERSIONrI   
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)   editorrY   rZ   r:   r;   ms_office_type_to_ext_mapr   kvr   	login_dirversion_path
found_pathpp_textp_datar   rW   session_name	json_dataetokensecretauth_sessionr   seconds	base_hrefurls                                 r   r   zCmfRFile.gen_url_for_webdavX   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	   )r7   r8   r   FileExistsError	cmf_alertr   rU   )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)rQ   r   r#   )rI   r   rU   rB   disable_aclsave)r2   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   rQ   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	   )rQ   r&   )objs    r   <lambda>z-CmfRFile.restore_from_trash.<locals>.<lambda>  s     r   T)r   reverser   )r   rI   r   rU   r$   r   listr&   rQ   r(   sort)
r2   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	   )rI   r   r7   r8   rJ   rK   r$   r&   )r)   rM   s     r   rK   zCmfRFile.get_rfile
  s7    ""..557tww}}--r   c                 @    | j                         j                          y r	   )rK   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=)rZ   r   r  r?   create_dateauthorr  )load_fieldsrI   r   r7   r8   rJ   rK   r$   r&   file_versionsversions	CmfPersonsgetr
  appendrZ   r+   r   r  r?   date	isoformatr  )r)   r  rM   rN   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   rZ   )r   r   )r)   rZ   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)rI   r   r7   r8   rJ   rK   r$   r&   r  r  	is_publicdump_versions_file)r)   rM   rN   version_managerlast_versions        r   
do_publishzCmfRFile.do_publish1  s    ""..557.--/''&//3!!!%**,r   rZ   c                8   t         j                  j                  j                  j	                         }|j                  | j                  j                        }|j                         }|j                  D ]$  }|j                  |k(  s|j                  |        y  y r	   )rI   r   r7   r8   rJ   rK   r$   r&   r  r  rZ   remove)r)   rZ   r:   r;   rM   rN   r  r  s           r   r   zCmfRFile.remove_version=  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)rQ   r   )r)   r  r"  s      r   r   zCmfRFile.get_url_fileF  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_url[  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   rS   c                     y r	   r1   )r2   rT   r:   r;   s       r   r    zCmfRFile.sdesk_geth  s     r   z@hourly)	only_once
system_jobschedulec                    t        j                          }t        j                  t        j                        D ]U  \  }}}|D ]H  }t        t        j                  j                  ||            }|j                  |j                  dz         }|j                  dk(  r[| r%|j                  d       |j                  d       	 t        j                  d|       5  ||j                         j                  z
  }|j                         j                  }	|	t        j                   kD  r$|j                  d       |j                  d       |t        j"                  kD  r$|j                  d       |j                  d       d d d        K X y # 1 sw Y   xY w# t$        $ r t&        j)                  d| d       Y w xY w)Nz.cacheT)
missing_okr=   zS3 cache file z not deleted due to lock)r   r>   walkr@   rA   r   r?   r   with_suffixsuffixr   rB   rC   statst_mtimer  S3_CACHE_MAX_BYTESS3_CACHE_LIFE_SECCmfGetLockErrorr   warning)
forcer   r   dirsfilesfile	file_pathcache_hit_path
time_delta	file_sizes
             r   clear_s3_cachezCmfRFile.clear_s3_cachem  s    iik!#)=)=!> 	ZD$ Z dD!9:	!*!6!6y7G7G(7R!S##x/$$$5"))T):Z 8I;)?@ 
C%(>+>+>+@+I+I%I
$-NN$4$<$<	$v'@'@@%,,,=*11T1B%(@(@@%,,,=*11T1B
CZ	Z
C 
C ' ZOOnYK?W$XYZs+   FB&FFFF"GG)NTr	   )F)*__name__
__module____qualname__TEXKOM_no_cache	api_allowcmfrI   	BaseModelapi_methodspropertyr+   _upload_urlr/   classmethodr3   r5   r9   rD   rG   rL   r   r   r   r   boolr   r   r   rK   r  r   r   r   r  r   r   r   r   r    staticmethodcmf_deferred_jobrB  r1   r   r   r   r      s   OI**&&22 6
 
K 
# 
#  K   BM
D3
 : : 9=d AF#  D  )S )c )bf ) )*.(d &
-S IC I*S S  %)   	JZ K Zr   r   )r   )r   r   r
   stringtempfiler   urllib.parser   r>   r   r   r   r   flaskr   cmf.includeascii_lettersdigitsr   r   rH  rI   rI  r   r1   r   r   <module>rX     sb           	      &--/DtZszz## tZr   