o
    ÞñÐa  ã                   @   s¦  d dl Z d dl mZmZmZmZ d dlmZ eZG dd„ dƒZe  	edƒ¡Z
e  	edƒ¡Ze  	edƒ¡ZejZee_eeeeeefe_ejZee_eeege_ejZee_eee jge_e
jZee_eefe_e
jZee_eefe_e
jZee_efe_ejZee_efe_ejZee_efe_d	d
„ Zdd„ Zdd„ Zdd„ Zdd„ ZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZ d"dd„Z!dd„ Z"d d!„ Z#dS )#é    N)Úc_void_pÚc_uint32Úc_int32Úbyref)Úfind_libraryc                   @   s    e Zd ZdZdZdZdZdZdS )Úerrori,�ÿÿi€ÿÿÿi3�ÿÿi*úþÿi$�ÿÿN)Ú__name__Ú
__module__Ú__qualname__Úitem_not_foundÚkeychain_deniedÚsec_auth_failedÚplist_missingÚsec_interaction_not_allowed© r   r   ú</usr/lib/python3/dist-packages/keyring/backends/macOS/api.pyr      s    r   ÚSecurityÚCoreServicesÚ
Foundationc                 C   s   t  t| ¡S )N)r   Úin_dllÚ_sec©Úsr   r   r   Úk_B   s   r   c                 C   s$   t d dt t| rdƒ¡ƒS dƒ¡ƒS )Né	   é   r   )ÚCFNumberCreateÚctypesr   r   )Úbr   r   r   Úcreate_cfboolF   s   $r   c                 C   s   t d |  d¡dƒS )NÚutf8i  )ÚCFStringCreateWithCStringÚencoder   r   r   r   Úcreate_cfstrJ   s   ÿr#   c                  K   sN   t d tt| ƒ dd„ |  ¡ D ƒŽ tt| ƒ dd„ |  ¡ D ƒŽ t| ƒtjtjƒS )Nc                 S   s   g | ]}t |ƒ‘qS r   )r   )Ú.0Úkr   r   r   Ú
<listcomp>S   s    z create_query.<locals>.<listcomp>c                 S   s"   g | ]}t |tƒrt|ƒn|‘qS r   )Ú
isinstanceÚstrr#   )r$   Úvr   r   r   r&   U   s   " )ÚCFDictionaryCreater   ÚlenÚkeysÚvaluesÚ_foundÚkCFTypeDictionaryKeyCallBacksÚkCFTypeDictionaryValueCallBacks)Úkwargsr   r   r   Úcreate_queryP   s   
ÿør2   c                 C   s   t  t| ƒt| ƒ¡ d¡S )Nzutf-8)r   Ú	string_atÚCFDataGetBytePtrÚCFDataGetLengthÚdecode)Údatar   r   r   Úcfstr_to_str]   s   ÿr8   c                   @   s   e Zd Zedd„ ƒZdS )ÚErrorc                 C   s\   |dkrd S |t jkrt|dƒ‚|t jkrt|dƒ‚|t jks$|t jkr)t|dƒ‚| |dƒ‚)Nr   zItem not foundzKeychain Access DeniedzDSecurity Auth Failure: make sure python is signed with codesign utilzUnknown Error)r   r   ÚNotFoundr   ÚKeychainDeniedr   r   ÚSecAuthFailure)ÚclsÚstatusr   r   r   Úraise_for_statusd   s   



þ
zError.raise_for_statusN)r   r	   r
   Úclassmethodr?   r   r   r   r   r9   c   s    r9   c                   @   ó   e Zd ZdS )r:   N©r   r	   r
   r   r   r   r   r:   u   ó    r:   c                   @   rA   )r;   NrB   r   r   r   r   r;   y   rC   r;   c                   @   rA   )r<   NrB   r   r   r   r   r<   }   rC   r<   Fc                 C   sV   t tdƒtdƒ||tdƒd�}tƒ }t|t|ƒƒ}|tjkr"|r"d S t 	|¡ t
|ƒS )NÚkSecClassGenericPasswordÚkSecMatchLimitOneT)Ú	kSecClassÚkSecMatchLimitÚkSecAttrServiceÚkSecAttrAccountÚkSecReturnData)r2   r   r   r   ÚSecItemCopyMatchingr   r   r   r9   r?   r8   )Úkc_nameÚserviceÚusernameÚnot_found_okÚqr7   r>   r   r   r   Úfind_generic_password�   s   û
rQ   c                 C   sH   t | ||dd�rt| ||ƒ ttdƒ|||d�}t|d ƒ}t |¡ d S )NT)rO   rD   )rF   rH   rI   ÚkSecValueData)rQ   Údelete_generic_passwordr2   r   Ú
SecItemAddr9   r?   )ÚnamerM   rN   ÚpasswordrP   r>   r   r   r   Úset_generic_password•   s   ü
rW   c                 C   s(   t tdƒ||d�}t|ƒ}t |¡ d S )NrD   )rF   rH   rI   )r2   r   ÚSecItemDeleter9   r?   )rU   rM   rN   rP   r>   r   r   r   rS   ¤   s   ýrS   )F)$r   r   r   r   r   Úctypes.utilr   Ú	OS_statusr   ÚCDLLr   Ú_corer.   r*   ÚrestypeÚargtypesr!   r   rT   rK   rX   r4   r5   r   r   r#   r2   r8   Ú	Exceptionr9   r:   r;   r<   rQ   rW   rS   r   r   r   r   Ú<module>   sd    ú	


