관리-도구
편집 파일: apache.cpython-39.opt-1.pyc
a ����f�WcE�����������������������@���s��d�Z�ddlmZ�ddlZe�e�ZddlZddlm Z �ddl mZmZ�ddl mZ�ddlmZ�ddlmZ�dd lmZmZmZ�dd lmZ�ddlmZmZmZmZ�dd gZe��Z dZ!dZ"dZ#dZ$dZ%G�dd��de�Z&e'��Z(dd��Z)e)��Z*dd��Z+e+��Z,G�dd��de&�Z-G�dd ��d e&�Z.dS�)z(passlib.apache - apache password support�����)�with_statementN)�warn)�exc�registry)�CryptContext)�ExpectedStringError)�htdigest)�render_bytes�to_bytes�is_ascii_codec)�deprecated_method)� join_bytes�unicode�BytesIO�PY3�HtpasswdFile�HtdigestFile����:����#s���: ��skipped�recordc�������������������@���s��e�Zd�ZdZdZdZdZdZdZdZ dZ edd���Zedd���Z ddddd efd d�Zdd ��Zedd���Zejdd���Zedd���Zdd��Zd2dd�Zdd��Zdd��Zdd��Zdd��Zdd ��Zd3d!d"�Zd#d$��Zd%d&��Zd'd(��Zd)d*��Z d+d,��Z!d4d.d/�Z"d0d1��Z#dS�)5�_CommonFilez0common framework for HtpasswdFile & HtdigestFileNFc�����������������K���s,���d|v�rt�d��|�f�i�|��}|�|��|S�)z�create new object from raw string. :type data: unicode or bytes :arg data: database to load, as single string. :param \*\*kwds: all other keywords are the same as in the class constructor �pathz$'path' not accepted by from_string())� TypeError�load_string)�cls�data�kwds�self��r����2/usr/lib/python3.9/site-packages/passlib/apache.py�from_stringK���s ���� z_CommonFile.from_stringc�����������������K���s���|�f�i�|��}|��|��|S�)z�create new object from file, without binding object to file. :type path: str :arg path: local filepath to load from :param \*\*kwds: all other keywords are the same as in the class constructor )�load)r���r���r���r���r���r���r ���� from_path\���s���� z_CommonFile.from_pathT�utf-8c�����������������C���s����|st�dtdd��d}d}nt|�s,td��||�_||�_||�_||�_d|�_|s`t�dtdd��d }|rr|sr|�� ���ni�|�_ g�|�_d�S�) Nz�``encoding=None`` is deprecated as of Passlib 1.6, and will cause a ValueError in Passlib 1.8, use ``return_unicode=False`` instead.������ stacklevelr$���Fz'encoding must be 7-bit ascii compatibler���zp``autoload=False`` is deprecated as of Passlib 1.6, and will be removed in Passlib 1.8, use ``new=True`` insteadT)r����DeprecationWarningr���� ValueError�encoding�return_unicode�autosave�_path�_mtimer"����_records�_source)r���r����newZautoloadr,���r*���r+���r���r���r ����__init__n���s,������ z_CommonFile.__init__c�����������������C���sT���d}|�j�r|d7�}|�jr&|d|�j�7�}|�jdkr>|d|�j�7�}d|�jjt|��|f�S�)N��z autosave=Truez path=%rr$���z encoding=%rz<%s 0x%0x%s>)r,���r-���r*���� __class__�__name__�id)r����tailr���r���r ����__repr__����s���� z_CommonFile.__repr__c�����������������C���s���|�j�S��N)r-����r���r���r���r ���r�������s����z_CommonFile.pathc�����������������C���s���||�j�krd|�_||�_�d�S�)Nr���)r-���r.����r����valuer���r���r ���r�������s���� c�����������������C���s���|�j�S�)z7modify time when last loaded (if bound to a local file))r.���r:���r���r���r ����mtime����s����z_CommonFile.mtimec�����������������C���s<���|�j�std|����|�jr0|�jtj�|�j��kr0dS�|�����dS�)zBReload from ``self.path`` only if file has changed since last loadz%r is not bound to a local fileFT)r-����RuntimeErrorr.����osr����getmtimer"���r:���r���r���r ����load_if_changed����s����z_CommonFile.load_if_changedc�����������������C���s����|durDt�|d�� }d|�_|��|��W�d����q�1�s80����Y��n�|sltdt|�jjd��tdd��|����S�|�j r�t�|�j d��*}t j�|�j �|�_|��|��W�d����q�1�s�0����Y��nt d|�jj���d S�) a���Load state from local file. If no path is specified, attempts to load from ``self.path``. :type path: str :arg path: local file to load from :type force: bool :param force: if ``force=False``, only load from ``self.path`` if file has changed since last load. .. deprecated:: 1.6 This keyword will be removed in Passlib 1.8; Applications should use :meth:`load_if_changed` instead. N�rbr���z�%(name)s.load(force=False) is deprecated as of Passlib 1.6,and will be removed in Passlib 1.8; use %(name)s.load_if_changed() instead.)�namer%���r&���z2%s().path is not set, an explicit path is requiredT)�openr.����_load_linesr����dictr4���r5���r(���rA���r-���r?���r���r@���r>���)r���r����force�fhr���r���r ���r"�������s&����*��*�z_CommonFile.loadc�����������������C���s&���t�||�jd�}d|�_|��t|���dS�)z@Load state from unicode or bytes string, replacing current stater���r���N)r ���r*���r.���rE���r���)r���r���r���r���r ���r�������s����z_CommonFile.load_stringc�����������������C���s����|�j�}i�}g�}d}t|�D�]�\}}|���}|r8|�t�rB||7�}q|||d��\} } | |v�rtt�d| ���||7�}q|r�|�t|f��d}| || <�|�t | f��q|� ��r�|�t|f��||�_||�_dS�)zload from sequence of lists���������z1username occurs multiple times in source file: %rN) � _parse_record� enumerate�lstrip� startswith�_BHASH�logZwarning�append�_SKIPPED�_RECORD�rstripr/���r0���)r����lines�parse�records�sourcer����idx�line�tmp�keyr<���r���r���r ���rE�������s.����z_CommonFile._load_linesc�����������������C���s���t�d��dS�)z)parse line of file into (key, value) pair�!should be implemented in subclassN��NotImplementedError)r���r����linenor���r���r ���rK�����s����z_CommonFile._parse_recordc�����������������C���s.���|�j�}||v�}|||<�|s*|�j�t|f��|S�)z� helper for setting record which takes care of inserting source line if needed; :returns: bool if key already present )r/���r0���rQ���rS���)r���r\���r<���rW����existingr���r���r ����_set_record��s����z_CommonFile._set_recordc�����������������C���s���|�j�r|�jr|�����dS�)z0subclass helper to call save() after any changesN)r,���r-����saver:���r���r���r ���� _autosave!��s����z_CommonFile._autosavec�����������������C���sz���|durBt�|d��}|�|������W�d����qv1�s60����Y��n4|�jrf|��|�j��tj�|�j�|�_nt d|�j j���dS�)zhSave current state to file. If no path is specified, attempts to save to ``self.path``. N�wbz%%s().path is not set, cannot autosave)rD���� writelines�_iter_linesr-���rc���r?���r���r@���r.���r>���r4���r5���)r���r���rH���r���r���r ���rc���&��s����.�z_CommonFile.savec�����������������C���s���t�|�����S�)z)Export current state as a string of bytes)r ���rg���r:���r���r���r ���� to_string4��s����z_CommonFile.to_stringc�����������������c���sF���|�j�}|�jD�]4\}}|tkr$|V��q||vr.q|��|||��V��qdS�)z#iterator yielding lines of databaseN)r/����setr0���rR����_render_record)r���rW����actionZcontentr���r���r ���rg���@��s����z_CommonFile._iter_linesc�����������������C���s���t�d��dS�)z,given key/value pair, encode as line of filer]���Nr^���)r���r\���r<���r���r���r ���rj���[��s����z_CommonFile._render_recordc�����������������C���s���|���|d�S�)z)user-specific wrapper for _encode_field()�user�� _encode_field�r���rl���r���r���r ����_encode_userb��s����z_CommonFile._encode_userc�����������������C���s���|���|d�S�)z*realm-specific wrapper for _encode_field()�realmrm����r���rq���r���r���r ���� _encode_realmf��s����z_CommonFile._encode_realm�fieldc�����������������C���sn���t�|t�r|�|�j�}nt�|t�s,t||��t|�dkrHtd||f���tdd��|D���rjtd||f���|S�)a+��convert field to internal representation. internal representation is always bytes. byte strings are left as-is, unicode strings encoding using file's default encoding (or ``utf-8`` if no encoding has been specified). :raises UnicodeEncodeError: if unicode value cannot be encoded using default encoding. :raises ValueError: if resulting byte string contains a forbidden character, or is too long (>255 bytes). :returns: encoded identifer as bytes ����z%%s must be at most 255 characters: %rc�����������������s���s���|�]}|t�v�V��qd�S�r9���)�_INVALID_FIELD_CHARS)�.0�cr���r���r ���� <genexpr>���rI���z,_CommonFile._encode_field.<locals>.<genexpr>z"%s contains invalid characters: %r) � isinstancer����encoder*����bytesr����lenr)����any)r���r<���Zparamr���r���r ���rn���j��s���� ��z_CommonFile._encode_fieldc�����������������C���s���|�j�r|�|�j�S�|S�dS�)aW��decode field from internal representation to format returns by users() method, etc. :raises UnicodeDecodeError: if unicode value cannot be decoded using default encoding. (usually indicates wrong encoding set for file). :returns: field as unicode or bytes, as appropriate. N)r+����decoder*���r;���r���r���r ���� _decode_field���s����z_CommonFile._decode_field)NT)N)rt���)$r5���� __module__�__qualname__�__doc__r*���r+���r-���r.���r,���r/���r0����classmethodr!���r#���r���r2���r8����propertyr����setterr=���rA���r"���r���rE���rK���rb���rd���rc���rh���rg���rj���rp���rs���rn���r����r���r���r���r ���r���,���sJ��� � # $* r���c������������������C���s����d�}�dD�]}t��|�r|}��q qt��d�r.dnd�}t����|sLt�g�d���t|pTdd|p`|�p`d|�pfd|plddd�}|j|d�|d�d ��|S�) N)�bcrypt�sha256_cryptr����)�portable_apache_24�host_apache_24�linux_apache_24�portable�host� apr_md5_cryptr����)r�����portable_apache_22r����Zhost_apache_22r����Zlinux_apache_22r����r����)r����r����)r���Zhas_os_crypt_supportZhas_backend�_warn_no_bcrypt�clear�updaterF���)Z host_bestrC���r�����defaultsr���r���r ����_init_default_schemes���s,���� ��r����c������������������C���sP���g�d�}�|���t�����|�d�d��dg�|��}tt|��|jd�}�t|�td�dd�S�)N)r����r����Zsha512_cryptZ des_cryptr����Z ldap_sha1Z plaintext����r����)r\���r����Z2y)�schemes�defaultZ bcrypt__ident)�extendr���Zget_supported_os_crypt_schemes�sortedri����indexr����htpasswd_defaults)r����Z preferredr���r���r ����_init_htpasswd_context���s�����r����c�����������������������s����e�Zd�ZdZddef��fdd� Zdd��Zdd��Zd d ��Zdd��Z e d ddd�dd���Zdd��Zdd��Z e d ddd�dd���Zdd��Zdd��Ze d ddd�dd ���Z���ZS�)!r���a���class for reading & writing Htpasswd files. The class constructor accepts the following arguments: :type path: filepath :param path: Specifies path to htpasswd file, use to implicitly load from and save to. This class has two modes of operation: 1. It can be "bound" to a local file by passing a ``path`` to the class constructor. In this case it will load the contents of the file when created, and the :meth:`load` and :meth:`save` methods will automatically load from and save to that file if they are called without arguments. 2. Alternately, it can exist as an independant object, in which case :meth:`load` and :meth:`save` will require an explicit path to be provided whenever they are called. As well, ``autosave`` behavior will not be available. This feature is new in Passlib 1.6, and is the default if no ``path`` value is provided to the constructor. This is also exposed as a readonly instance attribute. :type new: bool :param new: Normally, if *path* is specified, :class:`HtpasswdFile` will immediately load the contents of the file. However, when creating a new htpasswd file, applications can set ``new=True`` so that the existing file (if any) will not be loaded. .. versionadded:: 1.6 This feature was previously enabled by setting ``autoload=False``. That alias has been deprecated, and will be removed in Passlib 1.8 :type autosave: bool :param autosave: Normally, any changes made to an :class:`HtpasswdFile` instance will not be saved until :meth:`save` is explicitly called. However, if ``autosave=True`` is specified, any changes made will be saved to disk immediately (assuming *path* has been set). This is also exposed as a writeable instance attribute. :type encoding: str :param encoding: Optionally specify character encoding used to read/write file and hash passwords. Defaults to ``utf-8``, though ``latin-1`` is the only other commonly encountered encoding. This is also exposed as a readonly instance attribute. :type default_scheme: str :param default_scheme: Optionally specify default scheme to use when encoding new passwords. This can be any of the schemes with builtin Apache support, OR natively supported by the host OS's :func:`crypt.crypt` function. * Builtin schemes include ``"bcrypt"`` (apache 2.4+), ``"apr_md5_crypt"`, and ``"des_crypt"``. * Schemes commonly supported by Unix hosts include ``"bcrypt"``, ``"sha256_crypt"``, and ``"des_crypt"``. In order to not have to sort out what you should use, passlib offers a number of aliases, that will resolve to the most appropriate scheme based on your needs: * ``"portable"``, ``"portable_apache_24"`` -- pick scheme that's portable across hosts running apache >= 2.4. **This will be the default as of Passlib 2.0**. * ``"portable_apache_22"`` -- pick scheme that's portable across hosts running apache >= 2.4. **This is the default up to Passlib 1.9**. * ``"host"``, ``"host_apache_24"`` -- pick strongest scheme supported by apache >= 2.4 and/or host OS. * ``"host_apache_22"`` -- pick strongest scheme supported by apache >= 2.2 and/or host OS. .. versionadded:: 1.6 This keyword was previously named ``default``. That alias has been deprecated, and will be removed in Passlib 1.8. .. versionchanged:: 1.6.3 Added support for ``"bcrypt"``, ``"sha256_crypt"``, and ``"portable"`` alias. .. versionchanged:: 1.7 Added apache 2.4 semantics, and additional aliases. :type context: :class:`~passlib.context.CryptContext` :param context: :class:`!CryptContext` instance used to create and verify the hashes found in the htpasswd file. The default value is a pre-built context which supports all of the hashes officially allowed in an htpasswd file. This is also exposed as a readonly instance attribute. .. warning:: This option may be used to add support for non-standard hash formats to an htpasswd file. However, the resulting file will probably not be usable by another application, and particularly not by Apache. :param autoload: Set to ``False`` to prevent the constructor from automatically loaded the file from disk. .. deprecated:: 1.6 This has been replaced by the *new* keyword. Instead of setting ``autoload=False``, you should use ``new=True``. Support for this keyword will be removed in Passlib 1.8. :param default: Change the default algorithm used to hash new passwords. .. deprecated:: 1.6 This has been renamed to *default_scheme* for clarity. Support for this alias will be removed in Passlib 1.8. Loading & Saving ================ .. automethod:: load .. automethod:: load_if_changed .. automethod:: load_string .. automethod:: save .. automethod:: to_string Inspection ================ .. automethod:: users .. automethod:: check_password .. automethod:: get_hash Modification ================ .. automethod:: set_password .. automethod:: delete Alternate Constructors ====================== .. automethod:: from_string Attributes ========== .. attribute:: path Path to local file that will be used as the default for all :meth:`load` and :meth:`save` operations. May be written to, initialized by the *path* constructor keyword. .. attribute:: autosave Writeable flag indicating whether changes will be automatically written to *path*. Errors ====== :raises ValueError: All of the methods in this class will raise a :exc:`ValueError` if any user name contains a forbidden character (one of ``:\r\n\t\x00``), or is longer than 255 characters. Nc��������������������sv���d|v�r t�dtdd��|�d�}|rT|tv�r<t�d|�tj��t�||�}|j|d�}||�_ t t|��j|fi�|���d�S�)Nr����z{``default`` is deprecated as of Passlib 1.6, and will be removed in Passlib 1.8, it has been renamed to ``default_scheem``.r%���r&���zPHtpasswdFile: no bcrypt backends available, using fallback for default scheme %r)r����) r���r(����popr����r���ZPasslibSecurityWarningr�����get�copy�context�superr���r2���)r���r���Zdefault_schemer����r����r4���r���r ���r2������s ����� ��zHtpasswdFile.__init__c�����������������C���s*���|�����t�}t|�dkr&td|���|S�)Nr%���z/malformed htpasswd file (error reading line %d)�rT����split�_BCOLONr}���r)���)r���r���r`����resultr���r���r ���rK������s�����zHtpasswdFile._parse_recordc�����������������C���s���t�d||�S�)Nz%s:%s �r ���)r���rl����hashr���r���r ���rj������s����zHtpasswdFile._render_recordc��������������������s�����fdd���j�D��S�)z6 Return list of all users in database c��������������������s���g�|�]}����|��qS�r����r����)rw���rl���r:���r���r ���� <listcomp>���rI���z&HtpasswdFile.users.<locals>.<listcomp>)r/���r:���r���r:���r ����users���s����zHtpasswdFile.usersc�����������������C���s���|�j��|�}|��||�S�)a���Set password for user; adds user if needed. :returns: * ``True`` if existing user was updated. * ``False`` if user account was added. .. versionchanged:: 1.6 This method was previously called ``update``, it was renamed to prevent ambiguity with the dictionary method. The old alias is deprecated, and will be removed in Passlib 1.8. )r����r�����set_hash)r���rl����passwordr����r���r���r ����set_password���s����zHtpasswdFile.set_password�1.6�1.8r�����Z deprecatedZremovedZreplacementc�����������������C���s���|���||�S��zset password for user�r�����r���rl���r����r���r���r ���r������s����zHtpasswdFile.updatec�����������������C���s,���z|�j�|��|��W�S��ty&���Y�dS�0�dS�)a��Return hash stored for user, or ``None`` if user not found. .. versionchanged:: 1.6 This method was previously named ``find``, it was renamed for clarity. The old name is deprecated, and will be removed in Passlib 1.8. N)r/���rp����KeyErrorro���r���r���r ����get_hash��s����zHtpasswdFile.get_hashc�����������������C���s<���t�rt|t�r|�|�j�}|��|�}|��||�}|�����|S�)z� semi-private helper which allows writing a hash directly; adds user if needed. .. warning:: does not (currently) do any validation of the hash string .. versionadded:: 1.7 )r���rz����strr{���r*���rp���rb���rd���)r���rl���r����ra���r���r���r ���r������s���� zHtpasswdFile.set_hashr����c�����������������C���s ���|���|�S��zreturn hash for user�r����ro���r���r���r ����find1��s����zHtpasswdFile.findc�����������������C���s4���z|�j�|��|�=�W�n�ty&���Y�dS�0�|�����dS�)z�Delete user's entry. :returns: * ``True`` if user deleted. * ``False`` if user not found. FT)r/���rp���r����rd���ro���r���r���r ����delete8��s����zHtpasswdFile.deletec�����������������C���sl���|���|�}|�j�|�}|du�r"dS�t|t�r8|�|�j�}|�j�||�\}}|rh|durh||�j|<�|�� ���|S�)aM�� Verify password for specified user. If algorithm marked as deprecated by CryptContext, will automatically be re-hashed. :returns: * ``None`` if user not found. * ``False`` if user found, but password does not match. * ``True`` if user found and password matches. .. versionchanged:: 1.6 This method was previously called ``verify``, it was renamed to prevent ambiguity with the :class:`!CryptContext` method. The old alias is deprecated, and will be removed in Passlib 1.8. N) rp���r/���r����rz���r���r{���r*���r����Zverify_and_updaterd���)r���rl���r����r�����okZnew_hashr���r���r ����check_passwordF��s���� zHtpasswdFile.check_passwordr����c�����������������C���s���|���||�S��zverify password for user�r����r����r���r���r ����verifye��s����zHtpasswdFile.verify)r5���r����r����r�����htpasswd_contextr2���rK���rj���r����r����r���r����r����r����r����r����r����r����� __classcell__r���r���r����r ���r�����s.����9� � �c�����������������������s����e�Zd�ZdZdZd+��fdd� Zdd��Zdd��Zd d ��Zdd��Z d d��Z dd��Zd,dd�Zde fdd�Zedddd�dd���Zd-dd�Zde fdd�Zedddd�d d!���Zd.d"d#�Zd$d%��Zde fd&d'�Zeddd(d�d)d*���Z���ZS�)/r���a���class for reading & writing Htdigest files. The class constructor accepts the following arguments: :type path: filepath :param path: Specifies path to htdigest file, use to implicitly load from and save to. This class has two modes of operation: 1. It can be "bound" to a local file by passing a ``path`` to the class constructor. In this case it will load the contents of the file when created, and the :meth:`load` and :meth:`save` methods will automatically load from and save to that file if they are called without arguments. 2. Alternately, it can exist as an independant object, in which case :meth:`load` and :meth:`save` will require an explicit path to be provided whenever they are called. As well, ``autosave`` behavior will not be available. This feature is new in Passlib 1.6, and is the default if no ``path`` value is provided to the constructor. This is also exposed as a readonly instance attribute. :type default_realm: str :param default_realm: If ``default_realm`` is set, all the :class:`HtdigestFile` methods that require a realm will use this value if one is not provided explicitly. If unset, they will raise an error stating that an explicit realm is required. This is also exposed as a writeable instance attribute. .. versionadded:: 1.6 :type new: bool :param new: Normally, if *path* is specified, :class:`HtdigestFile` will immediately load the contents of the file. However, when creating a new htpasswd file, applications can set ``new=True`` so that the existing file (if any) will not be loaded. .. versionadded:: 1.6 This feature was previously enabled by setting ``autoload=False``. That alias has been deprecated, and will be removed in Passlib 1.8 :type autosave: bool :param autosave: Normally, any changes made to an :class:`HtdigestFile` instance will not be saved until :meth:`save` is explicitly called. However, if ``autosave=True`` is specified, any changes made will be saved to disk immediately (assuming *path* has been set). This is also exposed as a writeable instance attribute. :type encoding: str :param encoding: Optionally specify character encoding used to read/write file and hash passwords. Defaults to ``utf-8``, though ``latin-1`` is the only other commonly encountered encoding. This is also exposed as a readonly instance attribute. :param autoload: Set to ``False`` to prevent the constructor from automatically loaded the file from disk. .. deprecated:: 1.6 This has been replaced by the *new* keyword. Instead of setting ``autoload=False``, you should use ``new=True``. Support for this keyword will be removed in Passlib 1.8. Loading & Saving ================ .. automethod:: load .. automethod:: load_if_changed .. automethod:: load_string .. automethod:: save .. automethod:: to_string Inspection ========== .. automethod:: realms .. automethod:: users .. automethod:: check_password(user[, realm], password) .. automethod:: get_hash Modification ============ .. automethod:: set_password(user[, realm], password) .. automethod:: delete .. automethod:: delete_realm Alternate Constructors ====================== .. automethod:: from_string Attributes ========== .. attribute:: default_realm The default realm that will be used if one is not provided to methods that require it. By default this is ``None``, in which case an explicit realm must be provided for every method call. Can be written to. .. attribute:: path Path to local file that will be used as the default for all :meth:`load` and :meth:`save` operations. May be written to, initialized by the *path* constructor keyword. .. attribute:: autosave Writeable flag indicating whether changes will be automatically written to *path*. Errors ====== :raises ValueError: All of the methods in this class will raise a :exc:`ValueError` if any user name or realm contains a forbidden character (one of ``:\r\n\t\x00``), or is longer than 255 characters. Nc��������������������s"���||�_�tt|��j|fi�|���d�S�r9���)� default_realmr����r���r2���)r���r���r����r���r����r���r ���r2�����s����zHtdigestFile.__init__c�����������������C���s<���|�����t�}t|�dkr&td|���|\}}}||f|fS�)Nr����z/malformed htdigest file (error reading line %d)r����)r���r���r`���r����rl���rq���r����r���r���r ���rK�����s����� zHtdigestFile._parse_recordc�����������������C���s���|\}}t�d|||�S�)Nz %s:%s:%s r����)r���r\���r����rl���rq���r���r���r ���rj�����s����zHtdigestFile._render_recordc�����������������C���s"���|d�u�r|�j�}|d�u�rtd��|S�)NzGyou must specify a realm explicitly, or set the default_realm attribute)r����r���rr���r���r���r ����_require_realm��s ����zHtdigestFile._require_realmc�����������������C���s���|���|�}|��|d�S�)Nrq���)r����rn���rr���r���r���r ���rs�����s���� zHtdigestFile._encode_realmc�����������������C���s���|���|�|��|�fS�r9���)rp���rs����r���rl���rq���r���r���r ����_encode_key#��s����zHtdigestFile._encode_keyc��������������������s&���t�dd����jD���}��fdd�|D��S�)z%Return list of all realms in databasec�����������������s���s���|�]}|d��V��qdS�)rJ���Nr����rw���r\���r���r���r ���ry���,��rI���z&HtdigestFile.realms.<locals>.<genexpr>c��������������������s���g�|�]}����|��qS�r���r����)rw���rq���r:���r���r ���r����-��rI���z'HtdigestFile.realms.<locals>.<listcomp>)ri���r/���)r����realmsr���r:���r ���r����*��s����zHtdigestFile.realmsc��������������������s ��������������fdd��jD��S�)z�Return list of all users in specified realm. * uses ``self.default_realm`` if no realm explicitly provided. * returns empty list if realm not found. c��������������������s&���g�|�]}|d����kr���|d���qS�)rJ���r���r����r�����rq���r���r���r ���r����6��s����z&HtdigestFile.users.<locals>.<listcomp>)rs���r/���rr���r���r����r ���r����/��s���� zHtdigestFile.usersc�����������������C���s>���|t�u�rd|�}}|��|�}tj||||�jd�}|��|||�S�)a���Set password for user; adds user & realm if needed. If ``self.default_realm`` has been set, this may be called with the syntax ``set_password(user, password)``, otherwise it must be called with all three arguments: ``set_password(user, realm, password)``. :returns: * ``True`` if existing user was updated * ``False`` if user account added. N�r*���)�_UNSETr����r���r����r*���r�����r���rl���rq���r����r����r���r���r ���r����Q��s ���� zHtdigestFile.set_passwordr����r����r����r����c�����������������C���s���|���|||�S�r����r�����r���rl���rq���r����r���r���r ���r����d��s����zHtdigestFile.updatec�����������������C���s8���|���||�}|�j�|�}|du�r$dS�tr4|�|�j�}|S�)a���Return :class:`~passlib.hash.htdigest` hash stored for user. * uses ``self.default_realm`` if no realm explicitly provided. * returns ``None`` if user or realm not found. .. versionchanged:: 1.6 This method was previously named ``find``, it was renamed for clarity. The old name is deprecated, and will be removed in Passlib 1.8. N)r����r/���r����r���r���r*���)r���rl���rq���r\���r����r���r���r ���r����j��s����zHtdigestFile.get_hashc�����������������C���sP���|t�u�rd|�}}tr,t|t�r,|�|�j�}|��||�}|��||�}|�����|S�)a��� semi-private helper which allows writing a hash directly; adds user & realm if needed. If ``self.default_realm`` has been set, this may be called with the syntax ``set_hash(user, hash)``, otherwise it must be called with all three arguments: ``set_hash(user, realm, hash)``. .. warning:: does not (currently) do any validation of the hash string .. versionadded:: 1.7 N) r����r���rz���r����r{���r*���r����rb���rd���)r���rl���rq���r����r\���ra���r���r���r ���r����}��s���� zHtdigestFile.set_hashr����c�����������������C���s���|���||�S�r����r����r����r���r���r ���r�������s����zHtdigestFile.findc�����������������C���s:���|���||�}z|�j|=�W�n�ty,���Y�dS�0�|�����dS�)z�Delete user's entry for specified realm. if realm is not specified, uses ``self.default_realm``. :returns: * ``True`` if user deleted, * ``False`` if user not found in realm. FT)r����r/���r����rd���)r���rl���rq���r\���r���r���r ���r�������s���� zHtdigestFile.deletec��������������������sB���|��������|�j}��fdd�|D��}|D�] }||=�q&|�����t|�S�)z�Delete all users for specified realm. if realm is not specified, uses ``self.default_realm``. :returns: number of users deleted (0 if realm not found) c��������������������s���g�|�]}|d����kr|�qS�)rJ���r���r�����rq���r���r ���r�������rI���z-HtdigestFile.delete_realm.<locals>.<listcomp>)rs���r/���rd���r}���)r���rq���rW����keysr\���r���r����r ����delete_realm���s���� zHtdigestFile.delete_realmc�����������������C���sX���|t�u�rd|�}}|��|�}|��|�}|�j�||f�}|du�rBdS�tj|||||�jd�S�)a���Verify password for specified user + realm. If ``self.default_realm`` has been set, this may be called with the syntax ``check_password(user, password)``, otherwise it must be called with all three arguments: ``check_password(user, realm, password)``. :returns: * ``None`` if user or realm not found. * ``False`` if user found, but password does not match. * ``True`` if user found and password matches. .. versionchanged:: 1.6 This method was previously called ``verify``, it was renamed to prevent ambiguity with the :class:`!CryptContext` method. The old alias is deprecated, and will be removed in Passlib 1.8. Nr����)r����rp���rs���r/���r����r���r����r*���r����r���r���r ���r�������s���� �zHtdigestFile.check_passwordr����c�����������������C���s���|���|||�S�r����r����r����r���r���r ���r�������s����zHtdigestFile.verify)NN)N)N)N)r5���r����r����r����r����r2���rK���rj���r����rs���r����r����r����r����r����r���r����r����r����r����r����r����r����r����r����r���r���r����r ���r���r��s:���� "� � �)/r����Z __future__r���ZloggingZ getLoggerr5���rP���r?����warningsr���Zpasslibr���r���Zpasslib.contextr���Zpasslib.excr���Zpasslib.hashr���Z passlib.utilsr ���r ���r���Zpasslib.utils.decorr���Zpasslib.utils.compatr ���r���r���r����__all__�objectr����r����rO���rv���rR���rS���r���ri���r����r����r����r����r����r���r���r���r���r���r ����<module>���sB�������)-��c