U
    ˜­“]d  ã                   @   sž   d Z ddlZddl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 dd	lmZ e e¡Zej ej¡G d
d„ dejƒƒZdS )zH Distribution specific override class for Debian family (Ubuntu/Debian) é    N)Úerrors)Ú
interfaces)Úutil)Ú
filesystem)Úos)Úapache_util)Úconfiguratorc                       sl   e Zd ZdZedddddddgddgdd	gd
ddddde dd¡dZ‡ fdd„Zddd„Z	dd„ Z
‡  ZS )ÚDebianConfiguratorz1Debian specific ApacheConfigurator override classz/etc/apache2z/etc/apache2/sites-availableÚ*z/var/log/apache2Z
apache2ctlz-vZgracefulZ
configtestZa2enmodZa2dismodz-le-ssl.confTÚcertbot_apachezoptions-ssl-apache.conf)Zserver_rootZ
vhost_rootZvhost_filesZ	logs_rootZctlZversion_cmdZrestart_cmdZconftest_cmdÚenmodÚdismodZle_vhost_extZhandle_modulesZhandle_sitesZchallenge_locationZMOD_SSL_CONF_SRCc              
      s  |j r
dS d| jjtj |j¡f }tj tj |¡¡sHt	t
| ƒ |¡S | j d|¡ zt |j|¡ W nz tk
râ } z\tj |¡r¦t |¡|jkr¦d|_ W Y ¢4dS t d||j|j¡ d}t | |j|¡¡‚W 5 d}~X Y nX d|_ t d|j¡ |  jd|j 7  _dS )	a…  Enables an available site, Apache reload required.

        .. note:: Does not make sure that the site correctly works or that all
                  modules are enabled appropriately.

        :param vhost: vhost to enable
        :type vhost: :class:`~certbot_apache.obj.VirtualHost`

        :raises .errors.NotSupportedError: If filesystem layout is not
            supported.

        Nz%s/sites-enabled/%sFTz)Could not symlink %s to %s, got error: %szmEncountered error while trying to enable a newly created VirtualHost located at {0} by linking to it from {1}zEnabling available site: %szEnabled site %s
)ÚenabledÚparserÚrootr   ÚpathÚbasenameZfilepÚisdirÚdirnameÚsuperr	   Úenable_siteÚreverterZregister_file_creationÚsymlinkÚOSErrorÚislinkr   ÚrealpathÚloggerZwarningÚstrerrorr   ÚNotSupportedErrorÚformatÚinfoÚ
save_notes)ÚselfZvhostÚenabled_pathÚerrZ	errstring©Ú	__class__© ú@/usr/lib/python3/dist-packages/certbot_apache/override_debian.pyr   *   sD    ÿÿÿÿ
  þÿzDebianConfigurator.enable_siteFc                 C   sü   t j | jjd¡}t j | jjd¡}t j |¡r<t j |¡sJt d| ¡‚t 	|¡}|D ]Z}|d | jj
krX|  ||¡ | j |¡ d||f }|s¨|  j|t j 7  _t |¡ qX|  ||¡ | j |¡ |sâ|  jd| 7  _t d|¡ | j ¡  dS )	a³  Enables module in Apache.

        Both enables and reloads Apache so module is active.

        :param str mod_name: Name of the module to enable. (e.g. 'ssl')
        :param bool temp: Whether or not this is a temporary action.

        :raises .errors.NotSupportedError: If the filesystem layout is not
            supported.
        :raises .errors.MisconfigurationError: If a2enmod or a2dismod cannot be
            run.

        zmods-availablezmods-enabledzIUnsupported directory layout. You may try to enable mod %s and try again.Ú_modulez$Enabled dependency of %s module - %szEnabled %s module in Apache
zEnabled Apache %s moduleN)r   r   Újoinr   r   r   r   r   r   Zget_mod_depsÚmodulesÚ_enable_mod_debianZadd_modr!   Úlinesepr   Údebugr    Zupdate_runtime_variables)r"   Úmod_nameÚtempZ
avail_pathr#   ZdepsZdepZnoter'   r'   r(   Ú
enable_modX   s.    ÿÿ
zDebianConfigurator.enable_modc                 C   sL   t  |  d¡¡st d¡‚| j ||  d¡d|g¡ t  |  d¡|g¡ dS )z,Assumes mods-available, mods-enabled layout.r   zdUnable to find a2dismod, please make sure a2enmod and a2dismod are configured correctly for certbot.z-fr   N)r   Z
exe_existsZoptionr   ZMisconfigurationErrorr   Zregister_undo_commandZ
run_script)r"   r/   r0   r'   r'   r(   r,   †   s    ÿ ÿz%DebianConfigurator._enable_mod_debian)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚdictÚpkg_resourcesZresource_filenameZOS_DEFAULTSr   r1   r,   Ú__classcell__r'   r'   r%   r(   r	      s0    ÿñ.
.r	   )r5   Zloggingr7   Zzope.interfaceÚzopeZcertbotr   r   r   Zcertbot.compatr   r   r   r   r   Z	getLoggerr2   r   Z	interfaceZproviderZIPluginFactoryZApacheConfiguratorr	   r'   r'   r'   r(   Ú<module>   s   
