U
    [e                     @   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,ii3i*i$N)__name__
__module____qualname__item_not_foundkeychain_deniedsec_auth_failedplist_missingZsec_interaction_not_allowed r   r   \/var/www/html/services/stratfitenv/lib/python3.8/site-packages/keyring/backends/macOS/api.pyr      s
   r   ZSecurityZCoreServicesZ
Foundationc                 C   s   t t| S )N)r   Zin_dll_secsr   r   r   k_B   s    r   c                 C   s   t d dtt| rdn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_foundZkCFTypeDictionaryKeyCallBacksZkCFTypeDictionaryValueCallBacks)kwargsr   r   r   create_queryP   s    
r+   c                 C   s   t t| t| dS )Nzutf-8)r   Z	string_atCFDataGetBytePtrCFDataGetLengthdecode)datar   r   r   cfstr_to_str]   s    r0   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r4t|d|t jksH|t jkrRt|d| |dd S )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
   classmethodr7   r   r   r   r   r1   c   s   r1   c                   @   s   e Zd ZdS )r2   Nr   r	   r
   r   r   r   r   r2   u   s   r2   c                   @   s   e Zd ZdS )r3   Nr9   r   r   r   r   r3   y   s   r3   c                   @   s   e Zd ZdS )r4   Nr9   r   r   r   r   r4   }   s   r4   Fc                 C   sV   t tdtd||tdd}t }t|t|}|tjkrD|rDd S t	| t
|S )NkSecClassGenericPasswordZkSecMatchLimitOneT)	kSecClassZkSecMatchLimitkSecAttrServicekSecAttrAccountZkSecReturnData)r+   r   r   r   SecItemCopyMatchingr   r   r   r1   r7   r0   )Zkc_nameserviceusernamenot_found_okqr/   r6   r   r   r   find_generic_password   s    
rC   c                 C   sH   t | ||ddrt| || ttd|||d}t|d }t| d S )NT)rA   r:   )r;   r<   r=   ZkSecValueData)rC   delete_generic_passwordr+   r   
SecItemAddr1   r7   )namer?   r@   passwordrB   r6   r   r   r   set_generic_password   s    
rH   c                 C   s(   t td||d}t|}t| d S )Nr:   )r;   r<   r=   )r+   r   SecItemDeleter1   r7   )rF   r?   r@   rB   r6   r   r   r   rD      s    rD   )F)$r   r   r   r   r   ctypes.utilr   Z	OS_statusr   CDLLr   Z_corer)   r%   restypeZargtypesr   r   rE   r>   rI   r,   r-   r   r   r   r+   r0   	Exceptionr1   r2   r3   r4   rC   rH   rD   r   r   r   r   <module>   sb   	


