
}TA              &   @   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[ 	]+ZtempZskipcookiesZispypyc               @   s   e  Z d  Z d S)DerpLockN)__name__
__module____qualname__ r   r   0/extra/hacker/creation/stories/gs/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    '
r/   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	isSessionr3   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   rA   j   s    zHeaderWatcher.Client.request)r   r	   r
   rA   r   r   )r   r   Clienti   s   rE   c             C   s   |  j  |  j |  S)N)Zdo_openrE   )r   Zreqr   r   r   	http_openm   s    zHeaderWatcher.http_openN)r   r	   r
   r   ZclientZHTTPConnectionrE   rF   r   r   r   r   r@   h   s   r@   
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
   rO   r   r   r   r   rK   x   s   rK   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moder0   Zdeflatei   i  head)r   RequestZfull_urlencodeUnicodeEncodeErrorlisturllibparseZurlparserangelenZquoteZ
urlunparser%   r   openerr5   rD   rQ   GzipFilereadzlib
decompresserror	MAX_WBITSr   Z	HTTPErrorcoderK   )rA   eZurlir:   rD   encodingrC   r   r   r   myopen|   s@    $(	
 	rh   c          
   C   s0   t  |    } t j | |  | j SWd  QXd  S)N)rh   shutilcopyfileobjrD   )rA   destr:   r   r   r   
myretrieve   s    rl   z"urllib has been setup for proxying)rG   rH   )rI   rJ   )M
contextlibr   r   ior   rQ   r`   sysr2   tempfileZurllib.requestrY   rA   rU   r   ri   ZglobreZhttp.clientr   hasattrr   ZisPypyZProxyHandlerproxyZhandlerscompiler6   mkdirOSErrorenvironr%   copyregr   r   r   r   r   r&   Zhttp.cookiejarr/   r3   joinZ
cookiefiler5   r:   loadZjarZ_cookies_lockIOErrorAttributeErrorr'   Z	CookieJar
expanduserr,   r>   NamedTemporaryFileoutZpicklerdumpr4   unlinkrenamer   closeappendZHTTPCookieProcessorZHTTPHandlerr@   Zbuild_openerr]   Z
addheadersZinstall_opener	ExceptionrK   rh   rl   r   r   r   r   <module>   s   	  
	"!  *