
    HffK                        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 d dl d dlZ ej                  ej                  ej                   	       d
 Z ej$                  d        G d de	j&                        Z G d d      Z e       Z G d d      Zedk(  ry ej2                          d dlmZ  ed        eed      j;                         Z ed       ejA                  d        e! eejD                  d      j;                                yy)    N)GLibGdkz3.0)r   Gtk)r   )*)domain	localedirc                     | S N )xs    ,/usr/share/system-config-printer/authconn.py<lambda>r   #   s    q     z1.9.60c                      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Zd Zd	 Zd
 Zd Zd Zy)
AuthDialogz	Username:z	Password:zDomain:)usernamepasswordr   NFc           	      $   |t        d      }|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.                         }|j1                  |
       |j3                  d	       |j5                  d       |j7                  d       g | _        t;        |
      D ]  }||   }t        j(                  t        | j<                  j?                  ||            
      }|j#                  dd       |jA                  |d|dd       t        jB                         }|jE                  |dk7         |jA                  |d|dd       | j8                  jG                  |        | j8                  |
dz
     jI                  d       |	j%                  |ddd       |j%                  |	ddd       | jJ                  j%                  |ddd       |rTt        jL                  jO                  t        d            }|jQ                  d       |	j%                  |ddd       || _)        | jJ                  jU                          y )NAuthenticationr   r      F   g        r      )labelg      ?   TzRemember password)+_r   Dialog__init__auth_info_requiredset_default_responseResponseTypeOKset_border_widthset_resizableHBoxnewImageset_from_stockSTOCK_DIALOG_AUTHENTICATIONIconSizeDIALOGset_alignment
pack_startVBoxLabelprompt_labellenGrid
insert_rowinsert_columnset_row_spacingset_column_spacingfield_entryrange
AUTH_FIELDgetattachEntryset_visibilityappendset_activates_defaultvboxCheckButtonnew_with_label
set_activeremember_checkboxshow_all)selftitleparentflagsbuttonsr   allow_rememberhboximager?   
num_fieldsgridifieldr   entrycbs                    r   r   zAuthDialog.__init__+   s    =&'E%",j!9

T5&%A"4!!3#3#3#6#67q!E"xx||UB'q!		c==!ll11	3S#&ua0xx||UB'IIL**E5!<,-
xxz
#1a #
# 	,A&q)EIIQt':':E5'I%JKEC(KK1a+IILE  %:"56KK1a+##U+	, 	a(>>EueQ/ueQ/		dE5!4//3F1GHBMM5!OORq1%'D"		r   c                     | j                   j                  d|z   dz          | j                   j                  d       | j                   j                  dd       | j                   j	                  d       y )N"<span weight="bold" size="larger">z</span>Tr   )r/   
set_markupset_use_markupr+   set_line_wraprE   prompts     r   
set_promptzAuthDialog.set_promptd   sg    $$&J&,'-/8'9 	:(($/''A.''.r   c                     t        t        | j                              D ]#  }| j                  |   j                  ||          % y r
   )r7   r0   r6   set_text)rE   	auth_inforO   s      r   set_auth_infozAuthDialog.set_auth_infok   s>    T--./ 	8AQ(()A,7	8r   c                 \    | j                   D cg c]  }|j                          c}S c c}w r
   )r6   get_text)rE   r   s     r   get_auth_infozAuthDialog.get_auth_infoo   s"    '+'7'78!

888s   )c                 V    	 | j                   j                         S # t        $ r Y yw xY w)NF)rC   
get_activeAttributeErrorrE   s    r   get_remember_passwordz AuthDialog.get_remember_passwordr   s.    	))4477 		s    	((c                 t    | j                   j                  |      }| j                  |   j                          y r
   )r   indexr6   
grab_focus)rE   rP   rO   s      r   field_grab_focuszAuthDialog.field_grab_focusx   s/    ##))51&&)r   )__name__
__module____qualname__N_r8   r   DialogFlagsMODALSTOCK_CANCELr    CANCELSTOCK_OKr!   r   rZ   r^   ra   rf   rj   r   r   r   r   r   &   s    {O{OY-)J #4--++S-=-=-D-D<<)9)9)<)<>%)!&7r/89*r   r   c                   *    e Zd Zd ZddZddZddZy)_AuthInfoCachec                 "    t               | _        y r
   )dictcredsre   s    r   r   z_AuthInfoCache.__init__   s    V
r   Nc                 .    |d}|| j                   ||f<   y Niw  )rx   )rE   datahostports       r   cache_auth_infoz_AuthInfoCache.cache_auth_info   s    <D"&

D;r   c                 L    |d}	 | j                   ||f   S # t        $ r Y y w xY wrz   rx   KeyErrorrE   r|   r}   s      r   lookup_auth_infoz_AuthInfoCache.lookup_auth_info   s6    <D	::tDk** 		s    	##c                 J    |d}	 | j                   ||f= y # t        $ r Y y w xY wrz   r   r   s      r   remove_auth_infoz_AuthInfoCache.remove_auth_info   s3    <D	

D;' 		s    	"")NN)rk   rl   rm   r   r~   r   r   r   r   r   ru   ru      s    'r   ru   c                       e Zd Z	 	 ddZd Zd Zd Zd Zd ZddZ	d	 Z
d
 Zd Zd Zd ZddZd Zd Zd Zd Zd Zd Zy)
ConnectionNc                    |t        j                  |       |t        j                  |       |t        j                  |       d| _        || _        || _        t        j                         | _        t        j                         | _
        t        j                         | _        t        j                         | _        d| _        g | _        || _        t%        j&                         | _        | j+                          y )N T)cups	setServersetPortsetEncryption_use_password_parent_try_as_rootgetUser	_use_user	getServer_servergetPort_portgetEncryption_encryption_prompt_allowed_operation_stack_lock	threadingEvent
_gui_event_connect)rE   rG   try_as_rootlockr|   r}   
encryptions          r   r   zConnection.__init__   s    NND!LL$!
+'~~(\\^
--0# "
#//,r   c                 Z    t        | d|       | j                  j                  |       y )Nz: Operation += )
debugprintr   r=   )rE   	operations     r   _begin_operationzConnection._begin_operation   s#    T9=>$$i0r   c                 T    t        d| z         | j                  j                          y )Nz%s: Operation ended)r   r   popre   s    r   _end_operationzConnection._end_operation   s"    )D01!!$r   c                     | j                   S r
   r   re   s    r   _get_prompt_allowedzConnection._get_prompt_allowed   s    ###r   c                     || _         y r
   r   )rE   alloweds     r   _set_prompt_allowedzConnection._set_prompt_allowed   s
    &r   c                     || _         y r
   )r   )rE   whethers     r   	_set_lockzConnection._set_lock   s	    
r   c           	      ~   t        j                  | j                         |xr< | j                  d   dk(  xs | j                  dk(  xr t	        j
                         dk7  | _        | j                  rt        j                  }nt         j                  } || j                  | j                  | j                        | _        | j                  r%| j                  j                  | j                         | j                  | _        t        d| j                  z         t!        | j                  j"                        }t!        | j                  j$                        }t'        | j                        D ]N  }|d   dk(  rt)        | j                  |      }t!        |      ||fvr2t+        | || j-                  ||             P y )Nr   /	localhost)r|   r}   r   zConnected as user %sr   )r   setUserr   r   osgetuid_use_pkcupspkr   r   r   _connection
set_parentr   _userr   typegetPrinters
addPrinterdirgetattrsetattr_make_binding)rE   allow_pkcreate_objectmethodtype_lambdamethodtype_realfnamefns          r   r   zConnection._connect   sh   dnn%  .aC/N4<<;3N.IILA- 	 <<"--M OOM(t||157;7G7GI <<''5^^
*TZZ78 $"2"2">">? 0 0 ; ;<$**+ 	BEQx3$**E2B9!2O DDT5$"4"4eR"@A	Br   c                 J    t        | j                  t        j                        S r
   )
isinstancer   r   r   re   s    r   _using_polkitzConnection._using_polkit   s    4++V->->??r   c                       fdS )Nc                  2     j                   g| i |S r
   )	_authloop)argskwdsr   r   rE   s     r   r   z*Connection._make_binding.<locals>.<lambda>   s    ^T^^UB%N%N%N r   r   )rE   r   r   s   ```r   r   zConnection._make_binding   s	    NNr   c                    d| _         | j                         s|j                  dd        | j                  }d}	 	 | j	                         dk(  r	 S || j                  k7  r"t        | j                  |      }| j                  }t        j                  | j                          |j                  |i |}|dk(  r)|i k(  r$t        j                  t        j                  d      	 |S # t        j                  $ r}|j                  \  }}	| j                  r$|	dk(  rt        j                  dt        d            | j                  s]|t        j                  k(  s&|t        j                   k(  s|t        j"                  k(  r$| j%                  |t        j                   k(         nR| j                  s|t        j&                  k(  rt)        d	       t)        |	       | j*                  rV| j,                  j/                          t1        j2                  d
| j4                  |	       | j,                  j7                          n| j5                  |	       | j8                  t:        j<                  j>                  k(  r*t)        d       d}| xj                   d
z  c_         d| _         nYd| _         | j                  r+| jB                  st        j                  dt        d            t)        |dtE        |	              Y d }~nad }~wt        jF                  $ rH}|j                  \  }
| j                  s#| j%                  |
t        jH                  k(         n Y d }~nd }~ww xY w )Nr   	signatureFTadminGetServerSettingsr   pkcancelzOperation canceledzGot IPP_SERVICE_UNAVAILABLEr   zretrying operation...z: )%_passesr   r   r   _perform_authenticationr   r   r   r   __call__IPPErrorIPP_NOT_AUTHORIZEDr   r   r   _cancelIPP_FORBIDDENIPP_AUTHENTICATION_CANCELED_failedIPP_SERVICE_UNAVAILABLEr   r   r   clearr   timeout_add_ask_retry_server_errorwait_retry_responser   r    r!   _has_failed_cannot_authrepr	HTTPErrorHTTP_FORBIDDEN)rE   r   r   r   r   cretryresultemss              r   r   zConnection._authloop   s   !!#HH[$'9//2a7r o ((( $"2"2E:B((Adnn-$t4t444|"mmT-D-DbIIR Q ==  A<<AO--A.B,CDD||d.E.E)E)*d.@.@)@)*d.N.N)NLL!t'9'9"9:!t/K/K*K =>Nzz--0((!T-I-I1M,,/44a8++s/?/?/B/BB"$;< $)+/('+||D,=,="mmQ2F0GHHAtQx 89>> vv||LL!t':':":; <k s+   C# BC# #M7G:K66M>MMc                 b   | j                   rt        j                          	 t        d      | j                  d   z  }t        j                  | j                  ddt        j                  j                  t        j                  j                  |      }|j                  t        d      |z         |j                  t        j                  t        j                   j"                  t        d      t        j                   j$                         |j'                  t        j                   j$                         | j                   r1|j)                  d| j*                         t        j,                          y |j/                         | _        |j3                          y # t
        $ r t        d      }Y pw xY w)	NzCUPS server error (%s)r   zCUPS server errorT)transient_formodaldestroy_with_parentmessage_typerI   textz3There was an error during the CUPS operation: '%s'.Retryresponse)r   r   threads_enterr   r   
IndexErrorr   MessageDialogr   MessageTypeERRORButtonsTypeNONEformat_secondary_textadd_buttonsrq   r    rr   r!   r   connect_on_retry_server_error_responsethreads_leaverunr   destroy)rE   messagemsgds       r   r   z"Connection._ask_retry_server_error0  s@   :: 	)-.1F1Fq1IIC T\\%)t,/OO,A,A'*';';$'	) 	
 $; "<>E"F 	G	s'')9)9)@)@z3#3#3#6#6	8	 0 0 3 34::IIz4#G#GH #$558D IIL'  	)'(C	)s   F F.-F.c                 f    || _         |j                          | j                  j                          y r
   )r   r  r   setrE   dialogr   s      r   r  z*Connection._on_retry_server_error_responseK  s$    'r   c                      d| _         || _        y )NT)r   
_forbidden)rE   	forbiddens     r   r   zConnection._failedP  s    #r   c                 ~    t        d       | j                  s| j                  ryd| _        || _        | j                  S )NzGot password callbackr   T)r   r   _auth_called_promptr   rX   s     r   _password_callbackzConnection._password_callbackT  s8    +,<<4,, !!!r   c                    | xj                   dz  c_         t        j                  | j                  | j                        }|$|d   dk7  s| j
                  r|\  | _        | _        ~t        d| j                   z         | j                   dk(  rUd| _	        d| _
        d| _        d| _        d| _        d| _        t        j                   | j"                         t        d       yt        d| j                  z         | j                  st        d	       yd| _	        | j                   d
k\  rf| j
                  rZ| j$                  dk7  rK| j                  d   dk(  s| j                  r-t        d       d| _        d| _        	 | j'                  d       y| j.                  st        d       d| _        y| j                  st        d       d| _        d| _        yd| _        | j                  rq| j0                  rU| j2                  j5                          t7        j8                  d| j:                         | j2                  j=                          n| j;                          | j0                  rU| j2                  j5                          t7        j8                  d| j>                         | j2                  j=                          n| j?                          | j                  rt        d       yt        j@                  | j                         t        d       	 | j'                  d       y# t(        $ r% t        j*                  t        j,                  d      w xY w# t(        $ r% t        j*                  t        j,                  d      w xY w)Nr   r|   r}   r   rootzAuthentication pass: %dFz%Authentication: password callback setzForbidden: %sz$Authentication: Operation successfulr   r   zAuthentication: Try as root)r   z server-error-service-unavailablez%Authentication: prompting not allowedTzAuthentication: giving up	cancelledzAuthentication: Reconnect)!r   global_authinfocacher   r   r   r   r   r   r   r   r  r  r   r   _dialog_shownr   setPasswordCBr  r   r   RuntimeErrorr   r   r   r   r   r   r   r   _show_not_authorized_dialogr   #_perform_authentication_with_dialogr   )rE   rx   s     r   r   z"Connection._perform_authentication]  s   $55DLLtzz5ZaF"d&7&77<4!3-<=<<1  %D#DO %D DL %D!&D 7 78?@Odoo56 >? !<<1!!

f$aC'4?? 9:!'$)!MMMEM2
 ##?@DL  34DL $D " zz%%(  !T%E%EF$$'003::OO!!$a!I!IJOO  #447<<$dnn%/0	EMMEM*
 c $ M--)E)E)KM MMZ  	E--!=!=!CE E	Es   <L M .M.M>c                 r   | j                   rt        j                          t        j                  | j
                  ddt        j                  j                  t        j                  j                        }|j                  t        d             |j                  dt        d      z   dz   t        d      z          | j                   rQ|j                  d| j                         |j                          |j!                          t        j"                          y |j%                          |j'                          y )NT)r   r   r   r   rI   zNot authorizedrT   z	</span>

zThe password may be incorrect.r   )r   r   r   r   r   r   r   r   r   CLOSE	set_titler   rU   r  "_on_not_authorized_dialog_responserD   show_nowr  r  r  )rE   r	  s     r   r  z&Connection._show_not_authorized_dialog  s    :: T\\%)t,/OO,A,A'*'<'<> 	
Q'()	:()*,9:89: 	; ::IIz4#J#JKJJMJJM EEHIILr   c                 X    | j                   j                          |j                          y r
   )r   r  r  r  s      r   r#  z-Connection._on_not_authorized_dialog_response  s    r   c                    | j                   rt        j                          t        | j                        dkD  r4	 t        d      | j                  d   z  }t        || j                        }nt        | j                        }|j                  d       |j                  ddg       |j                  d       |j                  d       |j                          |j                          d| _        | j                   r1|j!                  d	| j"                         t        j$                          y |j'                         }| j#                  ||       y # t        $ r t        d      }Y w xY w)
Nr   zAuthentication (%s)r   )rF   rG   )rG   r   r   Tr   )r   r   r   r0   r   r   r   r   r   rZ   r^   rj   set_keep_aboverD   r$  r  r  _on_authentication_responser  r  )rE   rF   r	  r   s       r   r  z.Connection._perform_authentication_with_dialog  s   ::  %%&*,01D4I4I!4LL %#'<<1A 4<<0A	b	"b"	J'	$	

	

!::IIz4#C#CD uuxH,,a:)  ,*+,s   E E('E(c                    |j                         \  }| _        |dk7  r|| _        t        j	                  | j                  | j                  f| j
                  | j                         |j                          |t        j                  j                  k(  s|t        j                  j                  k(  rd| _        | j                  r| j                  j                          y y )Nr   r  T)ra   r   r   r  r~   r   r   r  r   r    rr   DELETE_EVENTr   r   r   r  )rE   r  r   users       r   r(  z&Connection._on_authentication_response  s    %+%9%9%<"t!2:!DN,,t~~/3/A/A/C37<<37:: 	- 	? 	((///((555DL::OO" r   )NTFNNN)T)F)rk   rl   rm   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r   r  r#  r  r(  r   r   r   r   r      sn    <A37.1%$'B<@ODL6
$"dL(;<#r   r   __main__)TimedOperationTr
   )r   	Connected)z/admin/conf/cupsd.confz/dev/stdout)#r   configr   r   gigi.repositoryr   require_versionr   r   r   errordialogsdebuggettextinstallPACKAGEr   rn   requirer   r   ru   r  r   rk   threads_inittimedopsr-  set_debuggingr  r   r   r   printgetFiler   r   r   <module>r>     s#  (     	    5%      5%    	    v~~1A1A B X T* T*r 8 &( k# k#Z zC'4
1558AKK	.!)) /0038 r   