3
ZJ                 @   s>  d dl Z d dlZd dlZd dlZd dlZd dlmZ ejdd d dlmZ ejdd d dlm	Z	 d dl
Z
d dlT d dlT d dlZejejejd	 d
d Zejd G dd de	jZG dd dZe ZG dd dZedkr:ej  d dlmZ ed eeddj Zed ej d e!eej"ddj  dS )    N)GLibGdkz3.0)r   Gtk)r   )*)domain	localedirc             C   s   | S )N )xr   r   ,/usr/share/system-config-printer/authconn.py<lambda>#   s    r   z1.9.60c               @   sz   e Zd ZedededdZddejjejej	j
ejej	jfddfddZd	d
 Zdd Zdd Zdd Zdd ZdS )
AuthDialogz	Username:z	Password:zDomain:)usernamepasswordr   NFc             C   s$  |d krt d}|d kr ddg}tjj| |||| || _| jtjj | jd | j	d tj
jdd}|jd tj }|jtjtjj |jdd |j|ddd tjjdd}	tj | _|	j| jddd t|}
tj }|j|
 |jd	 |jd |jd g | _xt|
D ]z}|| }tjt | jj||d
}|jdd |j |d|dd tj! }|j"|dk |j |d|dd | jj#| qW | j|
d  j$d |	j|ddd |j|	ddd | j%j|ddd |rtj&j't d}|j(d |	j|ddd || _)| j%j*  d S )NAuthenticationr   r      F   g        r      )labelg      ?   TzRemember password)+_r   Dialog__init__auth_info_requiredset_default_responseResponseTypeOKZset_border_widthZset_resizableZHBoxnewZImageZset_from_stockZSTOCK_DIALOG_AUTHENTICATIONZIconSizeZDIALOGset_alignmentZ
pack_startZVBoxZLabelprompt_labellenZGridZ
insert_rowZinsert_columnZset_row_spacingZset_column_spacingfield_entryrange
AUTH_FIELDgetZattachZEntryZset_visibilityappendZset_activates_defaultvboxZCheckButtonZnew_with_labelZ
set_activeremember_checkboxshow_all)selftitleparentflagsbuttonsr   Zallow_rememberZhboxZimager%   
num_fieldsZgridifieldr   entrycbr   r   r
   r   +   sZ    









zAuthDialog.__init__c             C   s>   | j jd| d  | j jd | j jdd | j jd d S )Nz"<span weight="bold" size="larger">z</span>Tr   )r   
set_markupZset_use_markupr   Zset_line_wrap)r(   promptr   r   r
   
set_promptd   s
    zAuthDialog.set_promptc             C   s0   x*t t| jD ]}| j| j||  qW d S )N)r!   r   r    Zset_text)r(   Z	auth_infor.   r   r   r
   set_auth_infok   s    zAuthDialog.set_auth_infoc             C   s   dd | j D S )Nc             S   s   g | ]}|j  qS r   )Zget_text).0r	   r   r   r
   
<listcomp>p   s    z,AuthDialog.get_auth_info.<locals>.<listcomp>)r    )r(   r   r   r
   get_auth_infoo   s    zAuthDialog.get_auth_infoc             C   s$   y
| j j S  tk
r   dS X d S )NF)r&   Z
get_activeAttributeError)r(   r   r   r
   get_remember_passwordr   s    
z AuthDialog.get_remember_passwordc             C   s   | j j|}| j| j  d S )N)r   indexr    Z
grab_focus)r(   r/   r.   r   r   r
   field_grab_focusx   s    zAuthDialog.field_grab_focus)__name__
__module____qualname__N_r"   r   ZDialogFlagsZMODALSTOCK_CANCELr   CANCELZSTOCK_OKr   r   r4   r5   r8   r:   r<   r   r   r   r
   r   &   s   
4r   c               @   s2   e Zd Zdd Zd
ddZdddZddd	ZdS )_AuthInfoCachec             C   s   t  | _d S )N)dictcreds)r(   r   r   r
   r      s    z_AuthInfoCache.__init__Nc             C   s   |d krd}|| j ||f< d S )Niw  )rE   )r(   datahostportr   r   r
   cache_auth_info   s    z_AuthInfoCache.cache_auth_infoc             C   s4   |d krd}y| j ||f S  tk
r.   d S X d S )Niw  )rE   KeyError)r(   rG   rH   r   r   r
   lookup_auth_info   s    z_AuthInfoCache.lookup_auth_infoc             C   s6   |d krd}y| j ||f= W n tk
r0   d S X d S )Niw  )rE   rJ   )r(   rG   rH   r   r   r
   remove_auth_info   s    z_AuthInfoCache.remove_auth_info)NN)NN)NN)r=   r>   r?   r   rI   rK   rL   r   r   r   r
   rC      s   

	rC   c               @   s   e Zd Zd*ddZdd Zdd	 Zd
d Zdd Zdd Zd+ddZ	dd Z
dd Zdd Zdd Zdd Zd,ddZdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) ZdS )-
ConnectionNTFc             C   s   |d k	rt j| |d k	r$t j| |d k	r6t j| d| _|| _|| _t j | _t j	 | _
t j | _t j | _d| _g | _|| _tj | _| j  d S )N T)cupsZ	setServerZsetPortZsetEncryption_use_password_parent_try_as_rootZgetUser	_use_userZ	getServer_serverZgetPort_portZgetEncryption_encryption_prompt_allowed_operation_stack_lock	threadingZEvent
_gui_event_connect)r(   r*   Ztry_as_rootlockrG   rH   
encryptionr   r   r
   r      s$    







zConnection.__init__c             C   s    t d| |f  | jj| d S )Nz%s: Operation += %s)
debugprintrX   r$   )r(   Z	operationr   r   r
   _begin_operation   s    zConnection._begin_operationc             C   s   t d|   | jj  d S )Nz%s: Operation ended)r_   rX   pop)r(   r   r   r
   _end_operation   s    zConnection._end_operationc             C   s   | j S )N)rW   )r(   r   r   r
   _get_prompt_allowed   s    zConnection._get_prompt_allowedc             C   s
   || _ d S )N)rW   )r(   Zallowedr   r   r
   _set_prompt_allowed   s    zConnection._set_prompt_allowedc             C   s
   || _ d S )N)rY   )r(   Zwhetherr   r   r
   	_set_lock   s    zConnection._set_lockc             C   s   t j| j |o2| jd dks(| jdko2tj dk| _| jrDtj}nt j}|| j| j	| j
d| _| jrt| jj| j | j| _td| j  t| jj}t| jj}xRt| jD ]D}|d dkrqt| j|}t|||gkrqt| || j|| qW d S )Nr   /Z	localhost)rG   rH   r^   zConnected as user %sr   )rO   setUserrS   rT   osgetuid_use_pkcupspkrM   rU   rV   _connectionZ
set_parentrQ   _userr_   typeZgetPrintersZ
addPrinterdirgetattrsetattr_make_binding)r(   allow_pkZcreate_objectZmethodtype_lambdaZmethodtype_realfnamefnr   r   r
   r\      s.    zConnection._connectc             C   s   t | jtjS )N)
isinstancerl   rk   rM   )r(   r   r   r
   _using_polkit   s    zConnection._using_polkitc                s    fddS )Nc                 s   j  f| |S )N)	_authloop)argskwds)ru   rt   r(   r   r
   r      s    z*Connection._make_binding.<locals>.<lambda>r   )r(   rt   ru   r   )ru   rt   r(   r
   rr      s    zConnection._make_bindingc             O   s&  d| _ | j}d}xyf| j dkr$P || jkr@t| j|}| j}tj| j |j||}|dkrv|i krvtjtj	dP W q tjk
r } z8|j
\}}	| jr|	dkrtjdtd| j r|tj	ks|tjks|tjkr| j|tjk n| j r|tjkrtd t|	 | jrF| jj  tjd| j|	 | jj  n
| j|	 | jtjjkrtd	 d
}|  j d8  _ d
| _nd
| _ n8| jr| j rtjdtdtd|t |	f   W Y d d }~X q tj!k
r } z*|j
\}
| js
| j|
tj"k n W Y d d }~X qX qW |S )Nr   FZadminGetServerSettingsrN   ZpkcancelzOperation canceledzGot IPP_SERVICE_UNAVAILABLEr   zretrying operation...Tz%s: %s)#_passesrl   _perform_authenticationrp   rO   rg   rS   __call__IPPErrorZIPP_NOT_AUTHORIZEDry   rj   r   _cancelZIPP_FORBIDDENZIPP_AUTHENTICATION_CANCELED_failedIPP_SERVICE_UNAVAILABLEr_   rY   r[   clearr   timeout_add_ask_retry_server_errorwait_retry_responser   r   r   _has_failed_cannot_authreprZ	HTTPErrorZHTTP_FORBIDDEN)r(   rt   ru   ry   rz   cZretryresultemsr   r   r
   rx      sb    





zConnection._authloopc             C   s   | j rtj  ytd| jd  }W n tk
r@   td}Y nX tj| jddtj	j
tjj|d}|jtd|  |jtjtjjtdtjj |jtjj | j r|jd| j tj  n|j | _|j  d S )	NzCUPS server error (%s)r   zCUPS server errorT)transient_formodaldestroy_with_parentmessage_typer,   textz3There was an error during the CUPS operation: '%s'.ZRetryresponse)rY   r   threads_enterr   rX   
IndexErrorr   MessageDialogrQ   MessageTypeERRORButtonsTypeZNONEZformat_secondary_textZadd_buttonsrA   r   rB   r   r   connect_on_retry_server_error_responsethreads_leaverunr   destroy)r(   messagemsgdr   r   r
   r   ,  s*    


z"Connection._ask_retry_server_errorc             C   s   || _ |j  | jj  d S )N)r   r   r[   set)r(   dialogr   r   r   r
   r   G  s    z*Connection._on_retry_server_error_responsec             C   s   d| _ || _d S )NT)r   
_forbidden)r(   Z	forbiddenr   r   r
   r   L  s    zConnection._failedc             C   s*   t d | js| jrdS d| _|| _| jS )NzGot password callbackrN   T)r_   r   _auth_calledZ_promptrP   )r(   r3   r   r   r
   _password_callbackP  s    zConnection._password_callbackc             C   sT  |  j d7  _ tj| j| jd}|d k	rH|d dks:| jrF|\| _| _~td| j   | j dkrd| _	d| _
d| _d| _d| _d| _tj| j td dS td| j
  | j	std	 dS d| _	| j d
krB| jo| jdko| jd dks| j
rBtd d| _d| _y| jdd W n$ tk
r<   tjtjdY nX dS | js\td d| _dS | js|td d| _d| _dS d| _| jr| jr| jj  tjd| j | jj  n| j  | jr| jj  tjd| j | jj  n| j  | jrtd dS tj | j td y| jdd W n$ tk
rN   tjtjdY nX dS )Nr   )rG   rH   r   rootzAuthentication pass: %dFz%Authentication: password callback setzForbidden: %sz$Authentication: Operation successfulr   rf   zAuthentication: Try as root)rs   z server-error-service-unavailablez%Authentication: prompting not allowedTzAuthentication: giving upZ	cancelledzAuthentication: Reconnect)!r{   global_authinfocacherK   rT   rU   rR   rS   rP   r_   r   r   r   r   r   _dialog_shownrO   ZsetPasswordCBr   rm   r\   RuntimeErrorr~   r   rW   rY   r[   r   r   r   _show_not_authorized_dialogr   #_perform_authentication_with_dialogrg   )r(   rE   r   r   r
   r|   Y  s    

	

z"Connection._perform_authenticationc             C   s   | j rtj  tj| jddtjjtjj	d}|j
td |jdtd d td  | j r|jd| j |j  |j  tj  n|j  |j  d S )NT)r   r   r   r   r,   zNot authorizedz"<span weight="bold" size="larger">z	</span>

zThe password may be incorrect.r   )rY   r   r   r   r   rQ   r   r   r   ZCLOSEZ	set_titler   r2   r   "_on_not_authorized_dialog_responser'   show_nowr   r   r   )r(   r   r   r   r
   r     s"    
z&Connection._show_not_authorized_dialogc             C   s   | j j  |j  d S )N)r[   r   r   )r(   r   r   r   r   r
   r     s    
z-Connection._on_not_authorized_dialog_responsec             C   s   | j rtj  t| jdkr`ytd| jd  }W n tk
rN   td}Y nX t|| jd}nt| jd}|j	d |j
ddg |jd |jd |j  |j  d| _| j r|jd	| j tj  n|j }| j|| d S )
Nr   zAuthentication (%s)r   )r)   r*   )r*   rN   r   Tr   )rY   r   r   r   rX   r   r   r   rQ   r4   r5   r<   Zset_keep_abover'   r   r   r   _on_authentication_responser   r   )r(   r)   r   r   r   r   r
   r     s,    



z.Connection._perform_authentication_with_dialogc             C   sr   |j  \}| _|dkr|| _tj| j| jf| j| jd |j  |tj	j
ksX|tj	jkr^d| _| jrn| jj  d S )NrN   )rG   rH   T)r8   rP   rS   r   rI   rT   rU   r   r   r   rB   ZDELETE_EVENTr   rY   r[   r   )r(   r   r   userr   r   r
   r     s    
z&Connection._on_authentication_response)NTFNNN)T)F)r=   r>   r?   r   r`   rb   rc   rd   re   r\   rw   rr   rx   r   r   r   r   r|   r   r   r   r   r   r   r   r
   rM      s(    

B
	frM   __main__)TimedOperationT)ry   Z	Connected/admin/conf/cupsd.conf/dev/stdout)N)r   r   )#rZ   configrO   rk   ZgiZgi.repositoryr   Zrequire_versionr   r   rh   ZerrordialogsdebuggettextinstallZPACKAGEr   r@   Zrequirer   r   rC   r   rM   r=   Zthreads_initZtimedopsr   Zset_debuggingr   r   r_   re   printZgetFiler   r   r   r
   <module>   s@   
Y  k

 