
    h}C                     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!        |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_id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;#.fl&	 1 ( ( 	(r   rX   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=   rH   rL   CmfAttachmentr@   )rX   rY   r[   filenameattachs        r   _get_attachmentzFileView._get_attachmentr   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rO   r.   rO   r   F)backupmake_preview)r   rd   strr,   rL   CmfRFiler@   r   	get_rfile_process_imagetmp_readonly_pathrj   delete)rX   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                 H   	 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                            t          j                            d|                     }|r|j        p|j        j        }d
}|j        j                             d          \  }}}|dv rd}tB          j"        #                    |$                                ||          S tK          ddi          S )u{   
        Возвращаем уже сохраненный файл
        :param req_filename:
        :return:
        obj/   Неверный доступ!r,   rj   rk   r   r`   r+   r   Nrb   r-   z/obj/u   Файл не найден: version)r#   r"   zfullview.pdfr$   r%   r&   r     rl   r   ./files/)rc   )gztgzzapplication/octet-stream)download_namemimetypeerror   Нет доступа)&rL   rS   activate_admin_modeCmfPermissionErrorrG   	Exceptionr^   rz   rp   r@   rC   rD   unquote_plusr=   insertrH   joinr:   r;   rh   rq   r8   argsrd   r,   rO   rV   replaceget_versionre   sgetquote
rpartitionflaskhelpers	send_filers   jsonify)r   rX   	cmf_rfilepartsrW   erg   r~   parent_rfilerfile_version	file_path
attachmentr   r   _file_exts                   r   r@   zFileView.get   s8   (	 446666! 	 	 	D	
 &&v.. 	><===l++ <	?..|<<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/[[	  -22v|7I7IJbT`JbJb7c7c2ddJ&::?Rin>RM H&^1<<SAANAq(=((5 =**++--+! +    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   )rc   r.   u.   Сначала создайте CmfAttachment!POST)req_urlr9   u'   Недопустимый контент	Forbidden)resultr   NF)smart_backupOK)r   
attach_url)&rG   r   rL   rS   r   r   r^   r8   filesr@   rC   rD   r   re   r:   global_settingsicap_enabler   r   tempfileNamedTemporaryFiler   flushrA   
icap_checkrd   	cmf_alertr   sdesk_check_writesdesk_upload_stream_filepub_check_writepub_upload_stream_fileupload_stream_filelogging	exceptionrt   rc   rV   )	r   rX   	load_filerc   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^   staticmethodro   rh   rz   cmfviewsactionr@   r   __classcell__)r   s   @r   r   r      s       $G     Y( Y( Y(v c    \     \( 	YX? X? X?t 	YBM BM BM BM BM BM BM BM BMr   r   )r   r   urllib.parserC   ior   pathlibr   shutilcmf.includer   r   BaseViewr    r   r   <module>r      s                          iM iM iM iM iMsy! iM iM iM iM iMr   