
    ?gJ                     D   	 d dl Z  ed       d dlZd dlZd dlmZ d dlZd dlZd dl	Z	d dl
mZ d dlZ ej                  dd       d dlmZmZmZmZ d d	lmZ d d
lmZ d dl  G d de      Z G d d      Z G d dej8                        Zy#  d dlZ ed       dZ Y xY w)    Nz Using pam module (python3-pampy)zUsing PAM module (python3-pam))randint)ImageAccountsServicez1.0)r   GLib	GdkPixbufXApp)SidePage)PictureChooserButton)*c                       e Zd ZdZy)PasswordErrorz8Exception raised when an incorrect password is supplied.N)__name__
__module____qualname____doc__     8/usr/share/cinnamon/cinnamon-settings/modules/cs_user.pyr   r      s    Br   r   c                   `    e Zd ZdZdZ ed      Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zy)Moduleuserprefsz)Change your user preferences and passwordc                 h    t        d      }t        t        d      d|||       }|| _        d | _        y )Nz-user, account, information, details, passwordAccount detailszcs-user)module)_r	   sidePagewindow)selfcontent_boxkeywordsr   s       r   __init__zModule.__init__$   s4    DEA/0)X{[_` r   c                     || _         y N)r   )r   r   s     r   _setParentRefzModule._setParentRef*   s	    r   c                 j   | j                   s&t        d       t               }| j                  j	                  |       |j                  t        d            }| j                  j                         | _	        t        ddd| j                  z  d      | _        | j                  j                  dd       | j                  j                  t        d	             t        j                  j!                  t        d
            | _        | j"                  j%                  d| j&                         t        j                  j!                  t        d            | _        | j(                  j%                  d| j*                         dg}|D ]  }t,        j.                  j1                  |      s#t3        t-        j4                  |            }|D ]H  }t,        j.                  j7                  ||      }| j                  j9                  || j:                         J  t=               }t        j>                  jA                  t        d            }	|jC                  |	ddd       |jE                  | j                  ddd       |jG                  |       t        jH                  jA                  t        jJ                  jL                        }
t=               }t        j>                  jA                  t        d            }	|jC                  |	ddd       tO               | _(        |
j	                  | jP                         | jP                  j%                  d| jR                         | jP                  j                  t        d             |jE                  | jP                  ddd       |jG                  |       t=               }t        j>                  jA                  t        d            }	|jC                  |	ddd       t        j>                  jA                  d      }|j                  dd       t        jU                         | _+        |
j	                  | jV                         | jV                  jY                  |       | jV                  j[                  t        j\                  j^                         | jV                  j                  t        d             | jV                  j%                  d| j`                         | jV                  j%                  d| j`                         |jE                  | jV                  ddd       |jG                  |       tc        jd                         }tf        jh                  jk                         jm                  |      | _7        | jn                  j%                  d| jp                         | j                  js                          dd l:}tw        |ju                  d            dkD  }|r%| j                  jy                  | j"                         | j                  jy                  | j(                         y y )NzLoading User moduler      @   T)num_colsbutton_picture_widthmenu_picture_widthkeep_square              ?zClick to change your picturezTake a photo...activatezBrowse for more pictures...z/usr/share/cinnamon/facesPictureFr   NamechangedzClick to change your namePasswordu   ••••••?zClick to change your passwordreleasedznotify::is-loadedz/dev/video*)=loadedprintSettingsPager   
add_widgetadd_sectionr   r   get_scale_factorscaler
   face_buttonset_alignmentset_tooltip_textGtkMenuItemnew_with_labelface_photo_menuitemconnect!_on_face_photo_menuitem_activatedface_browse_menuitem"_on_face_browse_menuitem_activatedospathexistssortedlistdirjoinadd_picture_on_face_menuitem_activatedSettingsWidgetLabelnew
pack_startpack_endadd_row	SizeGroupSizeGroupMode
HORIZONTALEditableEntryrealname_entry_on_realname_changedButtonpassword_buttonadd
set_reliefReliefStyleNONE_on_password_button_clickedr   get_user_namer   UserManagerget_defaultget_useraccountServiceload_user_infoadd_separatorgloblenadd_menuitem)r   pagesettings	face_dirsface_dirpicturespicturerI   widgetlabel
size_grouppassword_maskcurrent_userrj   webcam_detecteds                  r   on_module_selectedzModule.on_module_selected-   s   {{'(>DMM$$T*''*;(<=H557DJ3QUWlnosoyoyly  HL   MD**34--a0N.OP'*||'B'B1EVCW'XD$$$,,Z9_9_`(+(C(CAFcDd(eD%%%--j$:a:ab45I% ]77>>(+%bjj&:;H#+ ]!ww||Hg>((44T4;[;[\]] $%FIIMM!I,/EeUE15OOD,,eUA>V$**3+<+<+G+GHJ#%FIIMM!F),EeUE15"//D!!$"5"56''	43L3LM003N1OPOOD//qAV$#%FIIMM!J-0EeUE15IIMM*PQM''S1#&::<D !!$"6"67  $$]3  ++COO,@,@A  11!4S2TU  ((T5U5UV  ((T5U5UVOOD00%BV$--/L"1"="="I"I"K"T"TUa"bD''(;T=P=PQ**, !$))M":;a?O  --d.F.FG))$*C*CDU r   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)N   z%Unable to generate preview for file 'z' - 
)get_preview_filenamerH   rI   isfiler   Pixbufnew_from_file_at_sizeset_from_pixbufframeshowr   Errorr7   messageclearhide)r   dialogpreviewfilenamepixbufes         r   update_preview_cbzModule.update_preview_cbz   s    ..0ww~~h'e&--CCHcSVWF)//7

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

	 zz exYZYbYbcddes   AB. .C'C""C'c                 v   dt        j                  g d      k7  rt        d       y d}t        j                  |      }|j
                  \  }}||kD  r|}|}n||kD  r|}|}n|}|}||z
  dz  }||z
  dz  }	||z   dz  }
||z   dz  }|j                  ||	|
|f      }|j                  dt        j                         t        j                  j                  | j                  j                         d      }|j                  |d       | j                  j                  |       | j                   j#                  |       y )	Nr   )streamerz-j90z-t8z	-s800x600z-oz/tmp/temp-account-pic00.jpegzError: Webcam not availablez/tmp/temp-account-pic07.jpeg   )   r   .facepng)
subprocesscallr7   r   opensizecrop	thumbnailLANCZOSrH   rI   rM   rg   get_home_dirsaveset_icon_filer=   set_picture_from_file)r   menuitemrI   imagewidthheight	new_width
new_heightlefttoprightbottom	face_paths                r   rE   z(Module._on_face_photo_menuitem_activated   s0    
 noo/0 . 

4 

v6>IJe^IJIJ	!Q&
"a'"a':%*

D#uf56
EMM2GGLL!4!4!A!A!CWM	

9e$)))4..y9r   c           	      $   t         j                  d d t         j                  j                  t         j                  t         j
                  j                  t         j                  t         j
                  j                  f      }|j                  | j                  j                                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*                  j1                  |       |j3                  |       |j5                  d       |j7                  d       |j9                  d	       |j;                  d	       |j=                  d
d       |j?                  d| j@                  |       |jC                         }|t         j
                  j                  k(  r<|jE                         }tG        |       |jI                  d      r|}nlt         jJ                  jM                         }	|	jO                  |d|jQ                         t         jR                  jT                        }
|
r|
jE                         nd }tV        jX                  j[                  | j                  j                         d      }t\        j^                  ja                  |dd      }|jc                  |d       | j                  je                  |       | jf                  ji                  |       |jk                          y )NImageszimage/*)orientationFT)visibleno_show_all)r   r      r{   zupdate-preview/   r   r   r   )6r@   FileChooserDialogFileChooserActionOPENSTOCK_CANCELResponseTypeCANCEL
STOCK_OPENOKset_current_folderrg   r   
FileFilterset_namer   add_mime_type
add_filterBoxOrientationVERTICALFramer   r   rS   r^   set_preview_widgetset_preview_widget_activeset_use_preview_labelset_margin_endset_margin_topset_size_requestrD   r   runget_filenamer7   
startswith	IconThemere   lookup_icon_for_scaler;   IconLookupFlags
FORCE_SIZErH   rI   rM   r   r   r   savevr   r=   r   destroy)r   r   r   filterboxr   responsestringrI   theme	icon_infor   r   s                r   rG   z)Module._on_face_browse_menuitem_activated   s   &&tT33H3H3M3MPSP`P`bebrbrbyby{~  |J  |J  LO  L\  L\  L_  L_  P`  a!!$"5"5"B"B"DE!($Y'&!gg#//":":g;YYu$Y?
))D))tzz5%3

w!!#&((.$$U+22S"%')?)?I::<s''***((*F&M  %113!77VE\E\E^`c`s`s`~`~	3<y--/$T%8%8%E%E%GQI%%;;D#rJFLLE*--d32248r   c                    t         j                  j                  |      rh| j                  j	                  |       t        j                  |t         j                  j                  | j                  j                         d             yy )Nr   T)	rH   rI   rJ   rg   r   shutilcopyrM   r   )r   rI   s     r   rO   z"Module._on_face_menuitem_activated   sZ    77>>$--d3KKbggll4+>+>+K+K+MwWX  r   c                 j   | j                   j                  |j                                t        j                  j                  | j                  j                         d      |j                         dfD ]>  }t        j                  j                  |      s#| j                  j                  |        y  y )Nr   z*/usr/share/cinnamon/faces/user-generic.png)rZ   set_textget_real_namerH   rI   rM   rg   r   get_icon_filerJ   r=   r   )r   r   paramrI   s       r   rh   zModule.load_user_info   s    $$T%7%7%9:WW\\$"5"5"B"B"DgNPTPbPbPd  gS  T 	Dww~~d#  66t<	r   c                 :    | j                   j                  |       y r$   )rg   set_real_name)r   rs   texts      r   r[   zModule._on_realname_changed   s    ))$/r   c                 8    t               }|j                         }y r$   )PasswordDialogr   )r   rs   r   r   s       r   rb   z"Module._on_password_button_clicked   s    !::<r   N)r   r   r   namecategoryr   commentr"   r%   ry   r   rE   rG   rO   rh   r[   rb   r   r   r   r   r      sN    DH;<GKEZ $:N+Z0 r   r   c                   f     e Zd Z f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 xZS )r   c           	         t         t        |           d| _        | j	                  d       | j                  d       | j                  d       | j                  t        d             t        j                  dd      }|j                  d       |j                  d       |j                  d       t        j                  j                  t        d            }|j!                  d	d
       |j#                  |dd	dd	       t        j                  j                  t        d            }|j!                  d	d
       |j#                  |dd	d	d       t        j                  j                  t        d            }|j!                  d	d
       |j#                  |dd	dd       t        j%                         | _        | j&                  j)                  d       | j&                  j+                  d| j,                         |j#                  | j&                  d	ddd	       t        j%                         | _        | j.                  j1                  t        j2                  j4                  d       | j.                  j7                  t        j2                  j4                  t        d             | j.                  j9                  t        d             | j.                  j+                  d| j:                         | j.                  j+                  d| j<                         |j#                  | j.                  d	dd	d       t        j?                         | _         | j@                  j9                  t        d             | j@                  jC                  d       |j#                  | j@                  d	dddt        jD                  jF                  t        jD                  jH                  z         | j@                  jK                  dd	       t        j                         | _&        | jL                  j9                  t        d             | jL                  j!                  d	d
       |j#                  | jL                  dddd       t        j%                         | _'        | jN                  j+                  d| j<                         |j#                  | jN                  d	ddd       t        jQ                  t        d            | _)        | jR                  j+                  d| jT                         |j#                  | jR                  d	ddd       | j                  d       | jW                         }|jY                  |       | j[                          t        j]                         | _/        | j^                  ja                  t        jb                  jd                         t        j                  j                  t        d            }| j^                  jW                         }|jY                  |       |j#                  | j^                  dddd       | jg                  t        jh                  t        jj                  jl                  t        d      t        jj                  jn                         | jq                          | js                  t        jj                  jn                  d       | j^                  ju                          | j+                  d| jv                         y )NFTzChange Password            zCurrent password   r.   r   zNew passwordr   zConfirm passwordr'   zfocus-out-eventzview-refreshzGenerate a passwordzicon-releaser2   z8Your new password needs to be at least 8 characters longr-   )xoptionsr   zShow passwordtoggled   z1An error occurred. Your password was not changed.Changer   )<superr   r"   correct_current_password	set_modalset_skip_taskbar_hintset_skip_pager_hint	set_titler   r@   Tableset_border_widthset_row_spacingsset_col_spacingsrQ   rR   r>   attachEntrycurrent_passwordset_visibilityrD   _on_current_password_changednew_passwordset_icon_from_icon_nameEntryIconPosition	SECONDARYset_icon_tooltip_textr?   _on_new_password_icon_released_on_passwords_changedProgressBarstrengh_indicatorset_fractionAttachOptionsEXPANDFILLr   strengh_labelconfirm_passwordCheckButtonshow_password_on_show_password_toggledget_content_arear^   show_allInfoBarinfobarset_message_typeMessageTypeERRORadd_buttonsr   r   r   r   set_passwords_visibilityset_response_sensitiver   _on_response)r   tablert   r   content	__class__s        r   r"   zPasswordDialog.__init__   s   nd,.(-%t""4(  &q*+,		!Qq!q!r"		a 234As#UAq!Q'		a/0As#UAq!Q'		a 234As#UAq!Q' #		,,U3%%&79Z9Z[T**Aq!Q7IIK11#2G2G2Q2QSab//0E0E0O0OQRShQij**1-B+CD!!.$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&;&;<		a STU,,//1ET\\1aA.))3+;+;+B+BAhKQTQaQaQdQdg%%'##C$4$4$7$7?Z!2!23r   c                     |t         j                  j                  k(  r| j                          y | j	                          y r$   )r@   r   r   change_passwordr   )r   r   response_ids      r   r  zPasswordDialog._on_responseE  s+    #**---  "LLNr   c                 P   | j                   j                         }| j                  j                         }t        j                  d      }t        j                  d       |j                  |       t        j                  d       |j                  |       t        j                  d       |j                  |       t        j                  d       |j                          |j                  |j                  dkD  r| j                  j                          y | j                          y )Nz/usr/bin/passwdr.   r   )r   get_textr  pexpectspawntimesleepsendlineclose
exitstatusr  r  r   )r   oldpassnewpasspasswds       r   r$  zPasswordDialog.change_passwordK  s    ''002##,,.01

3 

3 

3 

3$(9(9A(=LL!!#LLNr   c                     | j                   j                         }| j                  j                  |       | j                  j                  |       y r$   )r  
get_activer  r  r  )r   r   s     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_- r   r   r   )r  r   r  
set_activeranger   rk   r  r   r  check_passwords)r   rs   icon_posevent
charactersr0  iindexs           r   r  z-PasswordDialog._on_new_password_icon_releasedb  s    %%d+W
 	2AAs:12E
5 11G	2 	""7+&&w/r   c                 $    | j                          y r$   )r  )r   rs   s     r   r  z(PasswordDialog._on_show_password_toggledo  s    %%'r   c                     t        j                          j                  t        j                         | j                  j                         d      st        d      y )Nr1  Invalid password)pamauthenticater   rc   r   r'  r   )r   s    r   auth_pamzPasswordDialog.auth_pamr  sE    wwy%%d&8&8&:D<Q<Q<Z<Z<\^fg 233 hr   c                    t        j                         }|j                  d       |j                  t         j                  t        j                                |j                  t         j                  | j                         	 |j                          |j                          y# t         j                  $ r}t        d      d }~ww xY w)Nr1  Tr@  )PAMrA  startset_itemPAM_USERr   rc   PAM_CONVpam_convrB  	acct_mgmterrorr   )r   authresps      r   
auth_PyPAMzPasswordDialog.auth_PyPAMv  s    wwy

8cllD$6$6$89cllDMM2	4NNyy 	4 233	4s    B$ $C7CCc                 V   | j                   j                          | j                  j                         dk7  r	 t        r| j                         n| j                          | j                  j                  t        j                  j                  d        | j                  j                  d       d| _        | j                          y y # t        $ r | j                  j                  t        j                  j                  t        j                         | j                  j!                  t        j                  j                  t#        d             | j                  j                  t#        d             d| _        Y y  | j                  j                  t        j                  j                  t        j                         | j                  j!                  t        j                  j                  t#        d             | j                  j                  t#        d             d| _         xY w)Nr5  TzWrong passwordFzInternal Error)r  r   r   r'  rA  rC  rO  set_icon_from_stockr@   r  r  r?   r   r8  r   STOCK_DIALOG_WARNINGr  r   )r   rs   r:  s      r   r  z+PasswordDialog._on_current_password_changed  s     ))+r1'#&DOO,= %%99#:O:O:Y:Y[_`%%66r:04-$$&% 2 ! 6%%99#:O:O:Y:Y[^[s[st%%;;C<Q<Q<[<[]^_o]pq%%66q9I7JK05-%%99#:O:O:Y:Y[^[s[st%%;;C<Q<Q<[<[]^_o]pq%%66q9I7JK05-s   &C B3H(<B,H(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   r   r'   r   g?皙?g333333?)isdigitislowerisupperrk   min)	r   passwordupperlower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  r| j                  j                  t        j                  j                  t        j                         | j                  j                  t        j                  j                  t        d             | j                  j                  t        d             nO| j                  j                  t        j                  j                  d        | 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 )NzPasswords do not matchr5  r   z	Too shortr-   g333333?WeakrT  g      ?Fairg?r4   GoodStrongg      ?)r  r   r  r'  r  ra  rQ  r@   r  r  rR  r  r   r?   rk   r  r   r  r  r8  )r   rs   r  r  r`  s        r   r	  z$PasswordDialog._on_passwords_changed  s   ((1130099;)),7++!!55c6K6K6U6UWZWoWop!!778M8M8W8WYZ[sYtu!!2215M3NO!!55c6K6K6U6UW[\!!2226|q ''+7""//4^''&	2""//4_''&	2""//4^''&	2""//4''(4""//4r   c                 V   | j                   r| j                  j                         }| j                  j                         }t	        |      dk\  r0||k(  r+| j                  t        j                  j                  d       y | j                  t        j                  j                  d       y y )Nr   TF)	r   r  r'  r  rk   r  r@   r   r   )r   r  r  s      r   r8  zPasswordDialog.check_passwords  s    ((,,557L#44==?< A%,:J*J++C,<,<,?,?F++C,<,<,?,?G )r   c                     g }t        t        |            D ]7  }||   \  }}| j                  j                         }|j	                  |df       9 |S )Nr   )r7  rk   r   r'  append)	r   rM  
query_listuserDatarN  r<  querytypevals	            r   rJ  zPasswordDialog.pam_conv  sW    s:' 	"A$Q-KE4''002CKKa!	" r   )r   r   r   r"   r  r$  r  r  r  rC  rO  r  ra  r	  r8  rJ  __classcell__)r"  s   @r   r   r      sG    N4`$6
(4
4'08<Hr   r   )rA  r7   rE  r(  r*  randomr   r   rH   r   PILr   girequire_versiongi.repositoryr   r   r   r   SettingsWidgetsr	   ChooserButtonWidgetsr
   xapp.GSettingsWidgets	Exceptionr   r   r@   Dialogr   r   r   r   <module>rz     s   	
,-
     	   	   $e , @ @ $ 5 #	I 	
Q  Q hpSZZ p[	
*+
Cs   B B