o
    ‹¨Êh‹  ã                   @   s@   d dl Z d dlmZ d dlmZ d dlmZ G dd„ deƒZdS )é    N)Ú
properties)ÚKeyringBackend)Úerrorsc                   @   sD   e Zd ZdZddd„Zejedd„ ƒƒZdd„ Z	d	d
„ Z
dd„ ZdS )ÚMultipartKeyringWrapperz¾A wrapper around an existing keyring that breaks the password into
    smaller parts to handle implementations that have limits on the maximum
    length of passwords i.e. Windows Vault
    é   c                 C   s   || _ || _d S )N)Ú_keyringÚ_max_password_size)ÚselfÚkeyringÚmax_password_size© r   úD/var/www/html/env/lib/python3.10/site-packages/keyrings/alt/multi.pyÚ__init__   s   
z MultipartKeyringWrapper.__init__c                 C   s   dS )Nr   r   )Úclsr   r   r   Úpriority   s   z MultipartKeyringWrapper.priorityc                 C   s^   | j  ||¡}|r-|g}d}	 | j  |d||f ¡}|r&| |¡ |d7 }nnqd |¡S dS )z5Get password of the username for the service
        é   Tz%s{{part_%d}}Ú N)r   Úget_passwordÚappendÚjoin)r	   ÚserviceÚusernameÚ	init_partÚpartsÚiÚ	next_partr   r   r   r      s    
þ

ø
	z$MultipartKeyringWrapper.get_passwordc           	         sd   t dtˆ ƒˆjƒ}‡ ‡fdd„|D ƒ}t|ƒD ]\}}|}|dkr'|d| 7 }ˆj |||¡ qdS )z5Set password for the username of the service
        r   c                    s   g | ]}ˆ ||ˆj  … ‘qS r   )r   )Ú.0r   ©Úpasswordr	   r   r   Ú
<listcomp>/   s    ÿz8MultipartKeyringWrapper.set_password.<locals>.<listcomp>z{{part_%d}}N)ÚrangeÚlenr   Ú	enumerater   Úset_password)	r	   r   r   r   ÚsegmentsÚpassword_partsr   Úpassword_partÚcurr_usernamer   r   r   r#   +   s   ÿüz$MultipartKeyringWrapper.set_passwordc                 C   sb   | j  ||¡ t d¡}	 dtddt|ƒitƒ ¤Ž }z	| j  ||¡ W n tjy/   Y d S w q)Nr   Tz%(username)s{{part_%(index)d}}Úindexr   )	r   Údelete_passwordÚ	itertoolsÚcountÚdictÚnextÚvarsr   ÚPasswordDeleteError)r	   r   r   r+   Ú	part_namer   r   r   r)   7   s   
ÿÿÿûz'MultipartKeyringWrapper.delete_passwordN)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚClassPropertyÚclassmethodr   r   r#   r)   r   r   r   r   r      s    
r   )r*   Úkeyring.utilr   Úkeyring.backendr   r
   r   r   r   r   r   r   Ú<module>   s
    