
l-UA              &   @   s  d  d l  m Z m Z d  d l m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 Z	 d  d l
 Z e j j Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z e e j d  Z e j j i d d 6 Z e g Z e j d  Z y e j d  Wn e k
 rYn Xd	 e j k r\e re d
  d  d l  Z  d  d l! Z! d  d l" Z" Gd d   d  Z# Gd d   d e j  Z$ e  j e# d d   e! j%  n	 e j Z$ d  d l& Z& d  d l' Z d d   Z( e j) j* d d  Z+ yC e, e+ d   Z- e j. e-  Z/ Wd QXe r1e! j%   e/ _0 n  Wn' e1 e2 f k
 r[e j3 j4   Z/ Yn Xx0 e j e j) j5 d   D] Z6 e( e/ e6  qxWd d   Z7 e7 e/ d  e	 j8 d e j) j* d   x Z9 e$ e9  Z: e: j; e/  e j) j< e+  re j= e+  n  e j> e9 j? e+  y e9 j@   Wn e k
 r9Yn XWd QXe jA e j jB e/   n  Gd d   d e j jC  ZD e jA eD    e j jE e   ZF d' d( g eF _G e j jH eF  Gd  d!   d! eI  ZJ e d" d#    ZK d$ d%   ZL e d&  d S))    )closingcontextmanager)StringIONdispatchzhttp://127.0.0.1:8123httpz[ 	]+tempZskipcookiesZispypyc               @   s   e  Z d  Z d S)DerpLockN)__name__
__module____qualname__ r   r   2/extra/hacker/creation/stories/code/setupurllib.pyr   !   s    r   c                   s;   e  Z d  Z d e j   f d d  Z e e j j e	 <  S)	MyPicklerNc                sP   t  | t j  r t   } n  | t j k r6 t } n  t   j | | |  d  S)N)
isinstance_threadRLockr   supersave_global)selfobjnamepack)	__class__r   r   r   #   s
    	zMyPickler.save_global)
r	   r
   r   structr   r   picklePicklerr   typer   r   )r   r   r   "   s   r   c             C   s   d S)N r   )lockr   r   r   <lambda>*   s    r   c             C   s   t  d |  t t j |    } | j   } | j d  x | j   D] } t j j	 d | d | d d  d | d | d j
 d  | d j
 d  | d d | d	 | d
 | d
 d k d  d  i   } |  j |  qK WWd  QXd  S)NZgettingzASELECT host, path, isSecure, expiry, name, value FROM moz_cookiesr         F.         r   )printr   sqlite3ZconnectZcursorZexecuteZfetchallr   	cookiejarCookie
startswith
set_cookie)cj
ff_cookiesZconZcuritemcr   r   r   get_cookies1   s    '
r0   zcookies.picklerbz#~/.mozilla/firefox/*/cookies.sqlitec             C   s   t  j j |  s d  St |   } x | D] } t j | d  \ } } } } } }	 }
 t j j d |	 |
 d  d | | j	 d  | j	 d  | d | d k t
 |  | d k d  d  i   } |  j |  q, WWd  QXd  S)N   r   Fr"   ZTRUEr   )ospathexistsopenspacesplitr   r(   r)   r*   intr+   )r,   textinplinehostZ	isSessionr4   ZisSecureZexpiryr   valuer/   r   r   r   get_text_cookiesM   s     '	r?   z/extra/user/tmp/cookies.txtdirc               @   s8   e  Z d  Z Gd d   d e j j  Z d d   Z d S)HeaderWatcherc                   s"   e  Z d  Z   f d d   Z   S)zHeaderWatcher.Clientc                s*   t  d |  t   j | | | |  d  S)Nzsending headers)r&   r   request)r   methodZselectordataheaders)r   r   r   rB   j   s    zHeaderWatcher.Client.request)r	   r
   r   rB   r   r   )r   r   Clienti   s   rF   c             C   s   |  j  |  j |  S)N)Zdo_openrF   )r   Zreqr   r   r   	http_openm   s    zHeaderWatcher.http_openN)r	   r
   r   r   ZclientZHTTPConnectionrF   rG   r   r   r   r   rA   h   s   rA   
User-agent'Mozilla/5.0 Gecko/20100101 Firefox/19.0Accept-Encodinggzip,deflatec               @   s   e  Z d  Z d d   Z d S)URLErrorc             C   s"   t  |  j  d t  |  j d  S)Nz: r   )str	__cause__args)r   r   r   r   __str__y   s    zURLError.__str__N)r	   r
   r   rP   r   r   r   r   rL   x   s   rL   c          &   c   sR  t  |  t  s t |   }  n  y |  j j d  Wn t k
 r } zu t t j j |  j   } x= t	 d t
 |   D]& } t j j | | d d | | <qx Wt j j |  |  _ WYd  d  } ~ Xn Xt d |  j  y t t j |     } | j } | d } | d k r/t j d | d	 d
  } nk | d k r| j d  } y t j |  } Wn+ t j k
 rt j | t j  } Yn Xt |  } n  | | _ | VWd  QXWn t j j k
 r} z: | j d k rt d | j  t | j    n    WYd  d  } ~ Xn= t j j k
 rM} z t |  j  |  WYd  d  } ~ Xn Xd  S)Nasciir$   Zsafez/&=?+Z
requestingzContent-Encodinggzipfileobjmoder1   Zdeflatei   i  head)r   RequestZfull_urlencodeUnicodeEncodeErrorlisturllibparseZurlparserangelenZquoteZ
urlunparser&   r   openerr6   rE   rR   GzipFilereadzlib
decompresserror	MAX_WBITSr   Z	HTTPErrorcoderL   )rB   eZurlir;   rE   encodingrD   r   r   r   myopen|   s@    $(	
 	ri   c          
   C   s0   t  |    } t j | |  | j SWd  QXd  S)N)ri   shutilcopyfileobjrE   )rB   destr;   r   r   r   
myretrieve   s    rm   z"urllib has been setup for proxying)rH   rI   )rJ   rK   )M
contextlibr   r   ior   rR   ra   sysr3   tempfileZurllib.requestrZ   rB   rV   r   rj   ZglobreZhttp.clientr   hasattrr   ZisPypyZProxyHandlerproxyZhandlerscompiler7   mkdirOSErrorenvironr&   copyregr   r   r   r   r   r'   Zhttp.cookiejarr0   r4   joinZ
cookiefiler6   r;   loadZjarZ_cookies_lockIOErrorAttributeErrorr(   Z	CookieJar
expanduserr-   r?   NamedTemporaryFileoutZpicklerdumpr5   unlinkrenamer   closeappendZHTTPCookieProcessorZHTTPHandlerrA   Zbuild_openerr^   Z
addheadersZinstall_opener	ExceptionrL   ri   rm   r   r   r   r   <module>   s   	  
	"!  *