U
    ˜­“]û)  ã                   @   sÈ   d 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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 G d	d
„ d
ejƒZG dd„ deƒZddd„Zdd„ ZdS )z$Common utilities for certbot_apache.é    N)Úos)Úutil)Úcommon©Úconfigurator)Ú
entrypoint)Úobjc                       s&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )	Ú
ApacheTestú!debian_apache_2_4/multiple_vhostsú)debian_apache_2_4/multiple_vhosts/apache2ú9debian_apache_2_4/multiple_vhosts/apache2/sites-availablec                    sø   t t| ƒ ¡  tj|dd\| _| _| _tj	 
| j|¡| _tj	 
| j|¡| _tj t d¡¡| _t| j|| j| jƒ| _tj	 
| jd¡}tj	 |¡s–d S t |¡D ]R}|dkr®q tj	 
||¡}tj	 |¡s t |¡ tj	 
tj	jd|¡}t ||¡ q d S )Nzcertbot_apache.tests)Útest_dirÚpkgzrsa512_key.pemzsites-enabledúnon-symlink.confzsites-available)Úsuperr	   ÚsetUpr   Z	dir_setupÚtemp_dirÚ
config_dirÚwork_dirr   ÚpathÚjoinÚconfig_pathÚ
vhost_pathÚjoseZJWKRSAÚloadÚ	test_utilZload_vectorZ	rsa512jwkÚget_apache_configuratorÚconfigÚexistsÚlistdirÚislinkÚremoveÚpardirÚsymlink)Úselfr   Úconfig_rootÚ
vhost_rootZsites_enabledZvhost_basenameZvhostÚtarget©Ú	__class__© ú;/usr/lib/python3/dist-packages/certbot_apache/tests/util.pyr      s:    þ
ÿ ÿ
  ÿzApacheTest.setUpc                 C   s(   t  | j¡ t  | j¡ t  | j¡ d S )N)ÚshutilZrmtreer   r   r   )r$   r*   r*   r+   ÚtearDown;   s    zApacheTest.tearDown)r
   r   r   )Ú__name__Ú
__module__Ú__qualname__r   r-   Ú__classcell__r*   r*   r(   r+   r	      s
      þ$r	   c                       s   e Zd Zd‡ fdd„	Z‡  ZS )Ú
ParserTestr
   r   r   c              	      s€   t t| ƒ |||¡ tj t tj	d¡¡ ddl
m} tjtjjtjjB d| _t d¡ || j| j| jd| _W 5 Q R X d S )NFr   )ÚApacheParser)Úflagsú;certbot_apache.parser.ApacheParser.update_runtime_variablesr   )r   r2   r   ÚzopeZ	componentZprovideUtilityÚdisplay_utilZFileDisplayÚsysÚstdoutZcertbot_apache.parserr3   ÚaugeasZAugeasZNONEZNO_MODL_AUTOLOADZaugÚmockÚpatchr   r   r   Úparser)r$   r   r%   r&   r3   r(   r*   r+   r   C   s    ÿÿ  ÿzParserTest.setUp)r
   r   r   )r.   r/   r0   r   r1   r*   r*   r(   r+   r2   A   s      þr2   ©é   é   é   Úgenericc                 C   sô   t j |d¡}tj| dd| d||dt j |d¡t j |d¡|d}t d¡ž t d	¡ˆ}	d
|	_t d¡l ztj| }
W n t	k
r”   t
j}
Y nX |
|d|d}|s´||
jd< n||j_|
jd |j_| ¡  W 5 Q R X W 5 Q R X W 5 Q R X |S )zCreate an Apache Configurator with the specified options.

    :param conf: Function that returns binary paths. self.conf in Configurator

    ÚbackupsNz-le-ssl.conféP   Ztemp_checkpointsZIN_PROGRESS)Zapache_server_rootÚapache_vhost_rootZapache_le_vhost_extZapache_challenge_locationZapache_enmodZ
backup_dirr   Zhttp01_portZtemp_checkpoint_dirZin_progress_dirr   z+certbot_apache.configurator.util.run_scriptz+certbot_apache.configurator.util.exe_existsTr5   Zapache)r   ÚnameÚversionr&   Zctl)r   r   r   r;   Z	MagicMockr<   Zreturn_valuer   ZOVERRIDE_CLASSESÚKeyErrorr   ZApacheConfiguratorZOS_DEFAULTSr   rE   Z
apache_ctlZprepare)r   r   r   r   rG   Zos_infoZconf_vhost_pathrC   Zmock_le_configZmock_exe_existsZconfig_classr   r*   r*   r+   r   T   s@    
õ
ÿ&r   c                 C   s  |dkrêt j | |d¡}d| }t t j |d¡t j |d¡ttj d¡gƒddd	¡t t j |d
¡t j |d¡ttj d¡gƒdd¡t t j |d¡t j |d¡ttj d¡tj d¡gƒddd¡tjt j |d¡t j |d¡ttj d¡gƒddddgdtjt j |d¡t j |d¡ttj d¡gƒddddt t j |d¡t j |d¡ttj d¡gƒdd¡tjt j |d¡t j |d¡ttj d¡gƒddddgdt t j |d¡t j |d¡ttj d ¡gƒddd!¡t t j |d"¡t j |d#¡ttj d¡gƒddd$¡t t j |d¡t j |d%¡ttj d¡gƒddd&¡t t j | |d'¡dt j | |d(¡ ttj d¡gƒddd)¡t t j |d*¡t j |d+¡ttj d,¡gƒddd-¡t t j |d.¡t j |d/¡ttj d ¡gƒddd-¡g}|S |d0krt j | |d1¡}d| }t t j |d2¡t j |d3¡ttj d¡gƒddd¡t t j |d2¡t j |d4¡ttj d¡gƒddd5¡t t j |d6¡t j |d7¡ttj d¡gƒddd8¡t t j |d6¡t j |d9¡ttj d¡gƒddd:¡t t j |d6¡t j |d;¡ttj d¡gƒddd<¡g}|S d=S )>z4Return the ground truth for the specified directory.r
   zapache2/sites-enabledz/fileszencryption-example.confz#encryption-example.conf/Virtualhostz*:80FTzencryption-example.demozdefault-ssl.confz%default-ssl.conf/IfModule/VirtualHostz_default_:443z000-default.confz000-default.conf/VirtualHostz[::]:80zip-172-30-0-17zcertbot.confzcertbot.conf/VirtualHostzcertbot.demozwww.certbot.demo)Úaliaseszmod_macro-example.confz(mod_macro-example.conf/Macro/VirtualHost)Zmodmacrozdefault-ssl-port-only.confz/default-ssl-port-only.conf/IfModule/VirtualHostzwildcard.confzwildcard.conf/VirtualHostz*.blue.purple.comzocsp-ssl.confz"ocsp-ssl.conf/IfModule/VirtualHostz10.2.3.4:443zocspvhost.comr   znon-symlink.conf/VirtualHostznonsym.linkz&default-ssl-port-only.conf/VirtualHostÚ zapache2/apache2.confz apache2/apache2.conf/VirtualHostzvhost.in.rootconfzduplicatehttp.confzduplicatehttp.conf/VirtualHostz10.2.3.4:80zduplicate.example.comzduplicatehttps.confz(duplicatehttps.conf/IfModule/VirtualHostzdebian_apache_2_4/multi_vhostszapache2/sites-availablezdefault.confzdefault.conf/VirtualHost[1]zdefault.conf/VirtualHost[2]zbanana.vomit.comzmulti-vhost.confzmulti-vhost.conf/VirtualHost[1]z1.multi.vhost.tldz%multi-vhost.conf/IfModule/VirtualHostz2.multi.vhost.tldzmulti-vhost.conf/VirtualHost[2]z3.multi.vhost.tldN)r   r   r   r   ZVirtualHostÚsetZAddrZ
fromstring)r   Zconfig_nameÚprefixZaug_preZvh_truthr*   r*   r+   Úget_vh_truth‚   s^   
  ÿ  üÿ  ü
ÿ  û   üÿ  û  ü   ü  ü  üÿ   ü
ÿÿ  ú  ü  ü¿F
  ÿ  ü  ü  ü  ü  üërM   )r>   rB   N)Ú__doc__r,   r8   Zunittestr:   Zjosepyr   r;   Zzope.componentr6   Zcertbot.compatr   Zcertbot.displayr   r7   Zcertbot.pluginsr   Zcertbot.testsr   Zcertbot_apacher   r   r   ZTestCaser	   r2   r   rM   r*   r*   r*   r+   Ú<module>   s*   ,   ü
.