a }|äg<ã@s(dZddlmZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl Z ddl Z ddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZe j e d ¡¡ZGd d„de j ƒZ!Gdd„de j ƒZ"e#dkr$e $e  %ej&dd…e'g¡¡dS)z,Tests for certbot._internal.plugins.webroot.é)Úprint_functionN)Úmock)Ú challenges)Ú achallenges)Úerrors)Ú filesystem)Úos)Úutil)Ú acme_utilzrsa512_key.pemc@sNeZdZdZejejdedZ dd„Z dd„Z dd „Z d d „Z d d „Ze ¡dd„ƒZejejdde ¡dd„ƒƒZejejdde ¡dd„ƒƒZejejdddd„ƒZe ¡dd„ƒZe ¡dd„ƒZe ¡dd„ƒZdd„Zd d!„Ze d"¡d#d$„ƒZ e ¡d%d&„ƒZ!d'd(„Z"d)d*„Z#d+d,„Z$d-d.„Z%d/d0„Z&e d1¡d2d3„ƒZ'd4S)5ÚAuthenticatorTestz:Tests for certbot._internal.plugins.webroot.Authenticator.ú thing.com©ZchallbÚdomainZ account_keycCs–ddlm}t ¡|_tj |jd¡|_t  |j¡tj |jd¡|_ tj |jdd¡|_ tj |j d¡|_ t j|jd|jid|_||jdƒ|_dS) Nr©Ú AuthenticatorÚwebrootú .well-knownúacme-challengeZ:ZXZhR3hmQURzNnBTUmIyTEF2OUlaZjE3RHQzanV4R0orUEN0OTJ3citvQQr )Ú webroot_pathÚ webroot_map)Ú!certbot._internal.plugins.webrootrÚtempfileÚmkdtempZ workspacerÚpathÚjoinrÚmkdirÚpartial_root_challenge_pathÚroot_challenge_pathÚvalidation_pathrÚ MagicMockÚconfigÚauth©Úselfr©r$úP/usr/lib/python3.9/site-packages/certbot/_internal/tests/plugins/webroot_test.pyÚsetUp#s$   ÿÿþÿzAuthenticatorTest.setUpcCst |j¡dS©N)ÚshutilÚrmtreer©r#r$r$r%ÚtearDown8szAuthenticatorTest.tearDowncCs*|j ¡}t|tƒsJ‚|j|vs&J‚dSr')r!Ú more_infoÚ isinstanceÚstrr)r#r,r$r$r%Útest_more_info;s z AuthenticatorTest.test_more_infocCs&t ¡}|j |¡d|jks"J‚dS)Né)rrr!Zadd_parser_argumentsZ call_count)r#Úaddr$r$r%Útest_add_parser_arguments@s z+AuthenticatorTest.test_add_parser_argumentscCs|j ¡dSr')r!Úpreparer*r$r$r%Ú test_prepareEszAuthenticatorTest.test_preparecs¬g|j_d|ji|j_|ƒ}tjdf|j_|j  |j g¡|jj sFJ‚|jj D]>‰|j j ˆddvsjJ‚t‡fdd„|jj ¡DƒƒsNJ‚qN|jj|j j |jks¨J‚dS)Núotherthing.comérc3s|]}|ˆddvVqdS©rr6Nr$©Ú.0r©Úcallr$r%Ú Ssÿz;AuthenticatorTest.test_webroot_from_list..)r rrrÚ display_utilÚOKÚmenuÚ return_valuer!ÚperformÚachallÚcalledÚcall_args_listrÚallÚvalues©r#Úmock_get_utilityÚ mock_displayr$r:r%Útest_webroot_from_listHs    þÿz(AuthenticatorTest.test_webroot_from_listzTest specific to Windows)ÚreasoncCsp|ƒ}tjdf|j_|j |jg¡tj  tj  |j d¡¡s@J‚|j  |jg¡tj  tj  |j d¡¡rlJ‚dS)Nr6ú web.config) r=r>r?r@r!rArBrrÚexistsrrÚcleanuprGr$r$r%Ú(test_webconfig_file_generate_and_cleanupYs z:AuthenticatorTest.test_webconfig_file_generate_and_cleanupc Cs´|ƒ}tjdf|j_tj |jdd¡}t |¡tj |d¡}t |dƒ}|  d¡Wdƒn1sh0Y|j   |j g¡ddlm}| |¡}dd lm}||vs°J‚dS) Nr6rrrLÚwÚ somethingr)Ú crypto_util)Ú_WEB_CONFIG_SHA256SUMS)r=r>r?r@rrrrÚmakedirsÚopenÚwriter!rArBÚcertbotrRZ sha256sumrrS) r#rHrIÚchallenge_pathÚwebconfig_pathÚfilerRZwebconfig_hashrSr$r$r%Ú$test_foreign_webconfig_file_handlingds  (   z6AuthenticatorTest.test_foreign_webconfig_file_handlingcCs¢tjt tjddd¡dtd}|j|jj d<t j  |jdd¡}t   |¡t j  |d¡}t|d ƒ}| d ¡Wdƒn1s‚0Y|j |j|g¡dS) Nóbingo©ÚtokenÚpendingzsecond-thing.comr rrrLrPrQ)rÚ"KeyAuthorizationAnnotatedChallenger Úchall_to_challbrÚHTTP01ÚKEYrr rrrrrTrUrVr!rArB)r#Zachall_2rXrYrZr$r$r%Ú'test_foreign_webconfig_multiple_domainsvsþ  (z9AuthenticatorTest.test_foreign_webconfig_multiple_domainscsÀg|j_d|ji|j_|ƒ}tjdff|j_t  t j ¡ |j   |jg¡Wdƒn1s^0Y|jjstJ‚|jjD]>‰|jjˆddvs˜J‚t‡fdd„|jj ¡Dƒƒs|J‚q|dS)Nr5éÿÿÿÿrc3s|]}|ˆddvVqdSr7r$r8r:r$r%r<’sÿzKAuthenticatorTest.test_webroot_from_list_help_and_cancel..)r rrrr=ÚCANCELr?Ú side_effectÚpytestÚraisesrÚ PluginErrorr!rArBrCrDrrErFrGr$r:r%Ú&test_webroot_from_list_help_and_cancel†s.    þz8AuthenticatorTest.test_webroot_from_list_help_and_cancelcCsšg|j_d|ji|j_|ƒ}tjdf|j_t  d¡8}tj dftj|jff|_ |j   |jg¡Wdƒn1sr0Y|jj|jj|jks–J‚dS)Nú something.comrú'certbot.display.ops.validated_directoryre)r rrrr=r>r?r@rÚpatchrfrgr!rArBr©r#rHrIÚmr$r$r%Útest_new_webroot–s  ÿ.z"AuthenticatorTest.test_new_webrootc Csšg|j_i|j_|ƒ}tjdf|j_t d¡X}tj df|_t   t j ¡ |j |jg¡Wdƒn1sn0YWdƒn1sŒ0YdS)Nrrmre)r rrr=r>r?r@rrnrfrhrirrjr!rArBror$r$r%Ú!test_new_webroot_empty_map_cancel¥s  z3AuthenticatorTest.test_new_webroot_empty_map_cancelcCsLd|j_i|j_t tj¡|j g¡Wdƒn1s>0YdSr') r rrrhrirrjr!rAr*r$r$r%Útest_perform_missing_root±sz+AuthenticatorTest.test_perform_missing_rootc Csútj |jd¡|j_tj |jd¡}t|dƒ}| d¡Wdƒn1sN0Yt |jd¡z6t|dƒWdƒn1sˆ0Yt dƒWnJt yæt   t j¡|j g¡Wdƒn1sØ0YYn0t |jd¡dS) NZnullZrndrPZthingimyrÚrz9Warning, running tests as root skips permissions tests...iÀ)rrrr!Ú full_pathrUrVrÚchmodÚprintÚOSErrorrhrirrjrA)r#Zpermission_canaryÚfr$r$r%Ú"test_perform_reraises_other_errors·s (   0z4AuthenticatorTest.test_perform_reraises_other_errorszJcertbot._internal.plugins.webroot.filesystem.copy_ownership_and_apply_modecCs"ttjdƒ|_|j |jg¡dS)NÚmsg)rxÚerrnoÚEACCESrgr!rArB)r#Zmock_ownershipr$r$r%Útest_failed_chownÇsz#AuthenticatorTest.test_failed_chowncCs¬t ¡}g|j_d|ji|j_|ƒ}tjdftj|ff|j_ t j t j dtd}t d¡*}tj|f|_|j |g¡Wdƒn1sˆ0Y|jj|j|ks¨J‚dS)Nz whatever.comrrlr rm)rrr rrrr=r>r?rgrr`r ÚHTTP01_Prcrrnr@r!rAr)r#rHZ new_webrootrIrBrpr$r$r%Ú#test_perform_new_webroot_not_in_mapÌsÿÿ  ,z5AuthenticatorTest.test_perform_new_webroot_not_in_mapcCs„|j ¡|j |jg¡t |jd¡s,J‚t |j ¡D]2\}}}|D]"}tj   ||¡}t |d¡sFJ‚qFq8t  |j|j ¡s€J‚dS)Ni¤ií) r!r3rArBrZ check_moderrÚwalkrrZhas_same_ownership)r#ÚdirpathÚdirnamesÚ_Z directoryrur$r$r%Útest_perform_permissionsÛs z*AuthenticatorTest.test_perform_permissionscCsØ|j ¡|j |jg¡}dt|ƒks*J‚tj |j¡ss4          :