�
I�gF� � � � d Z ddlmZ ddlZddlZ ej e� � ZddlZddl Z ddl
mZ ddlm
Z
ddlmZ ddlmZmZmZ ddlmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZm Z m!Z! dd l"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) dd
l*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m0Z0m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8 g d�Z9e$Z:e#Z;e%Z<e'Z=e(Z>d
� Z?dDd�Z@d� ZAd� ZB e-d� � ZC e-d� � ZDd� ZEd� ZFeCdfd�ZGeCdddfd�ZHdEd�ZI e-d� � fd�ZJ e-d� � dfd�ZKdFd �ZLdGd!�ZM dHd#�ZN G d$� d%e� � ZO G d&� d'eO� � ZP G d(� d)eO� � ZQ G d*� d+eQ� � ZR G d,� d-eQ� � ZS G d.� d/eQ� � ZT G d0� d1eQ� � ZU G d2� d3eQ� � ZV G d4� d5eQ� � ZW G d6� d7eW� � ZX G d8� d9eQ� � ZY G d:� d;eQ� � ZZ e j[ � � Z\ G d<� d=e� � Z] G d>� d?e]� � Z^ G d@� dAe]eQ� � Z_ G dB� dCe`� � ZadS )IzRpasslib.handler - code for implementing handlers, and global registry for handlers� )�with_statementN)�warn)�MissingBackendError�PasslibConfigWarning�PasslibHashWarning)�PasswordHash)�get_crypt_handler)�consteq�
getrandstr�getrandbytes�rng�
to_native_str�is_crypt_handler�
to_unicode�MAX_PASSWORD_SIZE�accepts_keyword�as_bool�update_mixin_classes)�BASE64_CHARS�HASH64_CHARS�PADDED_BASE64_CHARS� HEX_CHARS�UPPER_HEX_CHARS�LOWER_HEX_CHARS�ALL_BYTE_VALUES)�join_byte_values�irange�u�native_string_types�
uascii_to_str�join_unicode�unicode�
str_to_uasciir! �unicode_or_bytes_types�PY2� int_types)�
classproperty�deprecated_method)� parse_mc2� parse_mc3�
render_mc2�
render_mc3�GenericHandler�
StaticHandler�HasUserContext�HasRawChecksum�
HasManyIdents�HasSalt�
HasRawSalt� HasRounds�HasManyBackends�
PrefixWrapperc �r � |r4| r2ddl }t | |j t |� � d� � z � � S dS )zhelper for bitsize() methodsr N� )�math�int�log�len)�count�charsr9 s �f/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/passlib/utils/handlers.py�_bitsizer@ J sF � �� �� ������5�8�4�8�C��J�J��2�2�2�3�3�3��q� � c � � t j � � }| } |rd|j � dd� � }|� d� � s|� d� � st d|� � ~S |dz
}|j }|�d| ~S # ~w xY w)zi
try to guess stacklevel for application warning.
looks for first frame not part of passlib.
�__name__� zpasslib.tests.zpasslib.rB )�inspect�currentframe� f_globals�get�
startswith�max�f_back)�start�framer= �names r? �guess_app_stacklevelrP R s� � �
� �"�"�E�
�F�E� �� !��?�&�&�z�2�6�6�D����/�0�0�
%����
�8S�8S�
%��1�e�}�}�
�E�
�Q�J�E��L�E� � !� ��E��E� � � � s �AB �0B �Bc �z � t dt | j �� � z t t d� � �� � d S )Nz�passing settings to %(handler)s.hash() is deprecated, and won't be supported in Passlib 2.0; use '%(handler)s.using(**settings).hash(secret)' instead)�handlerr8 )�
stacklevel)r �dictrO �DeprecationWarningrP )rR �kwdss r? �warn_hash_settings_deprecationrW d sU � ��
D�FJ�SZ�S_�F`�F`�F`�
a� �(<�Q�(?�(?�A� A� A� A� A� ArA c � ��� t | j � � �t ��fd�t �� � D � � � � S )z�
helper to extract settings kwds from mix of context & settings kwds.
pops settings keys from kwds, returns them as a dict.
c 3 �N �K � | ]}|�v�|�� |� � fV � � d S �N)�pop)�.0�key�context_keysrV s ��r? � <genexpr>z(extract_settings_kwds.<locals>.<genexpr>o s<