o
    +ĉj                     @   s   d dl mZmZ d dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZ d dlZd dlZd dlZdZejdd ZG d	d
 d
eZedkrmeejddZejddZede de d eeefe  dS dS )    )SimpleHTTPRequestHandlerThreadingHTTPServerN)Requesturlopen)	HTTPError)urlsplitparse_qsunquotezhttps://api.tokengo.loveTOKEN_GO_API_KEY c                       sH   e Zd Z fddZdd Zdd Z fddZdd	 Zd
d Z  ZS )Handlerc                    s(   | j dr| d d S t   d S )N/proxy/GET)path
startswithforwardsuperdo_GETself	__class__ /opt/ai-image-studio/server.pyr      s   zHandler.do_GETc                 C   s>   | j dr| d d S | j dkr|   d S | d d S )Nr   POSTz
/batch-zip  )r   r   r   	batch_zip
send_errorr   r   r   r   do_POST   s
   
zHandler.do_POSTc                 C   sT   | j dr#| d | dd | dd | dd |   d S | d d S )	Nr      Access-Control-Allow-Origin*zAccess-Control-Allow-HeaderszAccess-Control-Allow-MethodszGET,POST,OPTIONSr   )r   r   send_responsesend_headerend_headersr   r   r   r   r   
do_OPTIONS   s   :zHandler.do_OPTIONSc              
      s~  | j drtt| j jddgd }zzt|dd}| }|dr(d}n'|d	r0d
}n|d d dkrC|dd dkrCd}n|jdd	dd }|drVdn|d
kr\dn|dkrbdnd}| 
d | d| | dd| d  | dtt| |   | j| W d S  ty } z| dt| W Y d }~d S d }~ww | j dr| d d S t   d S ) Nz/asset?urlr   r   x   timeouts   z
image/jpegs   PNG

z	image/png   s   RIFF      s   WEBPz
image/webpContent-Type;zvideo/z.mp4z.pngz.webpz.jpg   zContent-Dispositionzattachment; filename="image"Content-Length  r   r   )r   r   r   r   querygetr   readheaderssplitr"   r#   strlenr$   wfilewrite	Exceptionr   r   r   r   )r   r&   resbodyctypeexter   r   r   r       s    &*X, c              
   C   s   t | jdd}t| j|pd}t }t	
|dt	j.}|dg D ]}z||ddt|d d	d
  W q' tyF   Y q'w W d    n1 sQw   Y  | }| d | dd | dtt| |   | j| d S )Nr1   0z{}wfilesnamez	image.jpgr&   r'   r(   r/   r-   zapplication/zip)intr6   r4   jsonloadsrfiler5   ioBytesIOzipfileZipFileZIP_DEFLATEDwritestrr   r<   getvaluer"   r#   r8   r9   r$   r:   r;   )r   lengthpayloadoutzitemr>   r   r   r   r   1   s   (*JzHandler.batch_zipc              
   C   s  t | jtdd   }t| jdd}|r| j|nd }dd | j D }t	r9t
dd |D s9dt	 |d	< z?tt||||d
dd}| }| |j |j D ]\}}	| dvre| ||	 qU| dd |   | j| W d S  ty }
 z6|
 }| |
j | d|
jdd | dtt| | dd |   | j| W Y d }
~
d S d }
~
w ty }
 z| dt|
 W Y d }
~
d S d }
~
ww )Nz/proxyr1   rB   c                 S   s"   i | ]\}}|  d vr||qS ))hostzcontent-lengthlower).0kvr   r   r   
<dictcomp>>   s   " z#Handler.forward.<locals>.<dictcomp>c                 s   s    | ]	}|  d kV  qdS )authorizationNrW   )rY   rZ   r   r   r   	<genexpr>?   s    z"Handler.forward.<locals>.<genexpr>zBearer Authorization)datar6   method   r(   )ztransfer-encoding
connectionr    r!   r-   zapplication/jsonr2   )TARGETr   r9   rF   r6   r4   rI   r5   itemsAPI_KEYanyr   r   r"   statusrX   r#   r$   r:   r;   r   coder8   r<   r   )r   ra   targetrQ   r`   r6   r=   r>   rZ   r[   rA   r   r   r   r   :   s8   "zHandler.forward)	__name__
__module____qualname__r   r   r%   r   r   __classcell__r   r   r   r   r      s    	r   __main__PORT8765HOSTz	127.0.0.1u   打开 http://:z/ai-image-studio.html)http.serverr   r   osurllib.requestr   r   urllib.errorr   urllib.parser   r   r	   rG   rJ   rL   rd   environr4   striprf   r   rk   rF   portrV   printserve_foreverr   r   r   r   <module>   s    I