
    e                         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 	 d dlZd dlmZ d	 Z G d
 de      Z G d de      Zy# e$ r Y !e$ r Y 'w xY w)    N   )KeyringBackend)SimpleCredential)PasswordDeleteError)PasswordSetError	InitErrorKeyringLocked)
properties)DBusGMainLoopc                      t         t        t        f} t        j                  |       5  t
        j                  d   cddd       S # 1 sw Y   yxY w)z/
    Safely infer an app id from sys.argv.
    r   N)AttributeError
IndexError	TypeError
contextlibsuppresssysargv)alloweds    :/usr/lib/python3/dist-packages/keyring/backends/kwallet.py_id_from_argvr      s>     j)3G			W	% xx{  s   AAc                        e Zd ZdZ e       xs dZdZdZdZe	j                  defd       Z fdZd	 Zd
 Zd Z fdZd Zd Z xZS )DBusKeyringz!
    KDE KWallet 5 via D-Bus
    zPython keyring libraryNzorg.kde.kwalletd5z/modules/kwalletd5returnc                    dt               vrt        d      	 t        j                  t	                     }|j                  | j                        s'| j                  |j                         v st        d      dt        j                  dd      j                  d      v ry	y
# t        j
                  $ r}t        |j                               d }~ww xY w)Ndbuszpython-dbus not installedmainloopzCThe KWallet daemon is neither running nor activatable through D-BusKDEXDG_CURRENT_DESKTOP :gffffff@g@)globalsRuntimeErrorr   
SessionBusr   DBusExceptionget_dbus_messagename_has_ownerbus_namelist_activatable_namesosgetenvsplit)clsbusexcs      r   priorityzDBusKeyring.priority(   s    ":;;	7//=?;C s||,||s99;;U  BII3R8>>sCC !! 	7s33566	7s   B" "C5CCc                 2    t        |   |i | d| _        y )N)super__init__handle)selfargkw	__class__s      r   r4   zDBusKeyring.__init__;   s    #$$    c                    d}g }| j                   j                  | j                  || j                        r8| j                   j	                  | j                  |d| j                        }|j                         D ]  }|d   }|d   }|j                  dd      \  }}| j                   j                  | j                  |||| j                        }|dk(  s[| j                   j                  | j                  ||| j                          | j                   j	                  | j                  |d| j                        }|s2| j                   j                  | j                  || j                         y y y )NPythonz*@*r      @*)
iface	hasFolderr5   appidreadPasswordListitemsrsplitwritePasswordremoveEntryremoveFolder)	r6   service
old_folder
entry_listentrykeypasswordusernamerets	            r   _migratezDBusKeyring._migrate?   s7   

::ZD44Z

J $))+ 	UAh 8$'JJsA$6!'jj..KK(Hdjj !8JJ**4;;
CT	U 44ZdjjJ 

''ZL ' Er:   c                 N   | j                   dk\  r&| j                  j                  | j                         ryt        j                  t                     }d}	 |j                  | j                  | j                        }t        j                  |d      | _        | j                  j                  | j                  j                         || j                        | _         | j                   dk  ry| j                  |       y# t        j                  $ r}t        d|z        d }~ww xY w)Nr   Tr   zorg.kde.KWalletzFailed to open keyring: %s.F)r5   r@   isOpenr   r$   r   
get_objectr(   object_path	InterfaceopennetworkWalletrB   r%   r   rQ   )r6   rI   r.   wId
remote_objes         r   	connectedzDBusKeyring.connectedX   s    ;;!zz  -oo}7	?t7G7GHJ
4EFDJ**//$***B*B*Dc4::VDK ;;?g !! 	?9A=>>	?s   BC> >D$DD$c                    | j                  |      st        d      | j                  j                  | j                  ||| j
                        sy| j                  j                  | j                  ||| j
                        }t        |      S )z,Get password of the username for the serviceFailed to unlock the keyring!N)r\   r	   r@   hasEntryr5   rB   readPasswordstrr6   rI   rO   rN   s       r   get_passwordzDBusKeyring.get_passwordk   si    ~~g& ?@@zz""4;;4::N::**4;;4::V8}r:   c                 p   |t         |   ||      S | j                  |      st        d      | j                  j                  | j                  || j                        D ]S  }| j                  j                  | j                  ||| j                        }t        t        |      t        |            c S  y)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.
        Nr^   )r3   get_credentialr\   r	   r@   	entryListr5   rB   r`   r   ra   )r6   rI   rO   rN   r9   s       r   re   zDBusKeyring.get_credentialu   s     7)'8<<~~g& ?@@

,,T[['4::N 	BHzz..Wh

H $CM3x=AA		Br:   c                     | j                  |      st        d      | j                  j                  | j                  |||| j
                         y)z,Set password for the username of the serviceCancelled by userN)r\   r   r@   rF   r5   rB   rb   s       r   set_passwordzDBusKeyring.set_password   s<    ~~g&"#677

  gx4::Vr:   c                    | j                  |      st        d      | j                  j                  | j                  ||| j
                        st        d      | j                  j                  | j                  ||| j
                         y)z4Delete the password for the username of the service.rh   zPassword not foundN)r\   r   r@   r_   r5   rB   rG   )r6   rI   rO   s      r   delete_passwordzDBusKeyring.delete_password   sf    ~~g&%&9::zz""4;;4::N%&:;;

t{{GXtzzJr:   )__name__
__module____qualname____doc__r   rB   walletr(   rU   r
   classpropertyfloatr0   r4   rQ   r\   rc   re   ri   rk   __classcell__r9   s   @r   r   r      sl     O77EF"H&K  $M2&B*WKr:   r   c                   H     e Zd ZdZdZdZej                   fd       Z xZ	S )DBusKeyringKWallet4z!
    KDE KWallet 4 via D-Bus
    zorg.kde.kwalletdz/modules/kwalletdc                     t         |   dz
  S )Nr=   )r3   r0   )r-   r9   s    r   r0   zDBusKeyringKWallet4.priority   s    w!##r:   )
rl   rm   rn   ro   r(   rU   r
   rq   r0   rs   rt   s   @r   rv   rv      s,     "H%K$ $r:   rv   )r   r*   r   backendr   credentialsr   errorsr   r   r   r	   _compatr
   r   dbus.mainloop.glibr   ImportErrorr   r   r   rv    r:   r   <module>r      sm    
 	  $ * ( ? ?  	0zK. zKz
$+ 
$[  	 		s   
A A"A"!A"