ó
ŒGUc        	   @   sà   d  Z  d Z d Z d Z d Z d Z d Z d d l Z e j d	 d
 k r[ d d l	 j
 Z n d d l Z d d l m Z d d l m Z d e f d „  ƒ  YZ e d d „ Z d d d d e d e j d d „ Z e d „ Z d S(   su   ndg_httpsclient SSL Context utilities module containing convenience routines
for setting SSL context configuration.

s   P J Kershaw (STFC)s   09/12/11s2   (C) 2012 Science and Technology Facilities Councils-   BSD - see LICENSE file in top-level directorys   Philip.Kershaw@stfc.ac.uks   $Id$iÿÿÿÿNi    i   (   t   SSL(   t   ServerSSLCertVerificationt   SSlContextConfigc           B   s&   e  Z d  Z d d d d e d „ Z RS(   s   
    Holds configuration options for creating a SSL context. This is used as a
    template to create the contexts with specific verification callbacks.
    c         C   s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S(   N(   t   key_filet	   cert_filet   pem_filet   ca_dirt   verify_peer(   t   selfR   R   R   R   R   (    (    sD   /usr/lib/python2.7/dist-packages/ndg/httpsclient/ssl_context_util.pyt   __init__   s
    				N(   t   __name__t
   __module__t   __doc__t   Nonet   FalseR	   (    (    (    sD   /usr/lib/python2.7/dist-packages/ndg/httpsclient/ssl_context_util.pyR      s   c         C   s(   t  |  j |  j |  j |  j |  j | ƒ S(   N(   t   make_ssl_contextR   R   R   R   R   (   t
   ssl_configt   url(    (    sD   /usr/lib/python2.7/dist-packages/ndg/httpsclient/ssl_context_util.pyt   make_ssl_context_from_config%   s    c            sú   t  j | ƒ } | r% | j | ƒ n  ˆ  rJ ‡  f d †  }	 | j |	 ƒ n  |  r` | j |  ƒ n | rv | j | ƒ n  | s‚ | r• | j | | ƒ n  d „  }
 |
 } | rã | j d ƒ | rÍ t | | ƒ qö | j t  j	 | ƒ n | j t  j
 | ƒ | S(   sL   
    Creates SSL context containing certificate and key file locations.
    c            s   ˆ  S(   N(    (   t   max_passphrase_lent
   set_promptt   userdata(   t   key_file_passphrase(    sD   /usr/lib/python2.7/dist-packages/ndg/httpsclient/ssl_context_util.pyt   <lambda>8   s    c         S   s   | S(   sr   Default certification verification callback.
        Performs no checks and returns the status passed in.
        (    (   t   connt   x509t   errnumt   errdeptht   preverify_ok(    (    sD   /usr/lib/python2.7/dist-packages/ndg/httpsclient/ssl_context_util.pyt	   _callbackD   s    i	   (   R    t   Contextt   use_certificate_filet   set_passwd_cbt   use_privatekey_filet   load_verify_locationst   set_verify_deptht&   set_peer_verification_for_url_hostnamet
   set_verifyt   VERIFY_PEERt   VERIFY_NONE(   R   R   R   R   R   R   t   methodR   t   ssl_contextt	   passwd_cbR   t   verify_callback(    (   R   sD   /usr/lib/python2.7/dist-packages/ndg/httpsclient/ssl_context_util.pyR   +   s*    	c         C   sg   | s |  j  ƒ  t j @rc t j | ƒ } | j } t d | ƒ } | j ƒ  } |  j t j | ƒ n  d S(   sb   Convenience routine to set peer verification callback based on
    ServerSSLCertVerification classt   hostnameN(	   t   get_verify_modeR    R&   t	   urlparse_t   urlparseR,   R   t   get_verify_server_cert_funcR%   (   R)   R   t   if_verify_enabledt   urlObjR,   t   server_ssl_cert_verift   verify_callback_(    (    sD   /usr/lib/python2.7/dist-packages/ndg/httpsclient/ssl_context_util.pyR$   X   s    	(   R   t
   __author__t   __date__t   __copyright__t   __license__t   __contact__t   __revision__t   syst   version_infot   urllib.parset   parseR.   R/   t   OpenSSLR    t%   ndg.httpsclient.ssl_peer_verificationR   t   objectR   R   R   R   t   TLSv1_METHODR   R$   (    (    (    sD   /usr/lib/python2.7/dist-packages/ndg/httpsclient/ssl_context_util.pyt   <module>   s$   ,