U
    ܦ\                     @   s   d dl mZ d dlZd dl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 G d	d
 d
eZG dd deZdS )    )absolute_importN   )KeyringBackend)PasswordDeleteError)PasswordSetError	InitErrorKeyringLocked)
properties)DBusGMainLoopc                       s|   e Zd ZdZejejd 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dd Zdd Z  ZS )DBusKeyringz!
    KDE KWallet 5 via D-Bus
    r   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 z|| j| j	 W n0 tjk
r   d}|j
| jd}t|Y nX dtddd	krd
S dS )Ndbuszpython-dbus not installedZmainloopzcannot connect to {bus_name})bus_nameZKDEZXDG_CURRENT_DESKTOP :gffffff@g@)globalsRuntimeErrorr   
SessionBusr
   DBusExceptionget_dbus_message
get_objectr   object_pathformatosgetenvsplit)clsbusexcZtmplmsg r    :/usr/lib/python3/dist-packages/keyring/backends/kwallet.pypriority   s    
zDBusKeyring.priorityc                    s   t t| j|| d| _d S )N)superr   __init__handle)selfargkw	__class__r    r!   r%   2   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usernameZretr    r    r!   _migrate6   sF                 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&   r0   ZisOpenr   r   r
   r   r   r   Z	InterfaceopenZnetworkWalletr1   r   r   r;   )r'   r6   r   ZwIdZ
remote_objer    r    r!   	connectedM   s&    
  


zDBusKeyring.connectedc                 C   sJ   |  |std| j| j||| js,dS | j| j||| j}t|S )z5Get password of the username for the service
        zFailed to unlock the keyring!N)r>   r   r0   hasEntryr&   r1   ZreadPasswordstrr'   r6   r:   r9   r    r    r!   get_passworda   s    
   zDBusKeyring.get_passwordc                 C   s.   |  |std| j| j|||| j dS )z5Set password for the username of the service
        Cancelled by userN)r>   r   r0   r4   r&   r1   rA   r    r    r!   set_passwordm   s    
    zDBusKeyring.set_passwordc                 C   sJ   |  |std| j| j||| js0td| j| j||| j dS )z=Delete the password for the username of the service.
        rC   zPassword not foundN)r>   r   r0   r?   r&   r1   r5   )r'   r6   r:   r    r    r!   delete_passwordv   s
    
zDBusKeyring.delete_password)__name__
__module____qualname____doc__r   pathbasenamesysargvr1   Zwalletr   r   r	   ClassPropertyclassmethodr"   r%   r;   r>   rB   rD   rE   __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 t| jd S )Nr-   )r$   rQ   r"   )r   r*   r    r!   r"      s    zDBusKeyringKWallet4.priority)rF   rG   rH   rI   r   r   r	   rN   rO   r"   rP   r    r    r*   r!   rQ      s   rQ   )Z
__future__r   rL   r   Zbackendr   errorsr   r   r   r   utilr	   r   Zdbus.mainloop.glibr
   ImportErrorAttributeErrorr   rQ   r    r    r    r!   <module>   s   l