
    ch@                     v    d dl Z d dlZd dlZd dlmZ d dlmZ d dlZd dl	T  G d de
j        j                  ZdS )    N)BytesIO)Path)*c                        e Zd ZdZd fdZd Zedefd            Zedefd            Z	e
j        j        d	             Ze
j        j        defd
            Z xZS )FileViewz/<path:req_filename>returnNc                     t           j        | _        t          j                            | j                  st                              | j                   t                                                       d S )N)	config
UPLOAD_DIR
upload_dirospathexistsmakedirssuper__init__)self	__class__s    ./modules/files/views/index.pyr   zFileView.__init__   sU     +w~~do.. 	)KK(((    c                    t           j        dv rdnd}t                              d| dt          j                    |                    d          }|d         dk    rt                              d	|            d
S d}t          j        rZt           j        	                    d          }|rt                              |          }|st                              d|            |s5t          j                            |d                   }|                    d          rN|d         dv }|d                             d          }|s|r%t          j                            |d                   }|d         dk    r%t          j                            |d                   }t#          |          dk    s|d         dk    rt                              d|            d
S t                              |dg          }|st                              d|            d
S t          j        dk    rct)          |t*          j                  r5|                    |j                  r|j                                        S d
S |                                S t          j        dk    ri|dk    rct)          |t*          j                  r5|                    |j                  r|j                                        S d
S |                                S t          j        r<t          j        |k    r,t                              dt          j         d|            d
S t*          j                            |d
|j        j         |j!        d !          S )"u   
        Проверяем доступ к файлу
        g.sharelink_access_request = False
        g.sharelink_access_granted = False
        g.sharelink_access_obj = None
        )GETHEADreadwriteuA   Попытка анонимного доступа к файлу z, sharelink=/r   obju`   Анонимный доступ возможен только к файлам вложений: FNRefereru_   Не найден или не определён объект для вложения: referer=.meta)zpreview.docpreview.pdfpreview_img.pngthumbnail.jpgpreview.jpgfullviewexport%   :u;   Недопустимый путь для вложения: parentfieldsuc   Не найден или не определён объект для вложения: path_obj_id=sd_apipub_apizShare link for z, but attachment for attachments)access_levelraise_errorinitial_acl_keyobject_modelobject_field)"requestmethodgdebugsharelink_access_objsplitr
   PUBLIC_FILES_HACKheadersgetcmfutilget_url_path_objurllibparseunquoteendswith
startswithlenget_obj_by_id	api_scope
isinstancemodels
CmfCommentcheck_visibilityidr,   _sdesk_check_access_pub_check_writesharelink_access_requestCmfAccessListcheck_accessperm_effective_acl_idvalue
class_name)	r   req_filenamer2   
path_partsr   refererobj_id
is_previewis_fullviews	            r   _check_accesszFileView._check_access   s    ")?!B!Bvv 	
  GT`  G  Gno  oE  G  G  	H  	H  	H "'',,
a=E!!GG  F  xD  F  F  G  G  G5 # 	Eo)))44G 8..w77 E  D  {B  D  D  E  E  E 	\))*R.99Fw'' B'^/
(n77
CC B B#\11*R.AAF"~))--jn==6{{b  F3K3$6$6dVbddeeeu''z'BBC   G  E  G  G  H  H  Hu ;(""#v011 ''// <:99;;;u**,,,;)##(?(?#v011 ''// 9:66888u '')))% 	%,,\!*@\\WZ\\]]]u
 #00%55;#.& 1 ( ( 	(r   rW   c                 L   |                      d          }|d         }|d         }t          |          dk    s|d         dk    r|d         }|d         }t          j                            ||dd	g
          }|s)|dz  }t          j                            ||dd	g
          }|S )Nr         r)   r*   r+      z--url)namer,   r.   z
?version=1)r<   rG   rK   CmfAttachmentr?   )rW   rX   rZ   filenameattachs        r   _get_attachmentzFileView._get_attachmentq   s    !'',,
Aa=v;;"ss 2 2]F!!}H%))xPTV[})]]  	b$H)--8FTXZ_S`-aaFr   c                 r   t          |           }d }|j        dk    rt          |j        dz            }t          j                            |ddg          }t          j                            | ddg          }|r|st                              |          }|                    ddd	           t          j                            |ddg          }|                                }|	                    |
                                t          |j                             |                                 |S )
Nr#   r$   r,   abspathrN   r.   rN   r   F)backupmake_preview)r   rc   strr,   rK   CmfRFiler?   r   	get_rfile_process_imagetmp_readonly_pathri   delete)rW   req_filename_paththumbnail_rfilethumbnail_id	png_rfilerfiles         r   _fallback_previewzFileView._fallback_preview   s'    .."&77707/IJJL$o11\8U^J_1``O++|XyDY+ZZI  "(//\/"B"B%%cU%KKK"(/"5"5xYbNc"5"d"d!++--$$Y%@%@%B%BCH_D`D`aaar   c                    	 t           j                                         n# t          $ r Y nw xY w|                    d          st          d          |                     |          r|                     |          }|s#t           j        	                    |ddg          }|s@t           j        	                    t          j                            |          ddg          }|s	 t          j                            |                              d          }|d                             d          d	         }|                    d|d         d
t          |          dz                       t           j        	                    d                    |          ddg          }n1# t
          $ r$}t"                              |           Y d
}~nd
}~ww xY w|sB|                    d          r-|                     |          }|                    ddg          }|s=|                    d          s(d| }t           j        	                    |ddg          }|st          d|           t*          j        	                    d          }|r|j        dv s|j                            d          rkt           j        	                    |j        j        j                            dd                    }|                    |          }	|	d          d|j         }
n|                    |          }	|	d         }
t           j        	                    |
ddg          }t          j                            d|           }t           j                            |          }|j        j        }|r|j        }t@          j!        "                    |#                                d|          S tI          ddi          S )u{   
        Возвращаем уже сохраненный файл
        :param req_filename:
        :return:
        obj/   Неверный доступ!r,   ri   rj   r   r_   r+   r   Nra   r-   z/obj/u   Файл не найден: version)r#   r"   zfullview.pdfr$   r%   r&   r     rk   r   ./files/)rb   T)as_attachmentdownload_nameerror   Нет доступа)%rK   rR   activate_admin_modeCmfPermissionErrorrF   	Exceptionr]   ry   ro   r?   rB   rC   unquote_plusr<   insertrG   joinr9   r:   rg   rp   r7   argsrc   r,   rN   rU   replaceget_versionquoterd   sgetflaskhelpers	send_filerr   jsonify)r   rW   	cmf_rfilepartsrV   erf   r}   parent_rfilerfile_version	file_pathrb   
attachmentr   s                 r   r?   zFileView.get   s   (	 446666! 	 	 	D	
 &&v.. 	><===l++ 3	?..|<<I _"O//<S\H]/^^	 z"O//6<3L3L\3Z3Zdlnwcx/yy	 "L55lCCII#NNE!&q!4!4Q!7JLLE!H-Ac*oo.A-A$BCCC & 3 3sxxPXZcOd 3 e eII    GGAJJJJJJJJ K!8!8!@!@ K--l;;",,Xy4I,JJ	 _\%<%<V%D%D _5|55"O//<S\H]/^^	 O M| M MNNNl&&y11G 
\>%www^..z:: x#)?#6#6):J:M:S:[:[\cdf:g:g#6#h#hL$0$<$<W$E$EM#0#8 K K9> K KII$-$9$9'$B$BM -f 5I"O//9hPYEZ/[[	,$$%=|%=%=>>C-22s2;;J%N0M 0 *=**++--"+ +    G%<=>>>s%   ! 
..*B=F( (
G2GGc                 8   |                     d          st          d          	 t          j                                         n# t
          $ r Y nw xY w|                     |          st          d          t          j        	                    d          }|st          d          t          j                            d|           }t          j        	                    |dg          }|st          d	          S t          j        j        r|                                }t%          |          }t'          j                    5 }|                    |           |                                 t.                              |j        |d
          s/t5          d           t7          ddd          }|cddd           S 	 ddd           n# 1 swxY w Y   	 |                                r|                    |           nA|                                r|                    |           n|                     |d           n;# t          $ r.}tC          j"        |           |#                                  d}~ww xY wt7          d|j$        j%        d          S )u   
        Сохраняем файл в объекте

        :param req_filename: Путь к сохраняемому файлу

        :return: Ответ клиенту
        :rtype: Response
        r{   r|   r   fileu   Не передан файлr   r   )rb   r.   u.   Сначала создайте CmfAttachment!POST)req_urlr8   u'   Недопустимый контент	Forbidden)resultr   NF)smart_backupOK)r   
attach_url)&rF   r   rK   rR   r   r   r]   r7   filesr?   rB   rC   r   rd   r9   global_settingsicap_enabler   r   tempfileNamedTemporaryFiler   flushr@   
icap_checkrc   	cmf_alertr   sdesk_check_writesdesk_upload_stream_filepub_check_writepub_upload_stream_fileupload_stream_filelogging	exceptionrs   rb   rU   )	r   rW   	load_filerb   r   content	temp_fileresponser   s	            r   postzFileView.post   s    &&v.. 	><===	 446666! 	 	 	D	 !!,// 	53444 M%%f--	 	<:;;;l  !9<!9!9::)--#se-DD
 	OMNNN ( 	$nn&&G((I,.. 	$) (((!!!))).#f)UU $GHHH&+Hq'r'rssH#	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$
$	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$
	++-- M33I>>>>++-- M11)<<<<--ie-LLL 	 	 	a   	
 $jn6JKKLLLs=   A 
AAA.GGGA+I 
I=)I88I=)r   N)__name__
__module____qualname____url__r   r]   staticmethodrn   rg   ry   cmfviewsactionr?   r   __classcell__)r   s   @r   r   r      s       $G     X( X( X(t c    \     \( 	YO? O? O?b 	YBM BM BM BM BM BM BM BM BMr   r   )r   r   urllib.parserB   ior   pathlibr   shutilcmf.includer   r   BaseViewr    r   r   <module>r      s                          _M _M _M _M _Msy! _M _M _M _M _Mr   