ó
Á£ô_c           @   sÆ   d  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 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   errors(   t
   interfaces(   t   util(   t	   constants(   t   misc(   t   ost   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._internal.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._internal.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__R   t   patht   abspathR   t
   config_dirt   work_dirt   logs_dirt   check_config_sanity(   t   selfR   (    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/configuration.pyt   __init__-   s
    c         C   s   t  |  j | ƒ S(   N(   t   getattrR   (   R   t   name(    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/configuration.pyt   __getattr__7   s    c         C   s   t  |  j | | ƒ d  S(   N(   t   setattrR   (   R   R   t   value(    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/configuration.pyR
   :   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(    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/configuration.pyt   server_path=   s    c         C   s   |  j  |  j ƒ S(   N(   t   accounts_dir_for_server_pathR   (   R   (    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/configuration.pyt   accounts_dirC   s    c         C   s.   t  j | ƒ } t j j |  j j t j | ƒ S(   s/   Path to accounts directory based on server_path(	   R   t.   underscores_for_unsupported_characters_in_pathR   R   t   joinR   R   R   t   ACCOUNTS_DIR(   R   R   (    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/configuration.pyR    G   s    	c         C   s   t  j j |  j j t j ƒ S(   N(   R   R   R#   R   R   R   t
   BACKUP_DIR(   R   (    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/configuration.pyt
   backup_dirM   s    c         C   s   t  j j |  j j t j ƒ S(   N(   R   R   R#   R   R   R   t   CSR_DIR(   R   (    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/configuration.pyt   csr_dirQ   s    c         C   s   t  j j |  j j t j ƒ S(   N(   R   R   R#   R   R   R   t   IN_PROGRESS_DIR(   R   (    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/configuration.pyt   in_progress_dirU   s    c         C   s   t  j j |  j j t j ƒ S(   N(   R   R   R#   R   R   R   t   KEY_DIR(   R   (    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/configuration.pyt   key_dirY   s    c         C   s   t  j j |  j j t j ƒ S(   N(   R   R   R#   R   R   R   t   TEMP_CHECKPOINT_DIR(   R   (    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/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(    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/configuration.pyt   __deepcopy__b   s    c         C   s   t  j j |  j j t j ƒ S(   N(   R   R   R#   R   R   R   t   ARCHIVE_DIR(   R   (    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/configuration.pyt   default_archive_dirh   s    c         C   s   t  j j |  j j t j ƒ S(   N(   R   R   R#   R   R   R   t   LIVE_DIR(   R   (    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/configuration.pyt   live_dirl   s    c         C   s   t  j j |  j j t j ƒ S(   N(   R   R   R#   R   R   R   t   RENEWAL_CONFIGS_DIR(   R   (    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/configuration.pyt   renewal_configs_dirp   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   (    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/configuration.pyt   renewal_hooks_diru   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   (    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/configuration.pyt   renewal_pre_hooks_dir{   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   (    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/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   (    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/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.   R4   R6   R8   R:   R<   R>   R@   RB   (    (    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/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 https-port on the same port ({0})N(
   t   http01_portt
   https_portR   t   ConfigurationErrort   formatR   t   domainst   NoneR   t   enforce_domain_sanity(   t   configt   domain(    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/configuration.pyR   Ž   s    	(   RE   R/   t   six.moves.urllibR    t   zope.interfacet   zopet   certbotR   R   R   t   certbot._internalR   t   certbot.compatR   R   t	   interfacet   implementert   IConfigR	   R   R   (    (    (    sC   /usr/lib/python2.7/site-packages/certbot/_internal/configuration.pyt   <module>   s   ~