
    ?g                        d dl Z d dlZ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 d dl	m	Z	 d dl
Z
d dl
mZ d dlZ ej                  dd        ej                  dd       d d	lmZmZmZmZmZmZ  ej*                  d
d        G d de      Z e       Z ed      \  ZZZ ed      \  ZZ G d dej>                        Z  G d dejB                        Z" G d dejF                        Z$ G d dej>                        Z% G d dej>                        Z& G d dej>                        Z' G d d      Z(e)dk(  r! e	d        e(       Z* ejV                          yy)     N)randint)setproctitle)ImageGtkz3.0AccountsServicez1.0)r   GObjectGio	GdkPixbufr   GLibcinnamonz/usr/share/localec                   "    e Zd ZdZd Zd Zd Zy)
PrivHelperz{A helper for performing temporary privilege drops. Necessary for
    security when accessing user controlled files as root.c                     t        j                         | _        t        j                         | _        t        j
                         | _        y N)osgetuidorig_uidgetgidorig_gid	getgroupsorig_groupsselfs    F/usr/share/cinnamon/cinnamon-settings-users/cinnamon-settings-users.py__init__zPrivHelper.__init__   s*    				<<>    c                     |j                         }t        j                  |      j                  }t	        j
                  |j                         |       t	        j                  |       t	        j                  |       y r   )	get_uidpwdgetpwuidpw_gidr   
initgroupsget_user_namesetegidseteuid)r   useruidgids       r   
drop_privszPrivHelper.drop_privs    sP    llnll3&& 	d((*C0


3


3r   c                     t        j                  | j                         t        j                  | j                         t        j
                  | j                         y r   )r   r%   r   r$   r   	setgroupsr   r   s    r   restore_privszPrivHelper.restore_privs+   s4    


4==!


4==!
T%%&r   N)__name__
__module____qualname____doc__r   r)   r,    r   r   r   r      s    >*	'r   r         c                   &     e Zd Zd fd	Zd Z xZS )GroupDialogc                    t         t        |   d |       	 | j                  d       | j	                  d       | j                  d       | j                  d       t               }|j                  |g       t        j                         | _        | j                  j                  |       | j                  j                  d| j                         |j                  | j                  g       | j!                  d       | j#                         }|j%                  |       | j'                          | j)                  t+        d      t        j,                  j.                  t+        d      t        j,                  j0                         | j3                  t        j,                  j0                  d       y # t4        $ r}t7        |       Y d }~y d }~ww xY w)NT changed   CancelOKF)superr5   r   	set_modalset_skip_taskbar_hintset_skip_pager_hint	set_titleDimmedTable
add_labelsr   Entryentryset_textconnect_on_entry_changedadd_controlsset_border_widthget_content_areaaddshow_alladd_buttons_ResponseTypeCANCELr;   set_response_sensitive	Exceptionprint)r   labelvalueparenttableboxdetail	__class__s          r   r   zGroupDialog.__init__7   sJ   k4)$7	NN4 &&t,$$T*NN2MEeW%DJJJ&JJy$*@*@A

|,!!!$'')CGGENMMOQx[#*:*:*A*A1T7CL\L\L_L_b''(8(8(;(;UC 	&MM	s   FF0 0	G9G		Gc                    |j                         }d|v s|j                         |k7  r|j                  t        j                  j
                  d       |j                  t        j                  j
                  t        d             | j                  t        j                  j                  d       nT|j                  t        j                  j
                  d        | j                  t        j                  j                  d       |j                         dk(  r+| j                  t        j                  j                  d       y y )N dialog-warning-symbolicz<The group name cannot contain upper-case or space charactersFTr7   )get_textlowerset_icon_from_icon_namer   EntryIconPosition	SECONDARYset_icon_tooltip_textrN   rQ   rO   r;   )r   rD   names      r   rG   zGroupDialog._on_entry_changedT   s    ~~$;$**,$.))#*?*?*I*IKde''(=(=(G(G  LJ  JK  L''(8(8(;(;UC))#*?*?*I*I4P''(8(8(;(;TB>>r!''(8(8(;(;UC "r   r   )r-   r.   r/   r   rG   __classcell__rZ   s   @r   r5   r5   6   s    :Dr   r5   c                   *     e Zd Z fdZd Zd Z xZS )rA   c                     t         t        |           | j                  d       | j	                  d       | j                  d       y )Nr9         )r<   rA   r   rI   set_row_spacingsset_col_spacingsr   rZ   s    r   r   zDimmedTable.__init__b   s:    k4)+a a b!r   c           
      J   d}|D ]  }|t        j                  |      }|j                  dd       |j                         j	                  d       | j                  |dd||dz   t         j                  j                  t         j                  j                  z         |dz   } y )Nr            ?z	dim-labelxoptions)	r   Labelset_alignmentget_style_context	add_classattachAttachOptionsEXPANDFILL)r   textsrowtextrT   s        r   rB   zDimmedTable.add_labelsh   s     	D		$##As+'')33K@E1ac!ec>O>O>V>VWZWhWhWmWm>mn'C	r   c           	      P    d}|D ]  }| j                  |dd||dz          |dz   }! y )Nr   ro   r3   )rw   )r   controlsr|   controls       r   rH   zDimmedTable.add_controlsr   s7     	GKKAsCE2'C	r   )r-   r.   r/   r   rB   rH   re   rf   s   @r   rA   rA   a   s    "r   rA   c                        e Zd Zdej                  j
                  deffiZdZdZ	 fdZ
d Zd Zd Zd	 Zd
 Zd Zd Zd Z xZS )EditableEntryr8   Nr   ro   c                    t         t        |           t        j                         | _        t        j                         | _        t        j                         | _	        | j                  j                  dd       | j                  j                  t        j                  j                         | j                  | j                  d        | j                  | j                  d        | j                  d       | j!                  d       | j#                  d       d| _        | j'                          | j                  j)                  d| j*                         | j                  j)                  d| j*                         | j                  j)                  d| j,                         | j                  j)                  d| j.                         y )N        rp   r   Freleasedactivater8   )r<   r   r   r   rs   rT   rC   rD   Buttonbuttonrt   
set_reliefReliefStyleNONEappend_pageset_current_pageset_show_tabsset_show_bordereditablerL   rF   _on_button_clicked_on_entry_validatedrG   rm   s    r   r   zEditableEntry.__init__   s1   mT+-YY[
YY[
jjl!!#s+s334d+T*a 5!U#J(?(?@J(?(?@

:t'?'?@

9d&<&<=r   c                 p    | j                   j                  |       | j                  j                  |       y r   )r   	set_labelrD   rE   )r   r}   s     r   rE   zEditableEntry.set_text   s&    d#

D!r   c                 &    | j                  d       y )NT)set_editable)r   r   s     r   r   z EditableEntry._on_button_clicked   s    $r   c                 f    | j                  d       | j                  d|j                                y )NFr8   )r   emitr^   r   rD   s     r   r   z!EditableEntry._on_entry_validated   s%    % 		)U^^-.r   c                 V    | j                   j                  |j                                y r   )r   r   r^   r   s     r   rG   zEditableEntry._on_entry_changed   s    enn./r   c                     |r'| j                  t        j                         || _        y | j                  t        j                         || _        y r   )r   r   
PAGE_ENTRYPAGE_BUTTONr   )r   r   s     r   r   zEditableEntry.set_editable   s?    !!-":":; ! !!-";";< r   c                 :    | j                   j                  |       y r   )r   set_tooltip_text)r   tooltips     r   r   zEditableEntry.set_tooltip_text   s    $$W-r   c                     | j                   S r   )r   r   s    r   get_editablezEditableEntry.get_editable   s    }}r   c                 6    | j                   j                         S r   )rD   r^   r   s    r   r^   zEditableEntry.get_text   s    zz""$$r   )r-   r.   r/   r   SignalFlags	RUN_FIRSTstr__gsignals__r   r   r   rE   r   r   rG   r   r   r   r^   re   rf   s   @r   r   r   y   sb     	G''114FL
 KJ>," /0!.%r   r   c                   P     e Zd Zd
 fd	Zd Zd Zd Zd Zd Zd Z	d Z
d	 Z xZS )PasswordDialogc           	      
   t         t        |   d |       || _        || _        || _        | j                  d       | j                  d       | j                  d       | j                  t        d             t               }|j                  t        d      d t        d      g       t        j                         | _        | j                  j!                  t        j"                  j$                  d       | j                  j'                  t        j"                  j$                  t        d             | j                  j)                  d| j*                         | j                  j)                  d| j,                         |j/                  | j                  d	d
dd	       t        j0                         | _        | j2                  j5                  t        d             | j2                  j7                  d       |j/                  | j2                  d	dd	dt        j8                  j:                  t        j8                  j<                  z         | j2                  j?                  dd	       t        j@                         | _!        | jB                  j5                  t        d             | jB                  jE                  d	d       |j/                  | jB                  dd
d	d       t        j                         | _#        | jF                  j)                  d| j,                         |j/                  | jF                  d	d
dd
       t        jH                  t        d            | _%        | jJ                  j)                  d| jL                         |j/                  | jJ                  d	d
d
d       | jO                  d       | jQ                         }|jS                  |       | jU                          t        jV                         | _,        | jX                  j[                  t        j\                  j^                         t        j@                  t        d            }| jX                  jQ                         }|jS                  |       |j/                  | jX                  dd
dd       | ja                  t        d      t        jb                  jd                  t        d      t        jb                  jf                         | ji                          | jk                  t        jb                  jf                  d       | jX                  jm                          | j)                  d| jn                         y )NTzChange PasswordzNew passwordzConfirm passwordzview-refresh-symboliczGenerate a passwordzicon-releaser8   ro   r2   r   z8Your new password needs to be at least 8 characters longr   r3   rq   rp   zShow passwordtoggled   r9   z1An error occurred. Your password was not changed.   r:   ChangeFresponse)8r<   r   r   r&   password_mask
group_maskr=   r>   r?   r@   rN   rA   rB   r   rC   new_passwordr`   ra   rb   rc   rF   _on_new_password_icon_released_on_passwords_changedrw   ProgressBarstrengh_indicatorr   set_fractionrx   ry   rz   set_size_requestrs   strengh_labelrt   confirm_passwordCheckButtonshow_password_on_show_password_toggledrI   rJ   rK   rL   InfoBarinfobarset_message_typeMessageTypeERRORrM   rO   rP   r;   set_passwords_visibilityrQ   hide_on_response)
r   r&   r   r   rV   rW   rX   rT   contentrZ   s
            r   r   zPasswordDialog.__init__   s   nd,T6:	*$t""4(  &q*+,!N+T15G3HIJIIK11#2G2G2Q2QSjk//0E0E0O0OQRShQij!!.$2U2UV!!)T-G-GHT&&1a3!$!2//2l0mn++C0T++Q1a#BSBSBZBZ[^[l[l[q[qBqr//A6 YY[++A.h,ij((C0T''Aq!4 #		%%i1K1KLT**Aq!Q7 __Q-?@""9d.L.LMT''Aq!4a ##%{{}%%coo&;&;<		!OPQ,,//1ET\\1aA.8c&6&6&=&=q{CL\L\L_L_b%%'##C$4$4$7$7?Z!2!23r   c                     |t         j                  j                  k(  r| j                          y | j	                          y r   )r   rO   r;   change_passworddestroy)r   dialogresponse_ids      r   r   zPasswordDialog._on_response   s+    #**---  "LLNr   c                     | j                   j                         }| j                  j                  |d       | j                  j                         }d|v rt        j                  dd| j                  j                         dg       |j                  d      }|j                  d       dj                  |      }| j                  j                  |       | j                  j                  d       | j                          y )Nr7   nopasswdlogingpasswdz-d,    ••••••)r   r^   r&   set_passwordr   
subprocesscallr#   splitremovejoinrE   r   r   )r   newpassmasks      r   r   zPasswordDialog.change_password   s    ##,,.		w+'')d"OOYdii.E.E.GYZ::d#DKK(99T?DOO$$T*''(NOr   c                     | j                   j                         }| j                  j                  |       | j                  j                  |       y r   )r   
get_activer   set_visibilityr   )r   visibles     r   r   z'PasswordDialog.set_passwords_visibility
  s>    $$//1((1,,W5r   c                 b   | j                   j                          | j                  j                  d       d}d}t	        d      D ]"  }t        dt        |      dz
        }|||   z   }$ | j                  j                  |       | j                  j                  |       | j                          y )NTz@0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-r7   ri   r   ro   )r   r   r   
set_activeranger   lenr   rE   r   check_passwords)r   widgeticon_posevent
charactersr   iindexs           r   r   z-PasswordDialog._on_new_password_icon_released  s    %%d+W
 	2AAs:12E
5 11G	2 	""7+&&w/r   c                 $    | j                          y r   )r   )r   r   s     r   r   z(PasswordDialog._on_show_password_toggled  s    %%'r   c                 x   dx}x}x}}|D ]I  }|j                         r|dz  }|j                         r|dz  }/|j                         r|dz  }E|dz  }K t        |      }t	        |d      }t	        |d      }t	        |d      }t	        |d      }|dz  dz
  |dz  z   |dz  z   |dz  z   }|dkD  rd}|dk  rd}|S )Nr   ro   r   r2   g?皙?g333333?)isdigitislowerisupperr   min)	r   passwordupperr_   digitsymbolcharlengthstrengths	            r   password_strengthz PasswordDialog.password_strength!  s    )**** 	D||~


!	 XVAE!E!VAslc!S[d] S[ 	
 a<Ha<Hr   c                    | j                   j                          | j                  j                         }| j                  j                         }| j                  |      }||k7  rr| j                  j                  t        j                  j                  d       | j                  j                  t        j                  j                  t        d             n4| j                  j                  t        j                  j                  d        t        |      dk  rA| j                  j                  t        d             | j                  j!                  d       n|dk  r@| j                  j                  t        d             | j                  j!                  d       n|d	k  r@| j                  j                  t        d
             | j                  j!                  d       n|dk  r@| j                  j                  t        d             | j                  j!                  d       n?| j                  j                  t        d             | j                  j!                  d       | j#                          y )Nr]   zPasswords do not matchri   z	Too shortr   rp   Weakr   g      ?Fairg?g?Goodg333333?Strongg      ?)r   r   r   r^   r   r   r`   r   ra   rb   rc   rN   r   r   rE   r   r   r   )r   r   r   r   r   s        r   r   z$PasswordDialog._on_passwords_changed=  s   ((1130099;)),7++!!99#:O:O:Y:Y[tu!!778M8M8W8WYZ[sYtu!!99#:O:O:Y:Y[_`|q ''+7""//4^''&	2""//4_''&	2""//4^''&	2""//4''(4""//4r   c                 <   | j                   j                         }| j                  j                         }t        |      dk\  r0||k(  r+| j	                  t
        j                  j                  d       y | j	                  t
        j                  j                  d       y )Nri   TF)r   r^   r   r   rQ   r   rO   r;   )r   r   r   s      r   r   zPasswordDialog.check_passwordsY  sx    ((1130099;|!l6F&F''(8(8(;(;TB''(8(8(;(;UCr   r   )r-   r.   r/   r   r   r   r   r   r   r   r   r   re   rf   s   @r   r   r      s2    <4|6
(
88Dr   r   c                   ,     e Zd Zd fd	Zd Zd Z xZS )NewUserDialogc                 H   t         t        |   d |       	 | j                  d       | j	                  d       | j                  d       | j                  d       t        j                         | _	        | j                  j                  t        d             | j                  j                  t        d             | j                  j                  d       t        j                         | _        | j                  j                  d| j                          t        j                         | _        | j"                  j                  d| j                          t%               }|j'                  t        d      t        d      t        d	      g       |j)                  | j                  | j                  | j"                  g       | j+                  d
       | j-                         }|j/                  |       | j1                          | j3                  t        d      t        j4                  j6                  t        d      t        j4                  j8                         | j;                  t        j4                  j8                  d       y # t<        $ r}t?        |       Y d }~y d }~ww xY w)NTr7   StandardAdministratorr   r8   Account Typez	Full NameUsernamer9   r:   AddF) r<   r   r   r=   r>   r?   r@   r   ComboBoxTextaccount_type_comboappend_textrN   r   rC   realname_entryrF   _on_info_changedusername_entryrA   rB   rH   rI   rJ   rK   rL   rM   rO   rP   r;   rQ   rR   rS   )r   rV   rW   rX   rY   rZ   s        r   r   zNewUserDialog.__init__c  s   mT+D&9	NN4 &&t,$$T*NN2&)&6&6&8D###//*>##///0BC##..q1"%))+D''	43H3HI"%))+D''	43H3HIMEa/;:OP 7 79L9LdNaNabc!!!$'')CGGENMMOQx[#*:*:*A*A1U8SM]M]M`M`c''(8(8(;(;UC 	&MM	s   I+J 	J!JJ!c                     t         j                  j                         j                         }|D ]  }|j	                         |k(  s y y)NTF)r   UserManagerget_default
list_usersr#   )r   	user_nameusersr&   s       r   user_existszNewUserDialog.user_exists  sG    ++779DDF 	D!!#y0	 r   c                 h   | j                   j                         }| j                  j                         }d}t        j                  d|      rt| j                  j                  t        j                  j                  d       | j                  j                  t        j                  j                  t        d             d}n| j                  |      rw| j                  j                  t        j                  j                  d       | j                  j                  t        j                  j                  t        d      |z         d}n4| j                  j                  t        j                  j                  d        |dk(  s|dk(  rd}| j                  t        j                  j                  |       y )NTz[^a-z0-9_-]r]   zInvalid usernameFz)A user with the name '%s' already exists.r7   )r	  r^   r  researchr`   r   ra   rb   rc   rN   r  rQ   rO   r;   )r   r   fullnameusernamevalids        r   r
  zNewUserDialog._on_info_changed  sW   &&//1&&//199]H-778M8M8W8WYrs55c6K6K6U6UWXYkWlmEh'778M8M8W8WYrs55c6K6K6U6UWX  ZE  XF  IQ  XQ  RE778M8M8W8WY]^r>X^E##C$4$4$7$7?r   r   )r-   r.   r/   r   r  r
  re   rf   s   @r   r   r   a  s    "H@r   r   c                   &     e Zd Zd fd	Zd Z xZS )GroupsDialogc                 (   t         t        |   d |       	 | j                  d       | j	                  d       | j                  d       | j                  d       | j                  dd       t        j                         }t        j                         }t        j                         }g | _        t        t        j                         d d      }|D ]_  }t        j                   |d         }| j                  j#                  |       |j%                  |       ||d	   v sO|j'                  d       a |j%                  |       |j%                  |       | j)                  d
       | j+                         }	|	j-                  |ddd       | j/                          | j1                  t3        d      t        j4                  j6                  t3        d      t        j4                  j8                         y # t:        $ r}
t=        |
       Y d }
~
y d }
~
ww xY w)NTr7      i  c                     | d   S Nr   r1   xs    r   <lambda>z'GroupsDialog.__init__.<locals>.<lambda>  s
    !A$ r   Fkeyreverser   r2   r9   r:   r;   )r<   r  r   r=   r>   r?   r@   set_default_sizer   ScrolledWindowViewportVBox
checkboxessortedgrpgetgrallr   appendrK   r   rI   rJ   
pack_startrL   rM   rN   rO   rP   r;   rR   rS   )r   r  rV   scrolledviewportvboxgroupsgroupcheckboxrX   rY   rZ   s              r   r   zGroupsDialog.__init__  s   lD*48	NN4 &&t,$$T*NN2!!#s+))+H||~H88:D DOCLLNNF .??584&&x0"uQx'''-. LLLL"!!!$'')CNN8T43MMOQx[#*:*:*A*A1T7CL\L\L_L_b 	&MM	s   D
G3 "CG3 3	H<HHc                     g }| j                   D ]2  }|j                         s|j                  |j                                4 |S r   )r)  r   r-  	get_label)r   r2  r4  s      r   get_selected_groupsz GroupsDialog.get_selected_groups  sB     	4H""$h0023	4 r   r   )r-   r.   r/   r   r7  re   rf   s   @r   r  r    s    !Fr   r  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)Modulec           
         	 t        j                         | _        | j                  j                  d       | j                  j	                  d       | j                  j                  d      | _        | j                  j                  dt         j                         | j                  j                  t        d             | j                  j                  d      j                  t        d             | j                  j                  d      j                  t        d	             | j                  j                  d
      j                  d| j                         | j                  j                  d      j                  d| j                         | j                  j                  d      j                  d| j                         | j                  j                  d      j                  d| j                         | j                  j                  d      j                  d| j                          t        j"                  t$        t&        j(                  t*              | _        | j,                  j/                  dt         j0                  j2                         t        j"                  t4        t*              | _        | j6                  j/                  dt         j0                  j2                         | j                  j                  d      | _        | j8                  j;                  d       | j                  j                  d      | _        | j8                  j?                         j                  d| j@                         | j<                  j?                         j                  d| jB                         t        jD                         }t        jF                         }|jI                  |d       |jK                  |dtL               |jO                  dd       | j8                  jQ                  |       t        jD                         }t        jR                         }|jI                  |d       |jK                  |dtT               | j8                  jQ                  |       t        jD                         }t        jR                         }|jI                  |d       |jK                  |dtV               |j/                  d       | j<                  jQ                  |       | j                  j                  d      jY                  d       | j                  j                  d      jY                  d       | j                  j                  d      jY                  d       t        jZ                         | _.        t        j^                         | _0        | j`                  jc                  dd       | j\                  je                  | j`                         | j`                  jg                  d       | j\                  ji                  dd       | j\                  jk                  t        d             t        jl                         | _7        t        jp                         }t        jr                  t        d             }|j                  d!| jt                         | j\                  j                  d"| jv                         d#}d#}d$}d%g}|D ][  }	tx        jz                  j}                  |	      s$t        ty        j                  |	            }
|
D ]  }tx        jz                  j                  |	|      }t        j                  j                  |      }t        j                  j                  |      }t         j^                  j                  |t         j                  j                        }t        jr                         }|j                  |       |j                  d!| j                  |       | jn                  j                  |||dz   ||dz          |dz   |z  }|d#k(  s|dz   } ^ |dz   }| jn                  j                  |d#d$||dz          | jn                  j                  |d#d$|dz   |d&z          t        j                         | _N        | j                  j                  t        d'             | j                  j                  t        d(             | j                  j                  d| j                         t               | _R        | j                  j                  d| j                         | j                  jk                  t        d)             t        j                         | _U        | j                  ji                  dd       t        jZ                         | _V        | j                  j                  | j                         | j                  j                  t         j                  j                         | j                  jk                  t        d*             | j                  j                  d!| j                         | j                  j                  d+| j                         t        j                         | _[        | j                  j                  d       | j                  ji                  d#d       t        jZ                         | _]        | j                  j                  | j                         | j                  j                  t         j                  j                         | j                  jk                  t        d,             | j                  j                  d| j                         t        j                         }|jI                  | j\                  ddd#       t               }|j                  t        d-      t        d.      t        d/      t        d0      t        d	      g       |j                  || j                  | j                  | j                  | j                  g       | j                  j                  d1      j                  |       t        j                  j                         | _f        | j                  j                  d2| j                         | j                          | j                  j                          | j                  j                  d1      j                          y # t        $ r}t        |       Y d }~y d }~ww xY w)3Nr   zF/usr/share/cinnamon/cinnamon-settings-users/cinnamon-settings-users.uimain_windowr   zUsers and Groupslabel_usersUserslabel_groupsGroupsbutton_add_userclickedbutton_delete_userbutton_add_groupbutton_edit_groupbutton_delete_groupr3   ro   treeview_usersTtreeview_groupsr8   pixbufypadmarkupr}   F`   */usr/share/cinnamon/faces/user-generic.pngr   rp   zClick to change the picturezBrowse for more pictures...r   zbutton-release-eventr   r   z/usr/share/cinnamon/facesr2   r  r  zClick to change the namezClick to change the passwordr   zClick to change the groupsPicturer  NamePassword	box_usersznotify::is-loaded)mr   Builderbuilderset_translation_domainadd_from_file
get_objectwindowrF   	main_quitr@   rN   r   on_user_additionon_user_deletionon_group_additionon_group_editionon_group_deletion	TreeStoreobjectr
   Pixbufr   r  set_sort_column_idSortType	ASCENDINGintr2  users_treeviewset_rules_hintgroups_treeviewget_selectionon_user_selectionon_group_selectionTreeViewColumnCellRendererPixbufr.  add_attributeINDEX_USER_PICTUREset_propertyappend_columnCellRendererTextINDEX_USER_DESCRIPTIONINDEX_GROUPNAMEset_sensitiver   face_buttonr   
face_imager   	set_imageset_from_filert   r   MenumenuSeparatorMenuItemMenuItem"_on_face_browse_menuitem_activatedmenu_displayr   pathexistsr*  listdirr   r	   Filenew_for_pathFileIconnewnew_from_giconIconSizeDIALOGrK   _on_face_menuitem_activatedrw   r  r  r  _on_accounttype_changedr   r	  _on_realname_changedrs   r   password_buttonr   r   r   _on_password_button_clickedgroups_labelset_line_wrapgroups_button_on_groups_button_clickedBoxrA   rB   rH   r   r  r  accountServiceon_accounts_service_loadedload_groupsrL   r   rR   rS   )r   columncell	separatorface_browse_menuitemr|   colnum_cols	face_dirsface_dirpicturespicturer~  file	file_iconimagemenuitemrX   rW   rY   s                       r   r   zModule.__init__  s	   M	;;=DLLL//
;LL&&'op,,11-@DKKK	3==9KK!!!$6"78LL##M2<<QwZHLL##N3==akJLL##$56>>y$J_J_`LL##$89AA)TMbMbcLL##$67??	4KaKabLL##$78@@DLaLabLL##$9:BB9dNdNdevy/?/?EDJJJ))!S\\-C-CD--S1DKKK**1cll.D.DE"&,,"9"9:J"KD..t4#'<<#:#:;L#MD --/77	4CYCYZ  ..088DD[D[\'')F))+DdD)  x1CDfa(--f5'')F'')DdD)  x1GH--f5'')F'')DdD)  v?%%a(  ..v6LL##$89GGNLL##$78FFuMLL##$9:HHO"zz|D!iikDOOO,,R4&&t7OO))*VW**34--a0M.NO
DI--/I#&<<2O0P#Q  ((T5\5\]$$%;T=N=NOCCH45I% *77>>(+%bjj&:;H#+ *!ww||Hg>"xx44T:$'LL$4$4T$:	 #		 8 8)S\\EXEX Y#&<<> U+ ((T5U5UW[\		((3AsCEJ"1u0!8"%'C**  'CIIY1c3q59II11aQAF&)&6&6&8D###//*>##///0BC##++It7S7ST"//D''	43L3LM003M1NO!$D,,S#6#&::<D   $$T%7%78  ++COO,@,@A  11!4R2ST  ((T5U5UV  ((T5U5UV #		D++D1++As3!$D""4#4#45))#//*>*>?//2N0OP&&y$2P2PQ'')CNN4++UE1=MEa	lAn,=qy!J-YZ[cYdefT%<%<d>Q>QSWSgSgimi{i{|}LL##K044U;"1"="="I"I"KD''(;T=\=\]KK  "LL##K0557 	&MM	s&   \t) D.t) St) )	u2uuc                     | j                   j                         j                         \  }}|I||   t           }t	        || j
                  | j                  | j                        }|j                         }y y r   )	rd  rg  get_selectedINDEX_USER_OBJECTr   r   r  rV  run)r   r   modeltreeiterr&   r   r   s          r   r  z"Module._on_password_button_clicked`  sk    --;;=JJLx?#45D#D$*<*<d>O>OQUQ\Q\]Fzz|H  r   c                 :   | j                   j                         j                         \  }}|||   t           }t	        |j                         | j                        }|j                         }|t        j                  j                  k(  r|j                         }t        j                  d|j                         ddj                  |      g       |j                          | j                   j#                  dj                  |             |j%                          y y )Nusermod-G,r   )rd  rg  r  r  r  r#   rV  r  r   rO   r;   r7  r   r   r   sortr  rE   r   )r   r   r  r  r&   r   r   r2  s           r   r  z Module._on_groups_button_clickedg  s    --;;=JJLx?#45D!$"4"4"6DFzz|H3++...335D,>,>,@$QWHX YZ!!**499V+<=NN  r   c                 V   | j                   j                         j                         \  }}|||   t           }| j                  j                         dk(  r*|j                  t        j                  j                         n)|j                  t        j                  j                         g }t        j                         D ],  }|j                         |d   v s|j                  |d          . |j                          | j                   j#                  dj%                  |             y y )Nro   r2   r   r   )rd  rg  r  r  r  r   set_account_typer   UserAccountTypeADMINISTRATORSTANDARDr+  r,  r#   r-  r  r  rE   r   )r   comboboxr  r  r&   r2  r3  s          r   r  zModule._on_accounttype_changedt  s    --;;=JJLx?#45D&&113q8%%o&E&E&S&ST%%o&E&E&N&NOF ,%%'583MM%(+, KKM&&tyy'89  r   c                 @   | j                   j                         j                         \  }}|q||   t           }|j	                  |       dt        j                  |      dt        j                  |j                               }|j                  |t        |       y y )N<b></b>
)
rd  rg  r  r  set_real_namer   markup_escape_textr#   	set_valuerq  )r   r   r}   r  r  r&   descriptions          r   r  zModule._on_realname_changed  s    --;;=JJLx?#45Dt$-1-D-DT-JDLcLcdhdvdvdxLyzKOOH&<kJ	  r   c           
         | j                   j                         j                         \  }}|||   t           }t	        j
                  d d t        j                  j                  t        d      t        j                  j                  t        d      t        j                  j                  f      }t	        j                         }|j                  t        d             |j                  d       |j                  |       t	        j                   t        j"                  j$                        }t	        j&                  dd      | _        t	        j*                  d	      }|j-                  | j(                  ddd
       | j(                  j/                  |       |j1                  |       |j3                  d       |j5                  d       |j7                  d       |j9                  d       |j;                  dd       |j=                  d| j>                  |       |jA                         }	|	t        j                  j                  k(  rR|jC                         }
tD        j*                  jG                  |
      }|jI                  dt*        jJ                         tL        jN                  jQ                  |jS                         d      }	 	 tM        jT                  |       tX        j[                  |       |j]                  |d       tX        j_                          |ja                  |       | jb                  je                  |       |jg                  |th        tj        jl                  jo                  |dd             |jq                  |js                  |      |       |ju                          y y # tV        $ r Y w xY w# tX        j_                          w xY w)Nr:   OpenImageszimage/*)orientationFT)r   no_show_all)r   r         r   zupdate-preview)rK  rK  .facepng0   );rd  rg  r  r  r   FileChooserDialogFileChooserActionOPENrN   rO   rP   r;   
FileFilterset_nameadd_mime_type
add_filterr  OrientationVERTICALFrameframer   r.  rK   set_preview_widgetset_preview_widget_activeset_use_preview_labelset_margin_endset_margin_topr   rF   update_preview_cbr  get_filenamePILopen	thumbnailLANCZOSr   r~  r   get_home_dirr   OSErrorpriv_helperr)   saver,   set_icon_fileru  rw  r  rm  r
   r_  new_from_file_at_sizerow_changedget_pathr   )r   r  r  r  r&   r   filterrX   previewr   r~  r  	face_paths                r   r|  z)Module._on_face_browse_menuitem_activated  s   --;;=JJLx?#45D**4s7L7L7Q7QTUV^T_adaqaqaxaxz{  }C  {D  FI  FV  FV  FY  FY  TZ  [F^^%FOOAhK(  +f%''coo&>&>?C5dCDJii-GNN4::ueQ7JJNN7#%%c*,,T2((/r"r"  b)NN+T-C-CWMzz|H3++...**,		t,%--8GGLL):):)<gF	0		),  **40JJy%0--/""9---i8*<i>N>N>d>denprtv>wx!!%..":HENNY  B # 
  --/s*   N0  'N? 0	N<9N? ;N<<N? ?Oc                    |j                         }|pt        j                  j                  |      rQ	 t        j
                  j                  |dd      }|,|j                  |       | j                  j                          y 	 |j                          | j                  j                          y # t        j                  $ r&}t        d|d|j                  d       Y d }~_d }~ww xY w)Nr  z%Unable to generate preview for file 'z' - 
)get_preview_filenamer   r~  isfiler
   r_  r  set_from_pixbufr  showr   ErrorrS   messageclearr   )r   r   r  filenamerH  es         r   r  zModule.update_preview_cb  s     ..0ww~~h'e&--CCHcSVWF)//7

) * 	

	 zz exYZYbYbcddes   AB. .C'C""C'c           	         t         j                  j                  |      rC| j                  j	                         j                         \  }}|||   t           }|j                  |       | j                  j                  |       t         j                  j                  |j                         d      }	 	 t        j                  |       t        j                  |       t!        j"                  ||       t        j%                          |j'                  |t(        t*        j,                  j/                  |dd             |j1                  |j3                  |      |       y y y # t        $ r Y w xY w# t        j%                          w xY w)Nr  r  )r   r~  r  rd  rg  r  r  r  ru  rw  r   r  r   r  r  r)   shutilcopyr,   r  rm  r
   r_  r  r  r  )r   r  r~  r  r  r&   r  s          r   r  z"Module._on_face_menuitem_activated  s4   77>>$"11??ANNPOE8#X'89""4(--d3GGLL):):)<gF	0		),  **40KKi0--/*<i>N>N>d>deikmoq>rs!!%..":HE $   # 
  --/s*   7E% +E4 %	E1.E4 0E11E4 4F
c                     |j                   dk(  rc| j                  j                  d d | j                  | j                  |j                   |j
                         | j                  j                          y y )Nro   )r   ry  popuppopup_menu_below_buttonrt  timerL   )r   r   r   s      r   r}  zModule.menu_display  sW    <<1IIOOD$(D(DdFVFVX]XdXdfkfpfpqII  r   c                    |d   }|d   }|j                         j                  |j                         j                  }}|j                         j	                         \  }}}||z   }	||z   }
|
|j                         j
                  z  }
d}|	|
|fS )Nr   r   T)get_allocationr   y
get_window
get_originheight)r   argsry  r   button_xbutton_y
unused_varwindow_xwindow_yr   r  push_ins               r   r  zModule.popup_menu_below_button  s     Awb $224668M8M8O8Q8Q( *0):):)<)G)G)I&
Hhxx 	
V""$+++!W}r   c                 $    | j                          y r   )
load_users)r   r&   params      r   r  z!Module.on_accounts_service_loaded  s    r   c                    | j                   j                          | j                  j                         }|D ]  }t        j
                  j                  |j                               r0t        j                  j                  |j                         dd      }n!t        j                  j                  ddd      }t        j                  |j                               }t        j                  |j                               }d| d| }| j                   j                  d |||g      } | j                   j#                  | j                          y )Nr  rL  r  r  )r  r  r  r  r   r~  r  get_icon_filer
   r_  r  r   r  get_real_namer#   r-  rd  	set_model)r   r  r&   rH  	real_namer  r  piters           r   r  zModule.load_users   s   

##..0 		IDww~~d0023"))??@R@R@TVXZ\]"))??@lnprtu//0B0B0DEI//0B0B0DEI	{&<KJJ%%dT6;,GHE		I 	%%djj1r   c                    | j                   j                          t        t        j                         d d      }|D ]'  }|\  }}}}| j                   j                  d ||g      }) | j                  j                  | j                          y )Nc                     | d   S r  r1   r  s    r   r!  z$Module.load_groups.<locals>.<lambda>  s
    ad r   Fr"  )r2  r  r*  r+  r,  r-  rf  r  )r   r2  r3  gr_name	gr_passwdgr_gidgr_memr  s           r   r  zModule.load_groups  sz    NEJ 	@E380WiKK&&tfg->?E	@ 	&&t{{3r   c                    | j                   j                  d       | j                   j                  d       |j                         \  }}|||   t           }| j
                  j                  d      j                  d       | j                  j                  |j                                |j                         t        j                  j                  k(  r| j                  j                  d       nw|j                         t        j                  j                  k(  r(| j                  j!                  dt#        d      z         n$| j                  j                  t#        d             |j%                         t        j&                  j(                  k(  r| j*                  j-                  d       n| j*                  j-                  d	       d }|j/                         }d}t0        j2                  j5                  |      rj	 t6        j8                  j;                  |      }|H|jC                         dkD  s|jE                         dkD  r"	 t6        j8                  jG                  |dd      }|r| jH                  jK                  |       n+|dk7  rtM        |       | jH                  jO                  d       g }
tQ        jR                         D ],  }|jU                         |d   v s|
jW                  |d	          . |
jY                          | jZ                  j                  dj]                  |
             | j
                  j                  d      j_                          ta        tc        jd                  dd|jU                         g      jg                  d      ji                  d            }|d	kD  r^| j
                  j                  d      j                  d       | j
                  j                  d      j                  t#        d             nT| j
                  j                  d      j                  d       | j
                  j                  d      j                  d       t0        j2                  j5                  d|jU                         z        r@| j                   j                  d       | j                   j                  t#        d             y y | j
                  j                  d      j                  d       | j
                  j                  d      jk                          y # t<        j>                  $ r}d
|d|j@                  }d}	Y d }~1d }~ww xY w# t<        j>                  $ r}d|d|j@                  }d}	Y d }~d }~ww xY w)NTr7   rB  r   z	<b>%s</b>zNo password setzSet at loginro   r   zCould not load pixbuf from 'z': rK  zCould not scale pixbuf from 'rL  r2   r   rP  wz-hzutf-8r  Fz This user is currently logged inz/home/.ecryptfs/%szThe user's home directory is encrypted. To preserve access to the encrypted directory, only the user should change this password.)6r  rs  r   r  r  rR  rU  r	  rE   r
  get_password_moder   UserPasswordModeREGULARr   r   
set_markuprN   get_account_typer  r  r  r   r	  r   r~  r  r
   r_  new_from_filer   r  r  
get_height	get_widthr  ru  r  rS   rw  r+  r,  r#   r-  r  r  r   r  rc  r   check_outputdecodecountr   )r   	selectionr  r  r&   rH  r~  r  r  errorr2  r3  connectionss                r   rh  zModule.on_user_selection  sO   **40--b1#002x?#45DLL##$89GGM((););)=>%%'?+K+K+S+SS""++,RS'')_-M-M-R-RR""--kA>O<P.PQ""++An,=>$$&/*I*I*W*WW''2215''2215F%%'DGww~~d#!&--;;DAF
 %((*R/63C3C3E3J)%.%5%5%K%KDRTVX%YF
 //7b='N--.Z[F ,%%'583MM%(+, KKM&&tyy'89LL##K0557 j55sD$BTBTBV6WX__`ghnnostuKQ''(<=KKER''(<=NNqQsOtu''(<=KKDQ''(<=NNrRww~~2T5G5G5IIJ$$2259$$55a  9|  7}  ~ K
 LL##$89GGNLL##K0557U zz !GKQYYWG E!  $zz )PTVWV_V_&`G$(E)s0    T# !U #U6UUV
+VV
c                 .   | j                   j                         j                         \  }}|g||   t           }t	        d      |j                         z  }t        j                  | j                  t        j                  j                  t        j                  j                  z  t        j                  j                  t        j                  j                  |      }|j!                  |       |j#                  t        j$                  j&                         |j)                         }|j+                          |t        j$                  j,                  k(  rA| j.                  j1                  |d      }|r"|j3                  |       | j5                          y y y y )Nz[Are you sure you want to permanently delete %s and all the files associated with this user?T)rd  rg  r  r  rN   r#   r   MessageDialogrV  DialogFlagsMODALDESTROY_WITH_PARENTr   QUESTIONButtonsTypeYES_NOr  set_default_responserO   NOr  r   YESr  delete_userr   r  )	r   r   r  r  r&   r  drresults	            r   rY  zModule.on_user_deletionb  sB   --;;=JJLx?#45Duvy}  zL  zL  zN  NG!!$++"%//"7"7#//:]:]"]"%//":":"%//"8"8")	+A
 LL!""3#3#3#6#67AIIKC$$(((,,88tDLL*$$&  )  r   c                    t        | j                        }|j                         }|t        j                  j
                  k(  r|j                  j                         dk(  rt        j                  j                  }nt        j                  j                  }|j                  j                         }|j                  j                         }| j                  j!                  |||      }|j#                  t        j$                  j&                         t(        j*                  j-                  ddd      }dt/        j0                  |      dt/        j0                  |      }	| j2                  j5                  d |||	g      }
|j                  j                         dk(  rt7        j8                  d|dd|z  g       nt7        j8                  d|dd	|z  g       | j;                          |j=                          y )
Nro   rL  r  r  r  r  r  z%s,sudo,nopasswdloginz%s,nopasswdlogin)r   rV  r  r   rO   r;   r  r   r   r  r  r  r	  r^   r  r  create_userset_password_moder  r   r
   r_  r  r   r  r  r-  r   r   r  r   )r   r   r   r   account_typer  r  new_userrH  r  r  s              r   rX  zModule.on_user_additionv  s   t{{+::<s''***((335:.>>LL.>>GG,,557H,,557H**66x<XH&&'G'G'L'LM%%;;<hjlnpqF-1-D-DX-NPTPgPghpPqrKJJ%%dXv{,KLE((335:Hd<SV^<^ _`Hd<NQY<Y Z[r   c                     | j                   j                         j                         \  }}|'t        d||   t           j                         z         y y )NzEditing user %s)rd  rg  r  rS   r  r#   )r   r   r  r  s       r   on_user_editionzModule.on_user_edition  sO    --;;=JJLx#eHo6G&H&V&V&XXY  r   c                    |j                         \  }}|+| j                  j                  d      j                  d       | j                  j                  d      j                  d       | j                  j                  d      j	                  d       ||   t
           }t        j                         D ]  }|d   }t        j                  |d         d   }||k(  s)| j                  j                  d      j                  d       | j                  j                  d      j	                  t        d      |z          y  y | j                  j                  d      j                  d       | j                  j                  d      j                  d       | j                  j                  d      j	                  d       y )	NrD  TrE  r7   r   r2   Fz'This group is set as %s's primary group)r  rR  rU  rs  r   rr  r   getpwallr+  getgrgidrN   )r   r!  r  r  r3  pr  primary_groups           r   ri  zModule.on_group_selection  sw   #002xLL##$78FFtLLL##$9:HHNLL##$9:KKBO(OO4E\\^ Q4 #QqT 21 5 E)LL++,ABPPQVWLL++,ABSSTUV  UA  DL  UL  M LL##$78FFuMLL##$9:HHOLL##$9:KKBOr   c                    | j                   j                         j                         \  }}|?||   t           }t	        d      |z  }t        j                  | j                  t
        j                  j                  t
        j                  j                  z  t
        j                  j                  t
        j                  j                  |      }|j                  |       |j!                  t
        j"                  j$                         |j'                         }|t
        j"                  j(                  k(  r't+        j,                  d|g       | j/                          |j1                          y y )Nz/Are you sure you want to permanently delete %s?groupdel)rf  rg  r  rr  rN   r   r%  rV  r&  r'  r(  r   r)  r*  r+  r  r,  rO   r-  r  r.  r   r   r  r   )r   r   r  r  r3  r  r0  r1  s           r   r\  zModule.on_group_deletion  s   ..<<>KKMx(OO4EIJURG!!$++"%//"7"7#//:]:]"]"%//":":"%//"8"8")	+A
 LL!""3#3#3#6#67AC$$(((U 34  "IIK  r   c                 X   t        t        d      d| j                        }|j                         }|t        j
                  j                  k(  rMt        j                  d|j                  j                         j                         g       | j                          |j                          y )N
Group Namer7   groupadd)r5   rN   rV  r  r   rO   r;   r   r   rD   r^   r_   r  r   )r   r   r   r   s       r   rZ  zModule.on_group_addition  st    Q|_b$++>::<s''***OOZ)>)>)@)F)F)HIJr   c                    | j                   j                         j                         \  }}|||   t           }t	        t        d      || j                        }|j                         }|t        j                  j                  k(  rOt        j                  d|d|j                  j                         j                         g       | j!                          |j#                          y y )NrB  groupmodz-n)rf  rg  r  rr  r5   rN   rV  r  r   rO   r;   r   r   rD   r^   r_   r  r   )r   r   r  r  r3  r   r   s          r   r[  zModule.on_group_edition  s    ..<<>KKMx(OO4E <%EFzz|H3++...UD&,,:O:O:Q:W:W:Y Z[  "NN  r   N)r-   r.   r/   r   r  r  r  r  r|  r  r  r}  r  r  r  r  rh  rY  rX  r9  ri  r\  rZ  r[  r1   r   r   r9  r9    st    N`$: K.`$F*!
*24G8R'(.ZP($	r   r9  __main__zcinnamon-settings-users),r   r   r+  gettextr  r  r   randomr   r   r  r   girequire_versiongi.repositoryr   r   r	   r
   r   r   installr^  r   r  r   r  rm  rq  	INDEX_GIDrr  Dialogr5   TablerA   Notebookr   r   r   r  r9  r-   modulemainr1   r   r   <module>rS     sC   
 
 
   	   % 
  	   5%     $e , M M 
/ 0' '6 lBG( ?&(>$Qx O)D3:: )DV399 0<%S\\ <%|hDSZZ hDT@@CJJ @@D*3:: *X| |~ z*+XFCHHJ r   