U
    [e                     @   s   d dl Z d dlZd dlZddlmZ ddlmZ ddlmZ ddlm	Z	m
Z
mZ ddlmZ zd dlZd dlmZ W n& ek
r   Y n ek
r   Y nX d	d
 ZG dd deZG dd deZdS )    N   )KeyringBackend)SimpleCredential)PasswordDeleteError)PasswordSetError	InitErrorKeyringLocked)
properties)DBusGMainLoopc               
   C   s6   t ttf} t|  tjd W  5 Q R  S Q R X dS )z/
    Safely infer an app id from sys.argv.
    r   N)AttributeError
IndexError	TypeError
contextlibsuppresssysargv)allowed r   Z/var/www/html/services/stratfitenv/lib/python3.8/site-packages/keyring/backends/kwallet.py_id_from_argv   s    
r   c                       s|   e Zd ZdZe pdZdZdZdZe	j
edd Z fdd	Zd
d Zdd Zdd Z fddZdd Zdd Z  ZS )DBusKeyringz!
    KDE KWallet 5 via D-Bus
    zPython keyring libraryNzorg.kde.kwalletd5z/modules/kwalletd5c              
   C   s   dt  krtdztjt d}W n0 tjk
rT } zt| W 5 d }~X Y nX || jsx| j|	 ksxtddt
dddkrd	S d
S )Ndbuszpython-dbus not installedZmainloopzCThe KWallet daemon is neither running nor activatable through D-BusZKDEZXDG_CURRENT_DESKTOP :gffffff@g@)globalsRuntimeErrorr   
SessionBusr
   DBusExceptionZget_dbus_messageZname_has_ownerbus_nameZlist_activatable_namesosgetenvsplit)clsbusexcr   r   r   priority(   s     

zDBusKeyring.priorityc                    s   t  j|| d| _d S )N)super__init__handle)selfargkw	__class__r   r   r)   <   s    zDBusKeyring.__init__c           	      C   s   d}g }| j | j|| jr| j | j|d| j}| D ]Z}|d }|d }|dd\}}| j | j|||| j}|dkr:| j | j||| j q:| j | j|d| j}|s| j 	| j|| j d S )NPythonz*@*r      @*)
ifaceZ	hasFolderr*   appidZreadPasswordListitemsrsplitwritePasswordremoveEntryZremoveFolder)	r+   serviceZ
old_folderZ
entry_listentrykeypasswordusernameretr   r   r   _migrate@   s<              zDBusKeyring._migratec              
   C   s   | j dkr| j| j rdS tjt d}d}z<|| j| j}t	|d| _| j
| j || j| _ W n0 tjk
r } ztd| W 5 d }~X Y nX | j dk rdS | | dS )Nr   Tr   zorg.kde.KWalletzFailed to open keyring: %s.F)r*   r4   ZisOpenr   r   r
   Z
get_objectr   object_pathZ	InterfaceopenZnetworkWalletr5   r   r   r@   )r+   r:   r$   ZwIdZ
remote_objer   r   r   	connectedY   s    


zDBusKeyring.connectedc                 C   sJ   |  |std| j| j||| js,dS | j| j||| j}t|S )z,Get password of the username for the serviceFailed to unlock the keyring!N)rD   r   r4   hasEntryr*   r5   readPasswordstrr+   r:   r>   r=   r   r   r   get_passwordl   s    
zDBusKeyring.get_passwordc                    sp   |dk	rt  ||S | |s(td| j| j|| jD ].}| j| j||| j}t	t
|t
|  S dS )a  Gets the first username and password for a service.
        Returns a Credential instance

        The username can be omitted, but if there is one, it will forward to
        get_password.
        Otherwise, it will return the first username and password combo that it finds.
        NrE   )r(   get_credentialrD   r   r4   Z	entryListr*   r5   rG   r   rH   rI   r.   r   r   rK   v   s    
   zDBusKeyring.get_credentialc                 C   s.   |  |std| j| j|||| j dS )z,Set password for the username of the serviceCancelled by userN)rD   r   r4   r8   r*   r5   rI   r   r   r   set_password   s    
zDBusKeyring.set_passwordc                 C   sJ   |  |std| j| j||| js0td| j| j||| j dS )z4Delete the password for the username of the service.rL   zPassword not foundN)rD   r   r4   rF   r*   r5   r9   )r+   r:   r>   r   r   r   delete_password   s
    
zDBusKeyring.delete_password)__name__
__module____qualname____doc__r   r5   Zwalletr   rA   r	   ClassPropertyclassmethodr&   r)   r@   rD   rJ   rK   rM   rN   __classcell__r   r   r.   r   r      s   

r   c                       s2   e Zd ZdZdZdZeje fddZ	  Z
S )DBusKeyringKWallet4z!
    KDE KWallet 4 via D-Bus
    zorg.kde.kwalletdz/modules/kwalletdc                    s   t  jd S )Nr1   )r(   r&   )r#   r.   r   r   r&      s    zDBusKeyringKWallet4.priority)rO   rP   rQ   rR   r   rA   r	   rS   rT   r&   rU   r   r   r.   r   rV      s   rV   )r   r    r   backendr   credentialsr   errorsr   r   r   r   utilr	   r   Zdbus.mainloop.glibr
   ImportErrorr   r   r   rV   r   r   r   r   <module>   s"   	~