ó
    ©sIjp  ã                  óv   • S SK Jr  S SKrS SKrS SKrS SKJr  \" S5      rS
S jrSS jr	SS jr
SS jrSS	 jrg)é    )ÚannotationsN)Ú
get_loggerzactions.sftpc                ó¦  •  SSK nUR                  U 5        g! [         a     g[         a£    [        R
                  R                  S5      (       a|   [        SSSS9 nU H?  nUR                  5       R                  S	5      nU(       d  M+  US   U :X  d  M6    SSS5         g   SSS5        O!! , (       d  f       O= f! [         a     Of = f gf = f)
z@Check if a system user exists using pwd or /etc/passwd fallback.r   NTFz/etc/passwdÚrzutf-8)ÚencodingÚ:)ÚpwdÚgetpwnamÚKeyErrorÚImportErrorÚosÚpathÚexistsÚopenÚstripÚsplitÚ	Exception)Úusernamer	   ÚfÚlineÚpartss        Ú6D:\Programs\laragon\www\wolf\agent\src\actions\sftp.pyÚuser_existsr      s¶   € ðÛØ�‰�XÔØøÜó ÙÜó ä�7‰7�>‰>˜-×(Ñ(ðÜ˜-¨°wÒ?À1Û !˜Ø $§
¡
£× 2Ñ 2°3Ó 7˜ß ˜5 U¨1¡X°Õ%9Ø#'÷	 @Ñ?Ù !÷ @×?Ö?ûô
 ó Ùðúáðúst   ‚ ˜
C¤-CÁB=Á*B,ÂB,ÂB,ÂB=Â!B,Â#B=Â+CÂ,
B:	Â6B=Â9CÂ:B=Â=
C
ÃCÃ	C
Ã
CÃCc                ó”  • U (       d  [        S5      e[        R                  R                  S5      nU(       a?  [        R                  R                  [        R                  R                  USS5      5      nO[        R                  R                  S5      n[        R                  R                  U 5      nX2:w  a²  UR                  U[        R                  -   5      (       d‹  UR                  SS5      nUR                  SS5      n[        U5      S:”  a  US   S	:X  a  US
S n[        U5      S:”  a  US   S	:X  a  US
S nXE:w  a(  UR                  US-   5      (       d  [        SU S35      e[        R                  S:X  aG  U R                  S5      (       a1  Un[        U5      S:”  a  US   S	:X  a  US
S nUR                  SS5      $ U$ )zXResolve and verify that the path is strictly within the allowed web root base directory.zhome_directory is requiredÚWOLFPANEL_DEV_HOMEÚvarÚwwwz/var/wwwÚ\Ú/é   r   é   Nz:Access denied: Path is outside of allowed base directory (Ú)Únt)Ú
ValueErrorr   ÚenvironÚgetr   ÚrealpathÚjoinÚ
startswithÚsepÚreplaceÚlenÚPermissionErrorÚname)Ú	user_pathÚdev_homeÚ	base_pathÚresolved_pathÚnormalized_resolvedÚnormalized_baseÚres_strs          r   Ú_verify_safe_pathr6   !   s–  € æÜÐ5Ó6Ð6ä�z‰z�~‰~Ð2Ó3€HÞÜ—G‘G×$Ñ$¤R§W¡W§\¡\°(¸EÀ5Ó%IÓJ‰	ä—G‘G×$Ñ$ ZÓ0ˆ	ä—G‘G×$Ñ$ YÓ/€Mð Ó!¨-×*BÑ*BÀ9ÌrÏvÉvÑCU×*VÑ*Và+×3Ñ3°D¸#Ó>ÐØ#×+Ñ+¨D°#Ó6ˆÜÐ"Ó# aÓ'Ð,?ÀÑ,BÀcÓ,IØ"5°a°bÐ"9ÐÜˆÓ !Ó#¨¸Ñ(:¸cÓ(AØ-¨a¨bÐ1ˆOàÓ1Ð:M×:XÑ:XÐYhÐknÑYn×:oÑ:oÜ!Ð$^Ð_lÐ^mÐmnÐ"oÓpÐpä	‡w�w�$ƒ˜9×/Ñ/°×4Ñ4ØˆÜˆw‹<˜!Ó ¨¡
¨cÓ 1Ø˜a˜b�kˆGØ�‰˜t SÓ)Ð)àÐó    c           
     óF  •  U R                  S5      nU R                  S5      nU R                  S5      nU(       a  U(       a  U(       d  [        S5      e[        R                  " SS[	        U5      5      SS nU(       d  [        S	5      e[        U5      nS
U 3n[        R                  SXe5        [        U5      (       a  [        SU S35      eSSSUSSSSU/	n[        R                  " USSSS9nUR                  S:w  a&  [        SUR                  R                  5        35      e[        R                  " S/U SU 3SSSS9nUR                  S:w  a&  [        SUR                  R                  5        35      e[        R                  " SSU/SSSS9nUR                  S:w  a&  [        S UR                  R                  5        35      e[        R                  " S!U S"3U/SSSS9nUR                  S:w  a&  [        S#UR                  R                  5        35      e[        R                  S$U5        SS%U S&3US'.$ ! [         aW  n	[        R!                  S([	        U	5      R#                  U R                  SS)5      S)5      5        S[	        U	5      S*.s Sn	A	$ Sn	A	ff = f)+zUCreate a new SFTP user with a home directory and group www-data, and assign password.Úusername_suffixÚpasswordÚhome_directoryz:username_suffix, password, and home_directory are requiredz[^a-zA-Z0-9_]Ú Né    z Invalid or empty username_suffixÚ
wolf_sftp_z-Attempting to create SFTP user: %s (home: %s)úUser z already existsÚuseraddz-mz-dz-sz/usr/sbin/nologinz-gzwww-dataTF©Úcapture_outputÚtextÚcheckr   zuseradd failed: Úchpasswdr   ©ÚinputrB   rC   rD   úchpasswd failed: ÚchmodÚ750zchmod failed: Úchownz	:www-datazchown failed: z!SFTP user %s created successfullyú
SFTP user z created successfully©ÚsuccessÚmessager   z*SFTP creation failed (password hidden): %sÚ____©rN   Úerror)r&   r$   ÚreÚsubÚstrr6   ÚlogÚinfor   Ú
subprocessÚrunÚ
returncodeÚOSErrorÚstderrr   r   rR   r+   )
Úpayloadr9   r:   r;   Úsuffix_sanitizedÚsafe_home_directoryr   Úcmd_useraddÚresÚexcs
             r   Úhandle_sftp_createrc   D   sª  € ðB
Ø!Ÿ+™+Ð&7Ó8ˆØ—;‘;˜zÓ*ˆØ Ÿ™Ð%5Ó6ˆæ¦h¶nÜÐYÓZÐZô Ÿ6š6Ð"2°B¼¸OÓ8LÓMÈcÈrÐRÐÞÜÐ?Ó@Ð@ä/°Ó?ÐØÐ 0Ð1Ð2ˆÜ�‰Ð@À(Ô`ä�x× Ñ Ü˜u X J¨oÐ>Ó?Ð?ð ØØÐ%ØÐ%Ø�*Øð
ˆô �nŠn˜[¸ÀDÐPUÑVˆØ�>‰>˜QÓÜÐ,¨S¯Z©Z×-=Ñ-=Ó-?Ð,@ÐAÓBÐBô �nŠnØˆLØ�J˜a ˜zÐ*ØØØñ
ˆð �>‰>˜QÓÜÐ-¨c¯j©j×.>Ñ.>Ó.@Ð-AÐBÓCÐCô �nŠn˜g uÐ.AÐBÐSWÐ^bÐjoÑpˆØ�>‰>˜QÓÜ˜N¨3¯:©:×+;Ñ+;Ó+=Ð*>Ð?Ó@Ð@ä�nŠn˜g¨(¨°9Ð'=Ð?RÐSÐdhÐosð  |Añ  Bˆà�>‰>˜QÓÜ˜N¨3¯:©:×+;Ñ+;Ó+=Ð*>Ð?Ó@Ð@ä�‰Ð4°hÔ?àØ# H :Ð-BÐCØ ñ
ð 	
øô ó 
Ü�	‰	Ð>ÄÀCÃ×@PÑ@PÐQX×Q\ÑQ\Ð]gÐioÓQpÐrxÓ@yÔzàÜ˜“Xñ
õ 	
ûð
ús   ‚H<H? È?
J É	AJÊJ ÊJ c                ó*  •  U R                  SS5      nUR                  S5      (       d  [        S5      e[        R	                  SU5        [        U5      (       d  [        SU S35      e[        R                  " SS	U/S
S
SS9nUR                  S:w  a&  [        SUR                  R                  5        35      e[        R	                  SU5        S
SU S3US.$ ! [         a.  n[        R                  SU5        S[        U5      S.s SnA$ SnAff = f)z-Delete an SFTP user and their home directory.r   r<   r>   ú%Username must start with 'wolf_sftp_'z"Attempting to delete SFTP user: %sr?   ú does not existÚuserdelz-rTFrA   r   zuserdel failed: z!SFTP user %s deleted successfullyrL   z deleted successfullyrM   zSFTP deletion failed: %srQ   N)r&   r)   r$   rV   rW   r   rX   rY   rZ   r[   r\   r   r   rR   rU   )r]   r   ra   rb   s       r   Úhandle_sftp_deleterh   ‹   s  € ð
Ø—;‘;˜z¨2Ó.ˆØ×"Ñ" <×0Ñ0ÜÐDÓEÐEä�‰Ð5°xÔ@ä˜8×$Ñ$Ü˜u X J¨oÐ>Ó?Ð?ô �nŠn˜i¨¨xÐ8ÈÐTXÐ`eÑfˆØ�>‰>˜QÓÜÐ,¨S¯Z©Z×-=Ñ-=Ó-?Ð,@ÐAÓBÐBä�‰Ð4°hÔ?àØ# H :Ð-BÐCØ ñ
ð 	
øô ó 
Ü�	‰	Ð,¨cÔ2àÜ˜“Xñ
õ 	
ûð
ús   ‚CC Ã
DÃ$#DÄDÄDc           
     óØ  •  U R                  SS5      nU R                  S5      nU(       a  U(       d  [        S5      eUR                  S5      (       d  [        S5      e[        R	                  SU5        [        U5      (       d  [        SU S	35      e[        R                  " S
/U SU 3SSSS9nUR                  S:w  a&  [        SUR                  R                  5        35      e[        R	                  SU5        SSU S3US.$ ! [         aW  n[        R                  S[        U5      R                  U R                  SS5      S5      5        S[        U5      S.s SnA$ SnAff = f)z$Reset the password for an SFTP user.r   r<   Únew_passwordz&username and new_password are requiredr>   re   z.Attempting to reset password for SFTP user: %sr?   rf   rE   r   TFrF   r   rH   z,Password for SFTP user %s reset successfullyzPassword for SFTP user z reset successfullyrM   z0SFTP password reset failed (password hidden): %srP   rQ   N)r&   r$   r)   rV   rW   r   rX   rY   rZ   r[   r\   r   r   rR   rU   r+   )r]   r   rj   ra   rb   s        r   Úhandle_sftp_reset_passwordrk   «   sj  € ð&
Ø—;‘;˜z¨2Ó.ˆØ—{‘{ >Ó2ˆæž|ÜÐEÓFÐFà×"Ñ" <×0Ñ0ÜÐDÓEÐEä�‰ÐAÀ8ÔLä˜8×$Ñ$Ü˜u X J¨oÐ>Ó?Ð?ô �nŠnØˆLØ�J˜a ˜~Ð.ØØØñ
ˆð �>‰>˜QÓÜÐ-¨c¯j©j×.>Ñ.>Ó.@Ð-AÐBÓCÐCä�‰Ð?ÀÔJàØ0°°
Ð:MÐNØ ñ
ð 	
øô ó 
Ü�	‰	ÐDÄcÈ#Ãh×FVÑFVÐW^×WbÑWbÐcqÐsyÓWzð  }Có  GDô  	EàÜ˜“Xñ
õ 	
ûð
ús   ‚DD Ä
E)ÄAE$ÅE)Å$E))r   rU   ÚreturnÚbool)r/   rU   rl   rU   )r]   Údictrl   rn   )Ú
__future__r   r   rS   rX   Úloggerr   rV   r   r6   rc   rh   rk   © r7   r   Ú<module>rr      s;   ðÝ "ã 	Û 	Û Ý á�Ó €ôô, ôFD
ôN
õ@(
r7   