
    i                         d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlmZmZ d dlmZmZ  e       Zej)                  d      d	efd
       Zy)    N)Path)	APIRouterHTTPException)FileResponse)WARE_HOUSE_DIR)ResourceNotFoundErrorValidationError)get_server_loggerLogTypez#/api/sessions/{session_id}/download
session_idc           	        K   	 t        j                  d|       s0t               }|j                  dd|  d| i       t	        dd      d	|  }t
        |z  }|j                         r|j                         st        d
d|       t        j                  dd      5 }t        |j                        d d d        j                  d      }	 t        j                  t!        |      dt
        |       t               }|j+                  dt,        j.                  | t!                     fd}t1        j2                  |       t5        | dddd| di      S # 1 sw Y   xY w# t"        $ rQ}j                         rj%                          t               }|j'                  |d|         t)        dd      d }~ww xY w# t        $ r}t)        dt!        |            d }~wt        $ r t)        dd
      t(        $ r  t"        $ r1}t               }|j'                  |d |         t)        dd!      d }~ww xY ww)"Nz^[a-zA-Z0-9_-]+$INVALID_SESSION_ID_FORMATzInvalid session_id format: received_session_id)detailszNInvalid session_id: only letters, digits, underscores, and hyphens are allowedr   )fieldsession_zSession directory not foundsession)resource_typeresource_idFz.zip)deletesuffix zip)root_dirbase_dirz*Failed to create zip archive for session: i  zFailed to create zip archive)status_codedetailzSession download prepared)log_typer   archive_pathc                  H     j                         r j                          y y )N)existsunlink)zip_paths   C/Users/bowang/.openclaw/workspace/ChatDev/server/routes/sessions.pycleanup_zipz%download_session.<locals>.cleanup_zip?   s     ! !    zapplication/zipzContent-Dispositionzattachment; filename=)pathfilename
media_typeheadersi  i  z*Unexpected error during session download: zFailed to download session)rematchr
   log_security_eventr	   r   r!   is_dirr   tempfileNamedTemporaryFiler   namewith_suffixshutilmake_archivestr	Exceptionr"   log_exceptionr   infor   WORKFLOWatexitregisterr   )	r   loggerdir_namesession_pathtmp_filearchive_baseexcr%   r#   s	           @r$   download_sessionrB      sQ    ARxx+Z8&(F%%+-j\:.
; & 
 "`" 
 j\*%0""$L,?,?,A'-'&  ((fEHMM*H F  ++B/	XL 15>\de #$'%%!X	 	 	
	" 	$ z&(*.CH:T,RS	
 	
7 FE  	X !&(F  (RS]R^&_`C8VWW	X6  >CH==  S4QRR  R"$S$Nzl"[\4PQQRss   IBG E4G &E( 4A'G IE%!G (	G1AF==GG 	H?G$$*H?,H::H??I)r:   r+   r3   r/   pathlibr   fastapir   r   fastapi.responsesr   server.settingsr   utils.exceptionsr   r	   utils.structured_loggerr
   r   routergetr5   rB    r&   r$   <module>rL      sU     	    , * * C >	 12BRs BR 3BRr&   