U
    Lôwa¢  ã                   @   sJ   d dl Z e  dd¡ d dlmZmZmZmZ d dlZG dd„ dejƒZdS )é    NÚGoaz1.0)ÚGioÚGLibr   ÚGObjectc                   @   s~   e Zd ZejeddZejeddZdd„ Z	dd„ Z
dd	„ Zd
d„ Zejdd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚGoaAuthF)ÚtypeÚdefaultNc                 C   sP   t j  | ¡ d | _t ¡ | _tj | j| j	¡ tj
 d¡| _| j d| j¡ d S )Nzcom.ubuntu.SoftwarePropertieszchanged::goa-account-id)r   Ú__init__Úaccountr   ZCancellableZcancellabler   ÚClientÚnewÚ_on_goa_client_readyZSettingsÚsettingsÚconnectÚ_on_settings_changed©Úself© r   ú</usr/lib/python3/dist-packages/softwareproperties/GoaAuth.pyr	   "   s    
zGoaAuth.__init__c              
   C   s\   zt j |¡| _W n< tjk
rN } zt d |j	¡¡ d | _W 5 d }~X Y n
X |  
¡  d S )Nz(Failed to get a Gnome Online Account: {})r   r   Z
new_finishÚ
goa_clientr   ÚErrorÚloggingÚerrorÚformatÚmessageÚ_load)r   ÚsourceÚresÚer   r   r   r   ,   s    zGoaAuth._on_goa_client_readyc                 C   s   |st ‚|  |¡ |  ¡  d S ©N)ÚAssertionErrorÚ_update_stateÚ_store©r   r
   r   r   r   Úlogin5   s    
zGoaAuth.loginc                 C   s   |   d ¡ |  ¡  d S r   )r!   r"   r   r   r   r   Úlogout:   s    
zGoaAuth.logoutc                 C   sT   | j d ks| jd krd S | j | j jj¡}|d kr6d S | ¡ }|d krJd S | d¡S )NZ	livepatch)r
   r   Úlookup_by_idÚpropsÚidZget_password_basedZcall_get_password_sync)r   ÚobjZpbasedr   r   r   Útoken>   s    zGoaAuth.tokenc                 C   sh   |rZ| j d k	rZ| j  |¡}|d kr0|  d ¡ d S | ¡ }|d krN|  d ¡ d S |  |¡ n
|  d ¡ d S r   )r   r&   r!   Zget_account)r   Ú
account_idr)   r
   r   r   r   Ú_update_state_from_account_idM   s    

z%GoaAuth._update_state_from_account_idc                    sz   |ˆ _ ˆ j d krd ˆ _dˆ _nXz| d ¡ W n  tk
rL   d ˆ _dˆ _Y n*X ˆ j  d‡ fdd„¡ ˆ j jjˆ _dˆ _d S )NFznotify::attention-neededc                    s   ˆ   ¡ S r   )r%   )ÚoÚvr   r   r   Ú<lambda>j   ó    z'GoaAuth._update_state.<locals>.<lambda>T)r
   ÚusernameÚloggedZcall_ensure_credentials_syncÚ	Exceptionr   r'   Zpresentation_identityr#   r   r   r   r!   ^   s    
zGoaAuth._update_statec                 C   s   |   ¡  d S r   )r   )r   r   Úkeyr   r   r   r   n   s    zGoaAuth._on_settings_changedc                 C   s   | j  d¡}|  |¡ d S )Núgoa-account-id)r   Z
get_stringr,   ©r   r+   r   r   r   r   q   s    zGoaAuth._loadc                 C   s2   | j r | jjj}| j d|¡ n| j dd¡ d S )Nr5   Ú )r2   r
   r'   r(   r   Z
set_stringr6   r   r   r   r"   v   s    
zGoaAuth._store)Ú__name__Ú
__module__Ú__qualname__r   ZPropertyÚboolr2   Ústrr1   r	   r   r$   r%   r*   r,   r!   r   r   r"   r   r   r   r   r      s   
	
r   )	ZgiZrequire_versionZgi.repositoryr   r   r   r   r   r   r   r   r   r   Ú<module>   s   