ó
Y[c           @   s²   d  Z  d d l Z d d l Z d d l m Z d d l Z d d l m Z d d l m	 Z	 d d l m
 Z
 d d l m Z e j j e
 j ƒ d e f d	 „  ƒ  Yƒ Z d
 „  Z d S(   s$   Certbot user-supplied configuration.iÿÿÿÿN(   t   parse(   t	   constants(   t   errors(   t
   interfaces(   t   utilt   NamespaceConfigc           B   s  e  Z d  Z d „  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z d „  Z	 e d „  ƒ Z
 e d „  ƒ Z e d	 „  ƒ Z e d
 „  ƒ Z e d „  ƒ Z d „  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z RS(   s|  Configuration wrapper around :class:`argparse.Namespace`.

    For more documentation, including available attributes, please see
    :class:`certbot.interfaces.IConfig`. However, note that
    the following attributes are dynamically resolved using
    :attr:`~certbot.interfaces.IConfig.work_dir` and relative
    paths defined in :py:mod:`certbot.constants`:

      - `accounts_dir`
      - `csr_dir`
      - `in_progress_dir`
      - `key_dir`
      - `temp_checkpoint_dir`

    And the following paths are dynamically resolved using
    :attr:`~certbot.interfaces.IConfig.config_dir` and relative
    paths defined in :py:mod:`certbot.constants`:

      - `default_archive_dir`
      - `live_dir`
      - `renewal_configs_dir`

    :ivar namespace: Namespace typically produced by
        :meth:`argparse.ArgumentParser.parse_args`.
    :type namespace: :class:`argparse.Namespace`

    c         C   s{   t  j |  d | ƒ t j j |  j j ƒ |  j _ t j j |  j j ƒ |  j _ t j j |  j j ƒ |  j _ t	 |  ƒ d  S(   Nt	   namespace(
   t   objectt   __setattr__t   ost   patht   abspathR   t
   config_dirt   work_dirt   logs_dirt   check_config_sanity(   t   selfR   (    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyt   __init__,   s
    c         C   s   t  |  j | ƒ S(   N(   t   getattrR   (   R   t   name(    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyt   __getattr__6   s    c         C   s   t  |  j | | ƒ d  S(   N(   t   setattrR   (   R   R   t   value(    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyR   9   s    c         C   s5   t  j |  j j ƒ } | j | j j d t j j ƒ S(   s   File path based on ``server``.t   /(	   R    t   urlparseR   t   servert   netlocR
   t   replaceR	   t   sep(   R   t   parsed(    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyt   server_path<   s    c         C   s   |  j  |  j ƒ S(   N(   t   accounts_dir_for_server_pathR   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyt   accounts_dirB   s    c         C   s   t  j j |  j j t j | ƒ S(   s/   Path to accounts directory based on server_path(   R	   R
   t   joinR   R   R   t   ACCOUNTS_DIR(   R   R   (    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyR   F   s    	c         C   s   t  j j |  j j t j ƒ S(   N(   R	   R
   R!   R   R   R   t
   BACKUP_DIR(   R   (    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyt
   backup_dirK   s    c         C   s   t  j j |  j j t j ƒ S(   N(   R	   R
   R!   R   R   R   t   CSR_DIR(   R   (    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyt   csr_dirO   s    c         C   s   t  j j |  j j t j ƒ S(   N(   R	   R
   R!   R   R   R   t   IN_PROGRESS_DIR(   R   (    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyt   in_progress_dirS   s    c         C   s   t  j j |  j j t j ƒ S(   N(   R	   R
   R!   R   R   R   t   KEY_DIR(   R   (    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyt   key_dirW   s    c         C   s   t  j j |  j j t j ƒ S(   N(   R	   R
   R!   R   R   R   t   TEMP_CHECKPOINT_DIR(   R   (    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyt   temp_checkpoint_dir[   s    	c         C   s"   t  j |  j ƒ } t |  ƒ | ƒ S(   N(   t   copyt   deepcopyR   t   type(   R   t   _memot   new_ns(    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyt   __deepcopy__`   s    c         C   s   t  j j |  j j t j ƒ S(   N(   R	   R
   R!   R   R   R   t   ARCHIVE_DIR(   R   (    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyt   default_archive_dirf   s    c         C   s   t  j j |  j j t j ƒ S(   N(   R	   R
   R!   R   R   R   t   LIVE_DIR(   R   (    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyt   live_dirj   s    c         C   s   t  j j |  j j t j ƒ S(   N(   R	   R
   R!   R   R   R   t   RENEWAL_CONFIGS_DIR(   R   (    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyt   renewal_configs_dirn   s    	c         C   s   t  j j |  j j t j ƒ S(   s>   Path to directory with hooks to run with the renew subcommand.(   R	   R
   R!   R   R   R   t   RENEWAL_HOOKS_DIR(   R   (    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyt   renewal_hooks_dirs   s    c         C   s   t  j j |  j t j ƒ S(   s8   Path to the pre-hook directory for the renew subcommand.(   R	   R
   R!   R:   R   t   RENEWAL_PRE_HOOKS_DIR(   R   (    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyt   renewal_pre_hooks_diry   s    c         C   s   t  j j |  j t j ƒ S(   s;   Path to the deploy-hook directory for the renew subcommand.(   R	   R
   R!   R:   R   t   RENEWAL_DEPLOY_HOOKS_DIR(   R   (    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyt   renewal_deploy_hooks_dir   s    c         C   s   t  j j |  j t j ƒ S(   s9   Path to the post-hook directory for the renew subcommand.(   R	   R
   R!   R:   R   t   RENEWAL_POST_HOOKS_DIR(   R   (    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyt   renewal_post_hooks_dir…   s    (   t   __name__t
   __module__t   __doc__R   R   R   t   propertyR   R    R   R$   R&   R(   R*   R,   R2   R4   R6   R8   R:   R<   R>   R@   (    (    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyR      s(   	
				c         C   sm   |  j  |  j k r0 t j d j |  j ƒ ƒ ‚ n  |  j j d k	 ri x$ |  j j D] } t j	 | ƒ qO Wn  d S(   sÒ   Validate command line options and display error message if
    requirements are not met.

    :param config: IConfig instance holding user configuration
    :type args: :class:`certbot.interfaces.IConfig`

    s;   Trying to run http-01 and tls-sni-01 on the same port ({0})N(
   t   http01_portt   tls_sni_01_portR   t   ConfigurationErrort   formatR   t   domainst   NoneR   t   enforce_domain_sanity(   t   configt   domain(    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyR   Œ   s    	(   RC   R-   R	   t   six.moves.urllibR    t   zope.interfacet   zopet   certbotR   R   R   R   t	   interfacet   implementert   IConfigR   R   R   (    (    (    s9   /usr/lib/python2.7/dist-packages/certbot/configuration.pyt   <module>   s   }