o
    g                     @   s   d dl mZmZmZmZmZmZmZ d dlm	Z	m
Z
mZmZmZ d dlZd dlZd dlZd dlmZ edeZejejejedZejedd d	Zed
dd Zdd Zdd Z eddd Z!eddd Z"eddd Z#dS )    )	Blueprintrequestjsonifysend_from_directoryrender_templateredirectResponse)urlparseurljoinquoteurlsplitparse_qsN)BeautifulSoupproxyz../renderedT)exist_oki  /c                   C   s   t dS )Nzviewer.html)r    r   r   0/var/www/html/proxy_test/modules/proxy_routes.pyindex   s   r   c                 C   s   t | }|jdd}|jddd}t|j}ddd | D }|ddddd	d}| d| d|p=d
 dS )N._r   &c                 s   s(    | ]\}}| d d | V  qdS )=,N)join).0kvr   r   r   	<genexpr>   s   & z!build_filename.<locals>.<genexpr>r   -r   r   z.html)	r   netlocreplacepathstripr   queryr   items)urlparseddomainr"   r$   	query_str
safe_queryr   r   r   build_filename   s   
r+   c                  C   sT   t   } ttD ]}tjt|}tj|r'| tj| tkr't	| q	d S N)
timeoslistdir
RENDER_DIRr"   r   isfilegetmtimeCACHE_EXPIRE_SECONDSremove)nowfilenamer"   r   r   r   cleanup_old_cache   s    
r7   z/fetchc               
   C   s  t   tjd} tjddk}| sdS | dsd|  } zddi}tj| |d	d
}|  t|jd}t	| }|j
 d|j }|g dD ]^}|jdv rRdnd}||r|| }	t||	}
|jdkr|	dsq|	drrqIdt|
 d|r|dnd ||< qI|jdv rdt|
 ||< qI|jdv r|r|  qIdt|
 ||< qIt| }ttjt|ddd}|t| W d    n1 sw   Y  td| | dW S  ty } ztdt|id fW  Y d }~S d }~ww )!Nr&   noimg1)u$   URL이 제공되지 않았습니다.  httpzhttps://
User-AgentMozilla/5.0
   headerstimeoutzhtml.parserz://)alinkscriptimgsource)rB   rC   hrefsrcrB   zjavascript:#z/fetch?url=z&noimg=0)rC   rD   z/fetch_proxy?url=)rE   rF   wzutf-8)encodingz
/rendered/)rendered_pathcurrent_urlerror  )r7   r   argsget
startswithrequestsraise_for_statusr   textr	   schemer    find_allnamehas_attrr
   r   	decomposer+   openr.   r"   r   r0   writestrr   	Exception)r&   skip_imagesr@   ressoup
parsed_urlbase_urltagattroriginalabsoluter6   fer   r   r   fetch   sT   



"



 rk   z/fetch_proxyc               
   C   s   t jd} | s
dS zddi}tj| |dd}|  t|j|jddd	W S  ty@ } zd
| dfW  Y d }~S d }~ww )Nr&   )u
   URL 없음r:   r<   r=   r>   r?   zContent-Typezapplication/octet-stream)content_typeu   프록시 오류: rP   )	r   rQ   rR   rT   rU   r   contentr@   r_   )r&   r@   ra   rj   r   r   r   fetch_proxyP   s   rn   z/rendered/<path:filename>c                 C   s
   t t| S r,   )r   r0   )r6   r   r   r   serve_rendered]   s   
ro   )$flaskr   r   r   r   r   r   r   urllib.parser	   r
   r   r   r   r.   r-   rT   bs4r   __name__proxy_bpr"   abspathr   dirname__file__r0   makedirsr3   router   r+   r7   rk   rn   ro   r   r   r   r   <module>   s$   $ 

	
0
