ó
Aa¢Rc           @   s  d  d l  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 d  d l m Z d  d l	 Z	 d Z
 d Z d Z d „  Z d „  Z d d d „  ƒ  YZ d	 „  Z d
 e f d „  ƒ  YZ e d k rd  d l Z e j d j d ƒ d j d ƒ \ Z Z e e e ƒ GHn  d S(   iÿÿÿÿN(   t   Threads   hkp://keyserver.ubuntu.com:80/s-   https://launchpad.net/api/1.0/~%s/+archive/%sc         C   s   t  j d d |  ƒ S(   Ns   [^a-zA-Z0-9_-]t   _(   t   ret   sub(   t   s(    (    s:   /usr/lib/python2.7/dist-packages/softwareproperties/ppa.pyt   encode'   s    c         C   sÃ   |  j  d ƒ s |  d
 f S|  j d ƒ d }  |  j d ƒ d } y |  j d ƒ d } Wn t k
 rq } d } n Xt j j d ƒ } d | | | f } d	 | t | ƒ t | ƒ | f } | | f S(   su    Convert an abbreviated ppa name of the form 'ppa:$name' to a
        proper sources.list line of the form 'deb ...' s   ppa:t   :i   t   /i    t   ppas   Dir::Etc::sourcepartss1   deb http://ppa.launchpad.net/%s/%s/ubuntu %s mains   %s/%s-%s-%s.listN(   t
   startswitht   Nonet   splitt
   IndexErrort   apt_pkgt   configt   find_dirR   (   t   abrevt   distro_codenamet	   ppa_ownert   ppa_namet   et   sourceslistdt   linet   filename(    (    s:   /usr/lib/python2.7/dist-packages/softwareproperties/ppa.pyt   expand_ppa_line*   s    

t   CurlCallbackc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   d |  _  d  S(   Nt    (   t   contents(   t   self(    (    s:   /usr/lib/python2.7/dist-packages/softwareproperties/ppa.pyt   __init__@   s    c         C   s   |  j  | |  _  d  S(   N(   R   (   R   t   buf(    (    s:   /usr/lib/python2.7/dist-packages/softwareproperties/ppa.pyt   body_callbackC   s    (   t   __name__t
   __module__R   R   (    (    (    s:   /usr/lib/python2.7/dist-packages/softwareproperties/ppa.pyR   ?   s   	c         C   sÖ   t  |  | f } t ƒ  } t j ƒ  } | j t j d ƒ | j t j d ƒ | j t j | j ƒ t	 r} | j t j
 t	 ƒ n  | j t j t | ƒ ƒ | j t j d g ƒ | j ƒ  | j ƒ  | j } t j | ƒ S(   Ni   i   s   Accept: application/json(   t   LAUNCHPAD_PPA_APIR   t   pycurlt   Curlt   setoptt   SSL_VERIFYPEERt   SSL_VERIFYHOSTt   WRITEFUNCTIONR   t   LAUNCHPAD_PPA_CERTt   CAINFOt   URLt   strt
   HTTPHEADERt   performt   closeR   t   jsont   loads(   t
   owner_nameR   t   lp_urlt   callbackt   curlt   lp_page(    (    s:   /usr/lib/python2.7/dist-packages/softwareproperties/ppa.pyt   get_ppa_info_from_lpF   s    	

	t   AddPPASigningKeyThreadc           B   s,   e  Z d  Z d d „ Z d „  Z d „  Z RS(   s;    thread class for adding the signing key in the background c         C   s5   t  j |  ƒ | |  _ | d  k	 r( | n t |  _ d  S(   N(   R    R   t   ppa_pathR
   t   DEFAULT_KEYSERVERt	   keyserver(   R   R9   R;   (    (    s:   /usr/lib/python2.7/dist-packages/softwareproperties/ppa.pyR   \   s    	c         C   s   |  j  |  j ƒ d  S(   N(   t   add_ppa_signing_keyR9   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/softwareproperties/ppa.pyt   runb   s    c      
      s~  ‡ f d †  ‰  d& ‡  f d † } | d j d ƒ \ } } } y t | | ƒ } Wn* t j k
 r| } d | | d f GHt SXy | d } Wn t k
 rª } d | GHt SXt | ƒ d d	 k  rÏ | d
 | ƒ St j	 ƒ  ‰ t
 j j ˆ d ƒ }	 t
 j j ˆ d ƒ }
 d d d d ˆ g } t j | d |	 d |
 d |  j d | g ƒ } | d k ra| d ˆ ƒ St
 j j ˆ d ƒ } t j | d |
 d | d | g ƒ } | d k r´| d ˆ ƒ St j | d | d d d g d t j d t ƒj ƒ  d } d& } x: | j ƒ  D], } | j d  ƒ r| j d! ƒ d" } PqqW| | k rR| d# | | f ƒ St j d$ d% |
 g ƒ } ˆ  ˆ ƒ | d k S('   sÃ   Query and add the corresponding PPA signing key.
        
        The signing key fingerprint is obtained from the Launchpad PPA page,
        via a secure channel, so it can be trusted.
        c            s   d d  l  } | j ˆ  ƒ d  S(   Niÿÿÿÿ(   t   shutilt   rmtree(   t   tmpdirR>   (   t   tmp_keyring_dir(    s:   /usr/lib/python2.7/dist-packages/softwareproperties/ppa.pyt   cleanupk   s    c            s   |  GH| r ˆ  | ƒ n  t  S(   N(   t   False(   t   msgR@   (   RB   (    s:   /usr/lib/python2.7/dist-packages/softwareproperties/ppa.pyt   fail_with_msgn   s    i   R   s   Error reading %s: %st   signing_key_fingerprints/   Error: can't find signing_key_fingerprint at %si    i   s-   Error: signing key fingerprint '%s' too shorts   secring.gpgs   pubring.gpgt   gpgs   --no-default-keyrings   --no-optionss	   --homedirs   --secret-keyrings	   --keyrings   --keyservers   --recvi    s   recv faileds   export-keyring.gpgs   --outputs   --exports   export faileds   --fingerprints   --batchs   --with-colonst   stdoutt   universal_newliness   fpr:R   i	   s6   Fingerprints do not match, not importing: '%s' != '%s's   apt-keyt   addN(   R
   R   R7   R#   t   errorRC   R   t   lent   tempfilet   mkdtempt   ost   patht   joint
   subprocesst   callR;   t   Popent   PIPEt   Truet   communicatet
   splitlinesR	   (   R   R9   RE   R2   R   t   distrot   ppa_infoR   RF   t   tmp_secret_keyringt   tmp_keyringt   gpg_default_optionst   rest   tmp_export_keyringt   outputt   got_fingerprintR   (    (   RB   RA   s:   /usr/lib/python2.7/dist-packages/softwareproperties/ppa.pyR<   e   sr    				
	
N(   R    R!   t   __doc__R
   R   R=   R<   (    (    (    s:   /usr/lib/python2.7/dist-packages/softwareproperties/ppa.pyR8   Y   s   	t   __main__i   R   R   (    (   R   R0   R   RO   RR   RM   R>   t	   threadingR    R#   R:   R"   R
   R)   R   R   R   R7   R8   R    t   syst   argvR   R2   R   (    (    (    s:   /usr/lib/python2.7/dist-packages/softwareproperties/ppa.pyt   <module>   s(   			c)