
    [IiC                         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	  G d de
j                  j                        Zy)    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>c                     t         j                  | _        t        j                  j                  | j                        st        j                  | j                         t        | !          y )N)	config
UPLOAD_DIR
upload_dirospathexistsmakedirssuper__init__)self	__class__s    ./modules/files/views/index.pyr   zFileView.__init__   s?     ++ww~~doo.KK(    c                    t         j                  dv rdnd}t        j                  d| dt        j                          |j                  d      }|d   dk7  rt        j                  d	|        y
d}t        j                  rPt         j                  j                  d      }|rt        j                  |      }|st        j                  d|        |s t        j                  j                  |d         }|j                  d      rA|d   dv }|d   j!                  d      }|s|r"t        j                  j                  |d         }|d   dk(  r"t        j                  j                  |d         }t#        |      dk  s|d   dk7  rt        j                  d|        y
t        j%                  |dg      }|st        j                  d|        y
t        j&                  dk(  r`t)        |t*        j,                        r6|j/                  |j0                        r|j2                  j5                         S y
|j5                         S t        j&                  dk(  re|dk(  r`t)        |t*        j,                        r6|j/                  |j0                        r|j2                  j7                         S y
|j7                         S t        j8                  r=t        j                  |k7  r*t        j                  dt        j                   d|        y
t*        j:                  j=                  |d
|j>                  j@                  |jB                  |j0                  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_filenamer1   
path_partsr   refererobj_id
is_previewis_fullviews	            r   _check_accesszFileView._check_access   s$    ")?!Bv 	
ST`Saamno  oE  oE  nF  G  	H "'',
a=E!GGv  xD  wE  F  G ##oo)))4G..w7y  {B  zC  D  E\\))*R.9Fw''^/
(n77
C#\\11*R.AF"~)--jn=6{b F3K3$6UVbUcde''z'BC}  E  ~F  G  H ;;("#v001''/::99;;**,,;;)#(?#v001''/::6688 ''))%%%%,/!*@*@)AAVWZV[\]
 ##00%555;;#..ffll&	 1 ( 	(r   rW   c                    | j                  d      }|d   }|d   }t        |      dk  s|d   dk7  r
|d   }|d   }t        j                  j	                  ||dd	g
      }|s)|dz  }t        j                  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_attachmentr   s    !'',
Aa=v;"ss 2]F!!}H%%))xPTV[})] $H))--8FTXZ_S`-aFr   c                 D   t        |       }d }|j                  dk(  rt        |j                  dz        }t        j
                  j                  |ddg      }t        j
                  j                  | ddg      }|r|st        j                  |      }|j                  ddd	       t        j
                  j                  |ddg      }|j                         }|j                  |j                         t        |j                               |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077/IJL$oo11\8U^J_1`O++|XyDY+ZI"(//\/"B%%cU%K"(//"5"5xYbNc"5"d!++-$$Y%@%@%BCH_H_D`ar   c                    	 t         j                  j                          |j	                  d      st        d      | j                  |      rY| j                  |      }|s#t         j                  j                  |ddg      }|s@t         j                  j                  t        j                  j                  |      ddg      }|s	 t        j                  j                  |      j                  d      }|d   j                  d      d	   }|j                  d|d   d
t        |      dz           t         j                  j                  dj!                  |      ddg      }|s6|j	                  d      r%| j'                  |      }|j)                  ddg      }|s9|j	                  d      s(d| }t         j                  j                  |ddg      }|st        d|       t*        j,                  j                  d      }|r|j.                  dv s|j.                  j	                  d      rtt         j                  j                  |j0                  j2                  j4                  j7                  dd            }|j9                  |      }	|	d    d|j.                   }
n|j9                  |      }	|	d   }
t         j                  j                  |
ddg      }t         j:                  j=                  t        j                  j?                  d|             }|xr |j.                  xs |j.                  j4                  }d
}|j.                  j4                  jA                  d      \  }}}|dv rd}tB        jD                  jG                  |jI                         ||      S tK        ddi      S # t        $ r Y w xY w# t
        $ r }t"        j%                  |       Y d
}~d
}~ww xY w)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   )gztgzzapplication/octet-stream)download_namemimetype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_versionrd   sgetquote
rpartitionflaskhelpers	send_filerr   jsonify)r   rW   	cmf_rfilepartsrV   erf   r}   parent_rfilerfile_version	file_path
attachmentr   r   _file_exts                   r   r?   zFileView.get   s   (	  446 &&v.<==l+..|<I"OO//<S\H]/^	"OO//6<<3L3L\3Zdlnwcx/y	"LL55lCII#NE!&q!4Q!7JLLE!H-Ac*o.A$BC & 3 3sxxPXZcOd 3 eI !8!8!@--l;",,Xy4I,J	\%<%<V%D!&|n5"OO//<S\H]/^	">|n MNNll&&y1G>>%ww^^..z:#)??#6#6):J:J:M:M:S:S:[:[\cdf:g#6#hL$0$<$<W$EM#0#8"99>>:J KI$-$9$9'$BM -f 5I"OO//9hPYEZ/[	  --22v||7I7IGT`SaJb7c2dJ&::??Rinn>R>RM H&^^11<<SANAq(=(5 ==**++-+! +   G%<=>>G " 		( ! GGAJJs*   N4 	BO 4	O O	O-O((O-c                    |j                  d      st        d      	 t        j                  j	                          | j                  |      st        d      t        j                  j                  d      }|st        d      t        j                  j                  d|       }t        j                  j                  |dg      }|st        d	      t        j                  j                   r|j#                         }t%        |      }t'        j(                         5 }|j+                  |       |j-                          t.        j1                  |j2                  |d
      s$t5        d       t7        ddd      }|cddd       S 	 ddd       	 |j9                         r|j;                  |       nD|j=                         r|j?                  |       n"|jA                  |dt        jB                         t7        d|jJ                  jL                  d      S # t
        $ r Y w xY w# 1 sw Y   xY w# t        $ r+}tE        jF                  |       |jI                           d}~ww xY w)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	file_size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content_lengthlogging	exceptionrs   rb   rU   )	r   rW   	load_filerb   r   content	temp_fileresponser   s	            r   postzFileView.post   s    &&v.<==	  446 !!,/344 MM%%f-	:;;ll  7<.!9:))--#se-D
LMM ((nn&G(I,,. 	$) (!)))..#f)UGH&+Hq'rsH#	$ 	$
 V	$
	++-33I>++-11)<--ieW^WmWm-n $jnn6J6JKLL[ " 		(	$ 	$(  	a 	s7   H AH(A&H4 	H%$H%(H14	I(=&I##I()returnN)__name__
__module____qualname____url__r   r]   staticmethodrn   rg   ry   cmfviewsactionr?   r   __classcell__)r   s   @r   r   r      s    $GY(v c     ( 	YYX? X?t 	YYBM BM BMr   r   )r   r   urllib.parserB   ior   pathlibr   shutilcmf.includer   r   BaseViewr    r   r   <module>r      s4          iMsyy!! iMr   