3
NZD                 @   s   d dl Z d dlZd dlmZmZmZmZmZ d dlT d dl	T d dl
T d dlmZ d dlmZ yd dlZdd ZW n$ ek
r   d dlZdd ZY nX d	Zd
ZG dd deZdS )    N)utilstuios_utils
validationpassword)*)configparser)core_installc             C   s   t j| j S )N)hashlibZsha1	hexdigest)s r   +/usr/share/hplip/installer/pluginhandler.pyget_checksum#   s    r   c             C   s   t j| j S )N)shanewr   )r   r   r   r   r   )   s    z/var/lib/hp/hplip.statez,http://hplipopensource.com/hplip-web/plugin/c               @   s   e Zd ZejfddZdd Zdd Zdd Zd!d
dZ	dd Z
dd Zd"ddZefddZdd Zdd Zdd Zdd Zdd Zdd  Zd	S )#PluginHandlec             C   s@   || _ d| _d| _t| _d| _d| _| j  | j  | j	  d S )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
pluginPathr   r   r   __init__3   s    zPluginHandle.__init__c             C   s  t jj|d s"tjd|  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}||	krtj|d |	d  t j|	d d t	j }|dkrd}n:|dks|dks|dks|dkr"d| }nd| }|dkr>d}d}nd}d}g }x|D ]
}|jddjdd}x|jd|jdD ]}|j|stjd |  t j| g S |j|d!d}|j|d"d}|j|d#d}|stjd$|  t j| g S |stjd%|  t j| g S t jjt	j|}t	j|}|rFt	j|}|j|||f qW qRW t	j|}|j  t j| |S )&Nz/plugin.specz#%s/plugin.spec file doesn't exists.zplugin.specproductsdirsZppdZdrvhomedocZcupsbackendZ
cupsfilterz/etc/udev/rules.dbini  Zpower_machintoshZppcZarmv6lZarmv7lZaarch64Zaarch32zarm%dzx86_%d@   z/usr/lib64/sanez
/usr/lib64z/usr/lib/sanez/usr/libzhp-r   Z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   Z
getBitnessZ	getEndiansys_confgetshutilcopyfilechmodZgetProcessorreplacesplitZhas_sectionerrorbasenamecatappendZ
uniqueListsort)r   src_dircwdZplugin_specr!   ZBITNESSZENDIANZPPDDIRZDRVDIRZHOMEDIRZDOCDIRZCUPSBACKENDDIRZCUPSFILTERDIRZRULESDIRZBINZ	processorZARCHZ
SANELIBDIRLIBDIRcopiesZPRODUCTZMODELr   r(   r)   r*   r   r   r   Z__getPluginFilesList@   sv    

(








z!PluginHandle.__getPluginFilesListc             C   s   t j| _d| j | _d S )Nzhplip-%s-plugin.run)propZinstalled_versionr   r   )r   r   r   r   Z__setPluginVersion   s    zPluginHandle.__setPluginVersionc             C   s   t t}|jddt| _| jtkr*d| _nr|jddd| _tjddd}| j|krZt| _nBtjdd}| j|}x*|D ]"\}}}|dkrvt	j
|svt| _qvW d S )	Nplugin	installedr   versionhplipz0.0.0r"   r#   )r2   PLUGIN_STATE_FILEr5   r   r   r   r4   ZPLUGIN_VERSION_MISMATCH!_PluginHandle__getPluginFilesListr   Zcheck_libraryZPLUGIN_FILES_CORRUPTED)r   plugin_state_confhplip_versionr#   rC   r(   r)   r*   r   r   r   Z__readPluginStatus   s    



zPluginHandle.__readPluginStatusNc          %   C   s  t dd  }}}| jjdr8tj s8tjd t ddfS tj \}}zhy| jjdrltj| j|d\}}n\tj	dd}|rtj
d||| jf \}}	|rtjd	|  |||fS ntjd
 |||fS W n8 tk
r }
 ztjd|
j  |||fS d }
~
X nX tjj|s&tjd |||fS y.t|}|j| jdd}|j| jd}t}W nB ttjfk
r }
 ztjd| j|
f  t||fS d }
~
X nX |dkrt||fS W d tj| tj| X |||fS )Nr   zhttp://z Network connection not detected.r   zfile://Twgetz=%s --tries=3 --timeout=60 --output-document=%s %s --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 [%s]  Error[%s])ZERROR_NO_NETWORKr   
startswithr   Zcheck_network_connectionr.   r;   Zmake_temp_filedownload_from_networkwhichrunIOErrorstrerrorr+   r,   r-   r2   r5   r   ERROR_SUCCESSKeyErrorr   NoSectionErrorERROR_FILE_NOT_FOUNDcloseremove)r   callbackstatusrN   Z	check_sumZlocal_conf_fpZ
local_conffilenamerM   outputeZplugin_conf_pr   r   r   Z__getPluginInformation   sJ    






z#PluginHandle.__getPluginInformationc             C   s\   t t|dj }tjd|  |r<||kr<tttd|fS tj }|j	||\}}||fS )NrbzD/L file checksum=%sr   )
r   openreadr.   debugERROR_CHECKSUM_ERRORqueryStringr   ZGPG_VerificationZvalidate)r   plugin_filedigsig_fileZreq_checksumZcalc_checksumZgpg_objZ
digsig_sts	error_strr   r   r   Z__validatePlugin   s    zPluginHandle.__validatePluginc             C   sV   t jdd}tjjdr d| _n2tjjtjj|drLdtjj|d | _nd| _d S )Nr"   r#   z/etc/hp/plugin.confzfile:///etc/hp/plugin.confzplugin.confzfile://zhttp://hplip.sf.net/plugin.conf)r4   r5   r+   r,   r-   r   join)r   r#   r   r   r   Z__setPluginConfFile   s    z PluginHandle.__setPluginConfFiler   c          0   C   s  t j }|r|}d}n.| j|\}}}|}|tkrD|dttd|fS tjd| j|| j	f  t
jj| j	| j}y^t
jd t
jj| j	st
j| j	d t
jj|rt
j| t
jj|d rt
j|d  W nF ttfk
r }	 z$tjd|	j  td| j	td fS d }	~	X nX y|jdr6tj||d	\}
}ntjd
d	}|r~d|| j	|f }tj| tj|\}
}tjd|
  |
dkstj|dkrt
jjt| j}tjd|  d|| j	|f }tj| tj|\}
}W n@ tk
r  }	 z"tjd|	j  t dtt d|fS d }	~	X nX |
dks<tj|dkrXtjd t dtt d|fS |j!t"|dj#drtjd t
j| t dtt d|fS |d }|d }tjd| j||f  yL|jdrtj||d	\}
}n(d|| j	|f }tj| tj|\}
}W nD tk
rL }	 z&tjd||	jf  t$|tt$d|fS d }	~	X nX |
dkrxtjd|  t$|tt$d|fS |j!t"|dj#drtjt"|dj#  t
j| t$|tt$d|fS | j%|||\}}|||fS )Nr   r   z0Downloading %s plug-in file from '%s' to '%s'...i  z.asczFailed in OS operations:%s f   zfile://TrM   z%s --cache=off -P %s %sz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)zBDownloading %s plug-in digital signature file from '%s' to '%s'...z)Plug-in GPG file [%s] download failed: %sz&Plug-in GPG file [%s] download failed.)&r	   ZCoreInstall#_PluginHandle__getPluginInformationrV   rf   re   r.   rd   r   r   r+   r,   rj   r   umaskr-   makedirsr[   OSErrorrT   r;   rU   ZERROR_DIRECTORY_NOT_FOUNDrP   r   rQ   rR   rS   r   ZgetFileSizePLUGIN_FALLBACK_LOCATIONinforY   ZisErrorPagerb   rc   ZERROR_DIGITAL_SIGN_NOT_FOUND_PluginHandle__validatePlugin)r   r   r\   Zcorer(   rO   stsrN   rg   r`   r]   r^   rM   cmdr_   Z
digsig_urlrh   ri   r   r   r   download   s    

 







zPluginHandle.downloadc             C   s   d}t jd||f  tj }tj| j tj}|tkrPd||f }t	j
|}nd||f }t	j
|}|dkrtd}nt jd d}tjd tj| |S )	NFz"run_plugin plugin_file =%s mode=%dzsh %s --keep --nox11 -- -u %szsh %s --keep --nox11 -- -i %sr   Tz(Python gobject/dbus may be not installedz./plugin_tmp)r.   rd   r+   r0   r1   r   sys
executableGUI_MODEr   Zexecuter;   r   r[   )r   rg   moderesultrA   Zexec_strru   r]   r   r   r   
run_pluginW  s"    



zPluginHandle.run_pluginc       
      C   s@  | j |}tjd x|D ]\}}}tjj|sDtjd|  qtjj|rhtjd|  tj| tjj|}tjj|stjd|  tj	|d tjj
|stjd|  qytj|| W n: ttfk
r  } ztjd|j  wW Y d d }~X qX tjj|s"tjd|  qn&tj|tjtjB tjB tjB tjB  |rtjj|rntjd	 tj| tjd
||f  ytj|| W q ttfk
r } ztjd|j  W Y d d }~X qX qW tjd tt}|jddd tjd |jddd tjddd}	tjd|	  |jdd|	 t| _|	| _ dS )Nr   z(Source file %s does not exist. Skipping.z)Target file %s already exists. Replacing.z-Target directory %s does not exist. Creating.i  z<Target directory %s exists but is not a directory. Skipping.zFile copy failed: %sz0Target file %s does not exist. File copy failed.z"Symlink already exists. Replacing.z1Creating symlink %s (link) to file %s (target)...zUnable to create symlink: %sz$Updating hplip.state - installed = 1rE   rF   1zUpdating hplip.state - eula = 1ZeularH   rG   z0.0.0z#Updating hplip.state - version = %sT)!rJ   r+   rn   r,   r-   r.   rd   r[   dirnamero   isdirr;   r6   r7   rT   rp   rU   r8   statS_IRWXUS_IRGRPS_IXGRPS_IROTHS_IXOTHsymlinkr2   rI   setr4   r5   ZPLUGIN_INSTALLEDr   r   )
r   r@   rC   r(   r)   r*   Ztrg_dirr`   rK   rL   r   r   r   	copyFilesr  s\    


&



zPluginHandle.copyFilesc             C   s~   t jdd}| j|}t|dkr0tjd dS xH|D ]@\}}}tjd||f  |dkrdtj| |dkr6tj| q6W dS )	Nr"   r#   r   zFail to get Plugin files listFzDeleting %s,%s files.r   T)r4   r5   rJ   lenr.   rd   r+   unlink)r   r#   filesr(   r)   r*   r   r   r   	uninstall  s    


zPluginHandle.uninstallc             C   s   | j S )N)r   )r   r   r   r   getInstalledVersion  s    z PluginHandle.getInstalledVersionc             C   s   | j   tjd| j  | jS )NzPlugin status = %s)r   r.   rd   r   )r   r   r   r   	getStatus  s    zPluginHandle.getStatusc             C   s   | j S )N)r   )r   r   r   r   getFileName  s    zPluginHandle.getFileNamec             C   s8   |d }t jj|rt j| t jj|r4t j| d S )Nz.asc)r+   r,   r-   r   )r   rg   rh   r   r   r   deleteInstallationFiles  s
    
z$PluginHandle.deleteInstallationFiles)N)r   N)__name__
__module____qualname__rD   Zuser_dirr    rJ   r   r   rm   rs   r   rv   ry   r|   r   r   r   r   r   r   r   r   r   r   r   2   s   Q
3
[Br   )r+   r6   baser   r   r   r   r   Zbase.gZ
base.codesZbase.stringsZbase.sixext.movesr   Z	installerr	   r
   r   ImportErrorr   rI   rq   objectr   r   r   r   r   <module>   s    