Viewing File: /usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyo

ó
V;Xc@`s,dZddlmZmZmZddlZejeƒZddl	Z	ddl
mZm
Z
mZddlmZmZmZddlmZddlmZmZmZddlmZmZmZdd	lmZdd
lm Z m!Z!m"Z"ddl#m$Z$m%Z%dd
dgZ&eekZ'e'r¥ddl(m)Z)m*Z*e+e)e*ƒrhe,de)fƒ‚ne)j-re)j.ƒnddl/mZej0ddgƒne1ƒZ2d„Z3e'ræddl4m5Z5de5fd„ƒYZ6nd„Z7eddfkrej8j9ƒZ:dZ;n?eddfkrCejj9ƒZ:dZ;nejj9ƒZ:dZ;e:j<dd d!e;d"e;ƒdd#l=m>Z>e?d$d%e>j@d&e:jAd"ƒƒjBd%ƒfƒZCde1fd'„ƒYZDd(e eDfd)„ƒYZEdeEfd*„ƒYZFd
eFfd+„ƒYZGd,eEfd-„ƒYZHdS(.stest passlib.ext.djangoi(tabsolute_importtdivisiontprint_functionN(tappstexctregistry(tdjango10_contexttdjango14_contexttdjango16_context(tCryptContext(tDJANGO_VERSIONtMIN_DJANGO_VERSIONtDjangoTranslator(t	iteritemstget_method_functiontu(tmemoized_property(tTestCaset	TEST_MODEthandler_derived_from(tget_handler_casetconditionally_available_hashestDjangoBehaviorTesttExtensionBehaviorTestt_ExtensionSupport(tsettingstLazySettingss4expected django.conf.settings to be LazySettings: %r(Rsdjango.contrib.contenttypessdjango.contrib.authcK`s_xXt|ƒD]J\}}|tkrGtt|ƒrWtt|ƒqWq
tt||ƒq
WdS(s*helper to update django settings from kwdsN(R
tUNSETthasattrRtdelattrtsetattr(tkwdstktv((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pytupdate_settingsEs
(tUsertFakeUsercB`sEeZdZddd„ƒYZed„ƒZd„Zdd„ZRS(s#mock user object for use in testingtMetacB`seZeZRS((t__name__t
__module__t	app_label(((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyR%VscC`sgS(N((tself((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pytsaved_passwordsYscC`sz|jSWd|j2XdS(N(R*(R)((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pytpop_saved_passwords]scC`s|jj|jƒdS(N(R*tappendtpassword(R)t
update_fields((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pytsavecs(N(	R&R't__doc__R%RR*R+tNoneR/(((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyR$Qs
	c`s1g‰‡fd†}‡fd†}||_|S(Nc`sˆj|ƒdS(N(R,(R-(tstate(sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pytsetterisc`sz	ˆSWdˆ2XdS(N(((R2(sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pytpopstateks	(R4(R3R4((R2sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pytcreate_mock_settergs
	ii
i0ui	iÀ]i Nt
deprecatedtautot"django_pbkdf2_sha1__default_roundst$django_pbkdf2_sha256__default_rounds(tdjango_pbkdf2_sha256R:snot a passwordtroundscB`sVeZdZed„ƒZd„Zd	d„ZdddgZe	d„Z
d„ZRS(
s-support funcs for loading/unloading extensioncc`sddlm}m}ddg}ddg}dddddg}||f|j|f||fg}x±|D]©\}}xšt|ƒD]Œ}	|	jd	ƒr¢q‡n|jj|	tƒ}
|
tkrÕ|	|krÕq‡nt	|
ƒ}
t
|
d
dƒ}|r‡||	||	|kfVq‡q‡WqnWdS(sàhelper to scan for monkeypatches.

        returns tuple containing:
        * object (module or class)
        * attribute of object
        * value of attribute
        * whether it should or should not be patched
        i(tmodelsthasherstcheck_passwordtset_passwordt
make_passwordt
get_hashertidentify_hashertget_hasherst_R'N(tdjango.contrib.authR<R=R#tdirt
startswitht__dict__tgetRRtgetattrR1(tclsR<R=t
user_attrstmodel_attrsthasher_attrstobjstobjtpatchedtattrtvaluetsource((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyt_iter_patch_candidates™s&		cC`sªtjjdƒ}|j|o'|jjdƒxu|jƒD]g\}}}}|r||j|jdƒd|||fƒq;|j|jdƒd|||fƒq;WdS(s&test that django is in unpatched statespasslib.ext.django.modelsspatch should not be enabledsdjango.contrib.auth.s#obj=%r attr=%r was not reverted: %rspasslib.s/obj=%r attr=%r should not have been patched: %rN(	tsystmodulesRItassertFalsetadapterRQRUt
assertTrueRG(R)tmodRPRRRTRQ((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pytassert_unpatched½scC`sðtjjdƒ}|j|o'|jjdƒxr|jƒD]d\}}}}|ry|j|dkd|||fƒq;|j|jdƒd|||fƒq;W|dk	rìt
j|ƒ}|j|j
jdtƒ|jdtƒƒndS(	sGhelper to ensure django HAS been patched, and is using specified configspasslib.ext.django.modelsspatch should have been enabledspasslib.ext.django.utilss+obj=%r attr=%r should have been patched: %rspasslib.s/obj=%r attr=%r should not have been patched: %rtresolveN(RVRWRIRZRYRQRURXRGR1R	t_norm_sourcetassertEqualtpassword_contexttto_dicttTrue(R)tcontextR[RPRRRTRQ((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pytassert_patchedÎstPASSLIB_CONFIGtPASSLIB_CONTEXTtPASSLIB_GET_CATEGORYcK`sˆ|jƒ|r1|jdƒp+|jdƒ}nx!|jD]}|j|tƒq;Wt|ddl}|r„|jd|ƒndS(s=helper to load extension with specified config & patch djangoReRfiNRc(tunload_extensionRIt_config_keyst
setdefaultRR"tpasslib.ext.django.modelsRd(R)tcheckRtconfigtkeytpasslib((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pytload_extensionés
!
cC`s]tjjdƒ}|r2|jjƒtjd=nttd„|jDƒƒ|jƒdS(s-helper to remove patches and unload extensionspasslib.ext.django.modelscs`s|]}|tfVqdS(N(R(t.0Rn((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pys	<genexpr>ýsN(	RVRWRIRYtremove_patchR"tdictRiR\(R)R[((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyRhõs

N(R&R'R0tclassmethodRUR\R1RdRiRbRpRh(((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyR”s$	t_ExtensionTestcB`seZd„ZRS(cC`sntt|ƒjƒ|jdƒts8|jdƒ‚ntsP|jdƒ‚n|jƒ|j|jƒdS(NtdefaultsDjango not installedsDjango version too old(	tsuperRutsetUptrequire_TEST_MODER
tskipTestthas_min_djangoRht
addCleanup(R)((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyRxs

(R&R'Rx(((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyRuscB`sPeZdZdZeZeZed„ƒZ	d„Z
edd„Z
d„ZRS(s2tests model to verify it matches django's behaviorsverify django behaviorcC`stj|jƒS(N(R	R^Rm(R)((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyRc&scC`sF|j|jjdƒƒ|j|jƒƒ|j|jƒgƒdS(s=check that user object is set to 'unusable password' constantt!N(RZR-RGRXthas_usable_passwordR_R+(R)tuser((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pytassert_unusable_password*scC`s—|tkr5|j|jdƒ|j|jdƒn|j|j|ƒ|j|jƒd|jfƒ|j|jƒ|dkr‰gn|gƒdS(sécheck that user object has a usuable password hash.

        :param hash: optionally check it has this exact hash
        :param saved: check that mock commit history
                      for user.password matches this list
        R}shash should be usable: %rN(RtassertNotEqualR-R1R_RZR~R+(R)Rthashtsaved((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pytassert_valid_password0scC`s£|j|j}}|j}tƒ}d}d}ddlm}m}m}	m}
|r´ddl	m
}|j|jdt
ƒ|jdt
ƒƒddlm}|j||ƒntƒ}
|
j|ƒ|j|jƒj||
jƒƒ|j|
ƒ||ƒ}|j|jƒj||ƒƒtƒ}
|
jdƒ|
j}|j|jƒjd|ƒƒ|j|
|ƒ|j|
jdƒƒ|j|
|ƒ|j|d|ƒƒtƒ}
|
jƒ|j|
ƒtƒ}
|
jdƒ|j|
ƒ|j|
jdƒƒ|j|
jd	ƒƒ|j|
jdƒƒ|j|
j|ƒƒ|j|
j|ƒƒ|j|
ƒ|j|dƒjd
ƒƒ|j||d
ƒƒ|j|	|
jƒƒ|jt|
|
jƒtƒ}
d|
_|j|
j|ƒƒ|j|
jƒƒ|j||dƒƒ|jt|
dƒx›dD]“}tƒ}
||
_|j|
j|ƒƒ|j|
j|ƒ|j|
jƒgƒ|j|
jƒƒ|j|||ƒƒ|jt|
|ƒq5WxÐ|j ƒD]Â}|j|ƒ}|j|ƒj!}yt"|ƒ}Wnt#j$k
r)qÙnX|j%r9qÙnt&j'|ƒsNqÙnyt(|\}}WnFt)k
rª|dƒj*}x't
r¦|ƒ\}}|r„Pq„q„WnXd
}tƒ}
||
_|j|
jdƒƒ|j|
j|ƒƒ|j|
|ƒ|j|
j|ƒƒ|}|rˆ|j+|
j|ƒ|j|j,|
jƒƒ|j|jƒj||
jƒƒ|j|
d|
jƒn|j|
|ƒt-ddƒr­qÙnt.ƒj/|ƒ}||d|ƒ}|j|j||ƒƒ|j|||d|ƒƒ|j|j0ƒ|r$|gngƒ|j|||d|ƒƒ|j|j0ƒgƒ|j|	|ƒƒt.ƒj1|
|ƒj2ƒ}|j||ƒqÙWdS(stest hashing interface

        this function is run against both the actual django code, to
        verify the assumptions of the unittests are correct;
        and run against the passlib extension, to verify it matches
        those assumptions.
        ttoomanysecretstletmeini(R>R@tis_password_usableRB(R`R](R>tR1R}s$789$fooRxtdontletmeinRƒtmaxRvthasherR3N(Rˆs$789$foo(3RQRmRcR5tdjango.contrib.auth.hashersR>R@R‡RBRkR`R_RaRbtdjango.contrib.auth.modelsR$R?RZthandlertverifyR-R„tset_unusable_passwordR€R1RXRGtassertRaisest
ValueErrorR~t	TypeErrorR+tschemesR6RRtMissingBackendErrortis_disabledRthas_backendt
sample_hashestKeyErrortget_sample_hashRtidentifyRRtpasslib_to_django_nameR4tdjango_to_passlib_namet	algorithm(R)RQRmtctxR3tPASS1tWRONG1R>R@R‡RBR`tcheck_password2RR‚tschemeRŽR6ttestcasetsecretRštothertneeds_updatetalgthash2tname((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyttest_configAsÎ		"	
"
		
		

	


		
			
			"%N(R&R'R0tdescriptionPrefixtFalseRQtstock_configRmtpropertyRcR€RR1R„R«(((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyRs	cB`s8eZdZdZeZeddddƒZd„ZRS(s6test model to verify passlib.ext.django conforms to itsverify extension behaviorR”s sha256_crypt,md5_crypt,des_cryptR6t	des_cryptcC`s*tt|ƒjƒ|jd|jƒdS(NRe(RwRRxRpRm(R)((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyRxPs(	R&R'R0R¬RbRQRsRmRx(((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyRGs	tDjangoExtensionTestcB`s\eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z	d„Z
d	„ZRS(
s&test the ``passlib.ext.django`` pluginspasslib.ext.django pluginc	C`sº|jdddtƒ|jƒ|jdƒ|jdddtƒWdQX|jƒ|jdddtƒ|jdtƒ|jƒ|jdddtƒ|jdtƒ|jƒdS(	s.test set_django_password_context patch/unpatchRetdisabledRls!PASSLIB_CONFIG=None is deprecatedNs
django-1.0Rcs
django-1.4(	RpR­R\tassertWarningListR1RdRRhR(R)((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyttest_00_patch_control[s


cC`sÍd}|jd|ƒddljjj}ddlm}d„}|jj}||j_|j	dƒ|j
jƒWdQX||j_|j}||_|j	dƒ|j
jƒWdQX||_dS(	s(test detection of foreign monkeypatchings[passlib]
schemes=des_crypt
ReiN(RYcS`sdS(N((((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pytdummy‚ss/another library has patched.*User\.set_passwords2another library has patched.*models:check_password(
RpRtcontribtauthR<RkRYR#R?R³t_managert	check_allR>(R)RmR<RYRµtorig((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyttest_01_overwrite_detectionus			cC`srddlm}tƒj}tdkr>|jt|dƒn|dƒ}|j||jƒ|dƒ}|j||j	ƒddl
m}|dƒ}|j|j
d	ƒ|jd
ƒ}|j|jd
|ƒƒ|j|jd
|ƒƒ|j|jd|ƒƒ|jd
dddƒ}|j|dƒ|j|j|ƒidd6tdƒd6dd6tdƒd6ƒdS(s'test Hasher-compatible handler wrappersi(R=ii
thex_md5t
django_bcrypt(tsha256_cryptR¾tpasslib_sha256_crypttstubtxxxxtabcdiR;iÒsK$5$rounds=1234$abcdabcdabcdabcd$v2RWkZQzctPdejyRqmmTDQpZN6wTh7.RUy9zF2LftT6Ržsabcdab**********tsalts+v2RWkZ*************************************R‚N(ii
tabcdabcdabcdabcd(RER=Rtpasslib_to_djangoR
R‘R’tassertIsInstancetUnsaltedMD5PasswordHashertBCryptPasswordHashertpasslib.hashR¾R_RžtencodeRZRRXtsafe_summaryR(R)R=RÅR‹R¾tencoded((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyttest_02_handler_wrapper“s,

c	C`sZ|jdƒ|jdddtƒWdQX|jƒ|jdddtƒ|jƒdS(stest PASSLIB_CONFIG='disabled's!PASSLIB_CONFIG=None is deprecatedReRlNR²(R³RpR1R­R\(R)((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyttest_11_config_disabled¼s

cC`ss|jdddtƒt}|j|ƒ|jdddtƒ|jtƒ|jdddtƒ|jtƒdS(stest PASSLIB_CONFIG='<preset>'Rfsdjango-defaultRlRes
django-1.0s
django-1.4N(RpR­RRdRR(R)RŸ((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyttest_12_config_presetsÇs

cC`s€ddlm}tj|ƒ}|jƒ|j|ƒ|jdddtƒ|j|ƒ|jd|dtƒ|j|ƒdS(s$test PASSLIB_CONFIG default behaviori(tPASSLIB_DEFAULTRfspasslib-defaultRlN(tpasslib.ext.django.utilsRÐR	tfrom_stringRpRdR­(R)RÐRv((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyttest_13_config_defaultsÔs


cC`sZtdddtƒ|jttdƒ|jƒtdddtƒ|jttdƒdS(stest PASSLIB_CONFIG type checksRfi{Respasslib.ext.django.modelssmissing-presetN(R"RR‘R“t
__import__RhR’(R)((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyttest_14_config_invalidäs

c	`sÁtddgddddddƒ}d	d
lm‰‡fd†}|jd|ƒ|j|ƒdƒ|j|d
tƒdƒ|j|dtƒdƒd„}|jd|d|ƒ|j|ƒdƒ|j|ddƒdƒ|j|ddƒdƒ|j|ddƒdƒd„}|jd|d|ƒ|j|ƒdƒ|j|ddƒdƒ|j|ddd
tƒdƒ|j|dddtƒdƒ|jt|jd|ddƒdS(s#test PASSLIB_GET_CATEGORY parameterR”R¾tsha256_crypt__default_roundsièt#staff__sha256_crypt__default_roundsiÐt'superuser__sha256_crypt__default_roundsi¸i(R¾c`s,t|}|jdƒˆj|jƒjS(s;helper to take in user opts, return rounds used in passwordRÀ(R$R?RÒR-R;(RR(R¾(sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pytrunûs
Retis_stafftis_superusercS`s
|jpdS(N(t
first_nameR1(R((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pytget_categorysRfRgRÜR¦tstafft	superusercS`sdS(N(R1(R((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyRÝstxN(RsRÉR¾RpR_RbR‘R“(R)RmRÙRÝ((R¾sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyttest_21_category_settingðs6				(R&R'R0R¬R´R»RÍRÎRÏRÓRÕRá(((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyR±Ts			)		
		(IR0t
__future__RRRtloggingt	getLoggerR&tlogRVRoRt_appsRRtpasslib.appsRRRtpasslib.contextR	RÑR
RRtpasslib.utils.compatR
RRtpasslib.utils.decorRtpasslib.tests.utilsRRRtpasslib.tests.test_handlersRRt__all__R{tdjango.confRRt
isinstancetRuntimeErrort
configuredt	configuretdjango.appstpopulatetobjectRR"RR#R$R5tdjango110_contextRaR®tstock_roundstupdateRÉR:RstusingRIR‚R˜RRuRRR±(((sA/usr/lib/python2.7/site-packages/passlib/tests/test_ext_django.pyt<module>sj	

							rÿ-
Back to Directory File Manager