
    =	fE                         d dl Z d dlZd dlmZmZmZmZmZ d dl d dl	 d dl
 d dlmZ d dlmZ 	 d dlZd ZdZd	Z G d
 de      Zy# e$ r
 d dlZd ZY w xY w)    N)utilstuios_utils
validationpassword)*)configparser)core_installc                 H    t        j                  |       j                         S N)hashlibsha1	hexdigestss    +/usr/share/hplip/installer/pluginhandler.pyget_checksumr   #   s    ||A((**    c                 H    t        j                  |       j                         S r   )shanewr   r   s    r   r   r   )   s    wwqz##%%r   z/var/lib/hp/hplip.statez.https://developers.hp.com/sites/default/files/c                       e Zd Zej                  fdZd Zd Zd ZddZ	d Z
d Zdd	Zefd
Zd Zd Zd Zd Zd Zd Zy)PluginHandlec                     || _         d| _        d| _        t        | _        d| _        d| _        | j                          | j                          | j                          y )N )
_PluginHandle__plugin_path_PluginHandle__required_version_PluginHandle__plugin_namePLUGIN_NOT_INSTALLED_PluginHandle__plugin_state _PluginHandle__installed_version_PluginHandle__plugin_conf_file _PluginHandle__setPluginConfFile_PluginHandle__setPluginVersion_PluginHandle__readPluginStatus)self
pluginPaths     r   __init__zPluginHandle.__init__3   sV    '"$2#% "$  "!!r   c                 f   t         j                  j                  |dz         st        j	                  d|z         g S t        j
                         }t        j                  |       t        d      }|j                  d      }t        j                         }t        j                         }t        j                  dd      }t        j                  dd      }t        j                  dd      }	t        j                  dd	      }
t        j                  dd
      }t        j                  dd      }d}t        j                  dd      }||	k7  r5t        j                  |dz   |	dz          t        j                   |	dz   d       t        j"                         }|dk(  rd}n|dk(  s|dk(  s
|dk(  s|dk(  rd|z  }nd|z  }|dk(  rd}d}nd}d}g }|D ]  }|j%                  dd      j%                  dd      }|j                  d|      j'                  d      D ]\  }|j)                  |      s3t        j+                  d |z         t        j                  |       g c c S |j                  |d!d      }|j                  |d"d      }|j                  |d#d      }|s3t        j+                  d$|z         t        j                  |       g c c S |s3t        j+                  d%|z         t        j                  |       g c c S t         j                  j-                  t        j.                  |            }t        j.                  |      }|rt        j.                  |      }|j1                  |||f       _  t        j2                  |      }|j5                          t        j                  |       |S )&Nz/plugin.specz#%s/plugin.spec file doesn't exists.zplugin.specproductsdirsppddrvhomedoccupsbackend
cupsfilterz/etc/udev/rules.dbini  power_machintoshppcarmv6larmv7laarch64aarch32zarm%dzx86_%d@   z/usr/lib64/sanez
/usr/lib64z/usr/lib/sanez/usr/libzhp-r   hp_,zMissing section [%s]srctrglinkz$Missing 'src=' value in section [%s]z$Missing 'trg=' value in section [%s])ospathexistslogwarngetcwdchdir
ConfigBasekeysr   
getBitness	getEndiansys_confgetshutilcopyfilechmodgetProcessorreplacesplithas_sectionerrorbasenamecatappend
uniqueListsort)r&   src_dircwdplugin_specr*   BITNESSENDIANPPDDIRDRVDIRHOMEDIRDOCDIRCUPSBACKENDDIRCUPSFILTERDIRRULESDIRBIN	processorARCH
SANELIBDIRLIBDIRcopiesPRODUCTMODELr   r<   r=   r>   s                             r   __getPluginFilesListz!PluginHandle.__getPluginFilesList@   s
   ww~~gn45HH:7BCIiik
 /##J/""$"fe,fe,,,vv.fe,!fm< V\:&ll65) gOOGN2GN4JKHHW^+E2&&(	**D8#yH'<	Y@VZcgpZpW$Dg%Db=*J!F(JF 	0GOOE2.66ubAE __Z9??D 0"..q1II4q89HHSMI!ooa3!ooa3"q&"5IIDqHIHHSMIIIDqHIHHSMIgg&&uyy~6iin 99T?DsC./70	0> !!&)
r   c                 V    t         j                  | _        d| j                  z  | _        y )Nzhplip-%s-plugin.run)propinstalled_versionr   r   r&   s    r   __setPluginVersionzPluginHandle.__setPluginVersion   s#    "&"8"82T5L5LLr   c                    t        t              }|j                  ddt              | _        | j                  t        k(  rd| _        y |j                  ddd      | _        t        j                  ddd      }| j
                  |k7  rt        | _        y t        j                  dd      }| j                  |      }|D ]4  \  }}}|j                  d	      r|dk7  st        j                  |      r56 y )
Nplugin	installedr   versionhplip0.0.0r+   r.   z.rules)rF   PLUGIN_STATE_FILErK   r   r    r!   rJ   PLUGIN_VERSION_MISMATCH!_PluginHandle__getPluginFilesListfindr   check_library)r&   plugin_state_confhplip_versionr.   rj   r<   r=   r>   s           r   __readPluginStatuszPluginHandle.__readPluginStatus   s    &(9:/33HkK_`"66')D$'8'<'<XiQS'TD$$LL)WEM''=8&=#||FF322D:&, !NCdxx) rz$2248 !r   Nc                 X   t         dd}}}| j                  j                  d      r2t        j                         st
        j                  d       t         ddfS t        j                         \  }}	 	 | j                  j                  d      r%t        j                  | j                  |d      \  }}nt        j                  dd      }|rtt        j                  |d|d	| j                  d
      \  }}	|rt
        j                  d|z         |||ft        j                  |       t        j                  |       S t
        j                  d       |||ft        j                  |       t        j                  |       S t        j                   j#                  |      sDt
        j                  d       |||ft        j                  |       t        j                  |       S 	 t%        |      }|j'                  | j(                  dd      }|j'                  | j(                  d      }t*        }|dk(  r3t2        ||ft        j                  |       t        j                  |       S 	 t        j                  |       t        j                  |       |||fS # t        $ r[}
t
        j                  d|
j                  z         |||fcY d }
~
t        j                  |       t        j                  |       S d }
~
ww xY w# t,        t.        j0                  f$ rc}
t
        j                  d| j(                  d|
d       t2        ||fcY d }
~
t        j                  |       t        j                  |       S d }
~
ww xY w# t        j                  |       t        j                  |       w xY w)Nr   zhttp://z Network connection not detected.r   file://Twgetz* --tries=3 --timeout=60 --output-document= z --cache=offz+Plugin download failed with error code = %dz3Please install wget package to download the plugin.zI/O Error: %szplugin.conf not found.urlchecksumz,Error reading plugin.conf: Missing section [z	]  Error[])ERROR_NO_NETWORKr"   
startswithr   check_network_connectionrB   rS   make_temp_filedownload_from_networkwhichrunr?   closeremoveIOErrorstrerrorr@   rA   rF   rK   r   ERROR_SUCCESSKeyErrorr	   NoSectionErrorERROR_FILE_NOT_FOUND)r&   callbackstatusr   	check_sumlocal_conf_fp
local_conffilenamer   outputeplugin_conf_ps               r   __getPluginInformationz#PluginHandle.__getPluginInformation   s   !12bY""--i8113		<='Q..$)$8$8$:!z$	".**55i@','B'B4CZCZ\fhl'm$FH ;;vt4D).uy  |F  HL  H_  H_  4`  *a!II&SU[&[\#)3	#92 HH]#IIj!1 		"WX%sI5, HH]#IIj!% 77>>*-		23sI- HH]#IIj!< *: 6#''(?(?rJ*..t/F/F
S	&
 by+S); HH]#IIj!  HH]#IIj!sI%%1  .		/AJJ67sI--& HH]#IIj!-. l99: <		Z^ZqZqrstu+S);; HH]#IIj!< HH]#IIj!sn   1B!J =J 8M= %A
K> /M= 	K; &K6K;M= 6K;;M= >M:.M5M:M= 5M::M= =,N)c                    t        t        |d      j                               }t        j	                  d|z         |r||k7  rt
        t        t
        d|      fS t        j                         }|j                  ||      \  }}||fS )NrbzD/L file checksum=%sr   )
r   openreadrB   debugERROR_CHECKSUM_ERRORqueryStringr   GPG_Verificationvalidate)r&   plugin_filedigsig_filereq_checksumcalc_checksumgpg_obj
digsig_sts	error_strs           r   __validatePluginzPluginHandle.__validatePlugin   s     %T+t%<%A%A%CD		(=89LM9'5I1k)ZZZ --/ ' 0 0k J
I9$$r   c                 X   t         j                  dd      }t        j                  j	                  d      rd| _        y t        j                  j	                  t        j                  j                  |d            r)dt        j                  j                  |d      z   | _        y d| _        y )Nr+   r.   z/etc/hp/plugin.confzfile:///etc/hp/plugin.confzplugin.confr   zhttp://hplip.sf.net/plugin.conf)rJ   rK   r?   r@   rA   r"   join)r&   r.   s     r   __setPluginConfFilez PluginHandle.__setPluginConfFile   sq    ||FF+77>>/0&BD#WW^^BGGLL}=>&/"'',,t]2S&SD# 'HD#r   c           	         t        j                         }|r|}d}n4| j                  |      \  }}}|}|t        k7  r|dt	        t
        d|      fS t        j                  d| j                  d|d| j                  d       t        j                  j                  | j                  | j                        }	 t        j                  d       t        j                  j                  | j                        s t        j                   | j                  d       t        j                  j                  |      rt        j"                  |       t        j                  j                  |dz         rt        j"                  |dz          	 |j/                  d      rt1        j2                  ||d      \  }
}nt1        j4                  dd      }|rY|d| j                  d|}t        j                  |       t1        j6                  |      \  }
}t        j                  d|
z         
dk7  st9        j:                  |      dk  rt        j                  j                  t<        | j                        }t        j?                  d|z         |d| j                  d|}t        j                  |       t1        j6                  |      \  }
}|
dk7  st9        j:                  |      dk  r-t        j)                  d       t@        dt	        t@        d|      fS |jC                  tE        |d      jG                  d            rBt        j                  d       t        j"                  |       t@        dt	        t@        d|      fS |dz   }|dz   }t        j                  d| j                  d|d|d       	 |j/                  d      rt1        j2                  ||d      \  }
}nAd| j                  d|}t        j                  |       t1        j6                  |      \  }
}|
dk7  r0t        j)                  d|z         tH        |t	        tH        d|      fS |jC                  tE        |d      jG                  d            rZt        j                  tE        |d      jG                                t        j"                  |       tH        |t	        tH        d|      fS | jK                  |||      \  }}|||fS # t$        t&        f$ rK}	t        j)                  d	|	j*                  z         t,        d| j                  t	        d
      z   fcY d }	~	S d }	~	ww xY w# t&        $ rD}	t        j)                  d|	j*                  z         t@        dt	        t@        d|      fcY d }	~	S d }	~	ww xY w# t&        $ rG}	t        j)                  d|d|	j*                         tH        |t	        tH        d|      fcY d }	~	S d }	~	ww xY w)Nr   r   zDownloading z plug-in file from 'z' to 'z'...  .asczFailed in OS operations:%s f   r   Tr   z --cache=off -P r   zwget returned: %dzLPlugin is not accessible. Trying to download it from fallback location: [%s]zPlug-in download failed: %szPlug-in download failed.ri   z!open(plugin_file, 'r').read(1024)z& plug-in digital signature file from 'zPlug-in GPG file [z] download failed: z&Plug-in GPG file [%s] download failed.)&r
   CoreInstall#_PluginHandle__getPluginInformationr   r   r   rB   r   r   r   r?   r@   r   r   umaskrA   makedirsr   OSErrorr   rS   r   ERROR_DIRECTORY_NOT_FOUNDr   r   r   r   r   r   getFileSizePLUGIN_FALLBACK_LOCATIONinfor   isErrorPager   r   ERROR_DIGITAL_SIGN_NOT_FOUND_PluginHandle__validatePlugin)r&   r'   r   corer<   r   stsr   r   r   r   r   r   cmdr   
digsig_urlr   r   s                     r   downloadzPluginHandle.download   s   '')CH!%!<!<X!FChCm#B,@!S III		H_H_adfjfxfxyzggll4#5#5t7I7IJ	XHHQK77>>$"4"45D..6ww~~k*		+&ww~~k&01		+f,-	_~~i(#(#>#>sKQU#V {{6407;D<N<NsSCIIcN%*YYs^NFFII1F:; Q;("6"6{"Cq"H'',,'?ASASTCHHknqqr7;D<N<NsSCIIcN%*YYs^NFF A:--k:a?II02'[9MqR]-^^^Dc277=>II9:IIk"'[9MqR]-^^^ 6\
!F*		Z^ZqZqs}  @K  L  	M		x$$Y/#(#>#>z;X\#] 378J8J:V		#!&3
 A:II>*MN/kJfhikv>wwwDc277=>IId;,1134IIk"/kJfhikv>www..{KRYK**A ! 	XII3AJJ>?,b$2D2D{SVGW2WWW	X0  	_II3ajj@A'[9MqR]-^^^	_4  	xIIZPQPZPZ[\/kJfhikv>www	xs^   8CS2 EU 1A-V 2UA UUU	V9VVV	W/(<W*$W/*W/c                    d}t         j                  d||fz         t        j                         }t        j                  | j
                         t        j                  }|t        k(  rd|d|}t        j                  |      }nd|d|}t        j                  |      }|dk(  rd}nt         j                  d       d}t        j                  d	       t        j                  |       |S )
NFz"run_plugin plugin_file =%s mode=%dzsh z --keep --nox11 -- -u z --keep --nox11 -- -i r   Tz(Python gobject/dbus may be not installedz./plugin_tmp)rB   r   r?   rD   rE   r   sys
executableGUI_MODEr   executerS   r   r   )r&   r   moderesultrZ   exec_strr   r   s           r   
run_pluginzPluginHandle.run_pluginZ  s    		6T7JJKiik
##$>>85@(KC%%c*F  6A(KC%%c*FQ;FII@AF 	^$
r   c                    | j                  |      }t        j                  d       |D ]h  \  }}}t        j                  j	                  |      st
        j                  d|z         @t        j                  j	                  |      r-t
        j                  d|z         t        j                  |       t        j                  j                  |      }t        j                  j	                  |      s.t
        j                  d|z         t        j                  |d       t        j                  j                  |      st
        j                  d|z         1	 t        j                  ||       t        j                  j	                  |      st
        j                  d|z         t        j                  |t        j                   t        j"                  z  t        j$                  z  t        j&                  z  t        j(                  z         |st        j                  j	                  |      r*t
        j                  d       t        j                  |       t
        j                  d	|d
|d       	 t        j*                  ||       k t
        j                  d       t3        t4              }|j7                  ddd       t
        j                  d       |j7                  ddd       t8        j;                  ddd      }	t
        j                  d|	z         |j7                  dd|	       t<        | _        |	| _         y# t,        t.        f$ r-}t
        j                  d|j0                  z         Y d }~Wd }~ww xY w# t.        t,        f$ r-}t
        j                  d|j0                  z         Y d }~d }~ww xY w)Nr   z(Source file %s does not exist. Skipping.z)Target file %s already exists. Replacing.z-Target directory %s does not exist. Creating.r   z<Target directory %s exists but is not a directory. Skipping.z0Target file %s does not exist. File copy failed.z"Symlink already exists. Replacing.zCreating symlink z (link) to file z (target)...zUnable to create symlink: %szFile copy failed: %sz$Updating hplip.state - installed = 1rt   ru   1zUpdating hplip.state - eula = 1eularw   rv   rx   z#Updating hplip.state - version = %sT)!r{   r?   r   r@   rA   rB   r   r   dirnamer   isdirrS   rL   rM   rN   statS_IRWXUS_IRGRPS_IXGRPS_IROTHS_IXOTHsymlinkr   r   r   rF   ry   setrJ   rK   PLUGIN_INSTALLEDr    r!   )
r&   rY   rj   r<   r=   r>   trg_dirr   r~   r   s
             r   	copyFileszPluginHandle.copyFilesu  s   **73
$ ,	NCd77>>#&		DsJKww~~c"		EKL		#ggooc*G77>>'*		IGSTGU+77==)		X[bbcS) ww~~c*IIPSVVWHHS$,,"="Lt||"[^b^j^j"jkww~~d+		"FG		$IITXZ]^_

3-S,	\ 			89&(9:hS9		34h4 WiA		7EFhy-@.#0 ! $W- 		"@1::"MN) W% 		01::=>s0   N<M		N"N  NO"N??Oc                 R   t         j                  dd      }| j                  |      }t        |      dk(  rt        j                  d       y|D ]W  \  }}}t        j                  d|d|d       |d	k7  rt        j                  |       |d	k7  sCt        j                  |       Y y
)Nr+   r.   r   zFail to get Plugin files listFz	Deleting r;   z files.r   T)rJ   rK   r{   lenrB   r   r?   unlink)r&   r.   filesr<   r=   r>   s         r   	uninstallzPluginHandle.uninstall  s    ||FF+))$/u:?II56# 	 NCdIIs489by		#rz		$	  r   c                     | j                   S r   )r!   rq   s    r   getInstalledVersionz PluginHandle.getInstalledVersion  s    '''r   c                 ~    | j                          t        j                  d| j                  z         | j                  S )NzPlugin status = %s)r%   rB   r   r    rq   s    r   	getStatuszPluginHandle.getStatus  s2    !		&t':'::;"""r   c                     | j                   S r   )r   rq   s    r   getFileNamezPluginHandle.getFileName  s    !!!r   c                     |dz   }t         j                  j                  |      rt        j                  |       t         j                  j                  |      rt        j                  |       y y )Nr   )r?   r@   rA   r   )r&   r   r   s      r   deleteInstallationFilesz$PluginHandle.deleteInstallationFiles  sI    !F*77>>+&IIk"77>>+&IIk" 'r   r   )r   N)__name__
__module____qualname__ro   user_dirr(   r{   r$   r%   r   r   r#   r   r   r   r   r   r   r   r   r    r   r   r   r   2   sa    $(MM 
"NbM
!.0&f%
H X+v ,4 6?D$(#"#r   r   )r?   rL   baser   r   r   r   r   base.g
base.codesbase.stringsbase.sixext.movesr	   	installerr
   r   r   ImportErrorr   ry   r   objectr   r   r   r   <module>r      sd   , 
  ; ;    * "
&+ . K k#6 k#  &&&s   A
 
AA