
    -_g                     d    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m	Z	m
Z
  G d dee	      Zy)    N)partial)PluginRedHatPlugin	PluginOptc                   f    e Zd ZdZdZdZ edded       edd	d
      gZdZ	dZ
d Zd Zd Zd Zy)Jarsz1Collect information about available Java archivesjars)javaappend-locations z,colon-delimited list of additional JAR paths)defaultval_typedescall-known-locationsFzscan all known paths)r   r   )z/usr/share/javaz/usr/lib/java)z/optz
/usr/localz/var/libc                    dg i}g }t        t        j                        }| j                  d      r|t        t        j                        z  }| j                  d      }|r||j                  d      z  }|D ]\  }t        j                  |      D ]B  \  }}}|D ]7  }	| j                  ||	      }
| j                  |
      s'|j                  |
       9 D ^ |D ]C  }| j                  |      }| j                  |      }|s|s*|||d}|d   j                  |       E t        j                  |dd      }| j                  |d	d
       y )Nr	   r   r   :)pathsha1maven_id   ),: )indent
separatorsz	jars.jsonT)plug_dir)listr   jar_locations
get_optionextra_jar_locationssplitoswalk	path_joinis_jarappendget_maven_id
get_jar_idjsondumpsadd_string_as_file)selfresults	jar_paths	locationsuser_locationslocationdirpath_	filenamesfilenamer   jar_pathr   jar_idrecordresults_strs                   9/usr/lib/python3/dist-packages/sos/report/plugins/jars.pysetupz
Jars.setup1   sU   2,	++,	??01d6677I );<--c22I " 	/H)+): /%I ) /H>>'8<D{{4(!((.//	/ " 	/H((2H__X.F6"*"(&. &&v.	/ jj{K[4H    c                 x   t         j                  j                  |      rRt        j                  |      r=	 t        j
                  |      5 }d|j                         v r
	 ddd       y	 ddd       yy# 1 sw Y   yxY w# t        t        j                  f$ r!}| j                  d| d|        Y d}~yd}~ww xY w)zCheck whether given file is a JAR file.

        JARs are ZIP files which usually include a manifest
        at the canonical location 'META-INF/MANIFEST.MF'.
        zMETA-INF/MANIFEST.MFNTzCould not determine if z is a JAR: F)
r!   r   isfilezipfile
is_zipfileZipFilenamelistIOError
BadZipfile	_log_info)r+   r   fileerrs       r9   r$   zJars.is_jarT   s     77>>$G$6$6t$<__T* $d-@#$ $@$ $ 	 W//0 -dV;seD  	s;   A? A3A? )A? 3A<8A? <A? ?B9B44B9c                 2   i }	 t        j                  |      5 }t        j                  d      }|j	                         D cg c]  }|j                  |      s| }}t        |      dk7  r
	 ddd       y|j                  |d         5 }|j                         D ]|  }|j                         }|j                  d      r%	 |j                  d      \  }	}
|	j                  d      j                         }	|
j                  d      j                         }
|
||	<   ~ 	 ddd       ddd       |S c c}w # t        $ r Y  ddd       ddd       yw xY w# 1 sw Y   8xY w# 1 sw Y   |S xY w# t        $ r"}| j                  d| d	|        Y d}~|S d}~ww xY w)
zExtract Maven coordinates from a given JAR file, if possible.

        JARs build by Maven (most popular Java build system) contain
        'pom.properties' file. We can extract Maven coordinates
         from there.
        z*META-INF/maven/[^/]+/[^/]+/pom.properties$   Nr      #   =utf8z)Could not extract Maven coordinates from r   )r>   r@   recompilerA   matchlenopen	readlinesstrip
startswithr    decode
ValueErrorrB   rD   )r+   r5   propsrE   rgxxresultprops_flinekeyvaluerF   s               r9   r&   zJars.get_maven_ide   s    	* ,djj!MN%)]]_E		!!EEv;!#	, ,
 YYvay) 
,W ' 1 1 3 	,#zz|#t4,/3zz$/?e&)jj&8&>&>&@(-V(<(B(B(D-2c
	,
,,( % F $. ,'+
,, ,,
, 
,,( 	  	NN;H:RuM  		s   E+ (ED-D-E-E+ 6E
5EAD2EE#E+ -E2	E	;E=EE+ E	EE	EE(#E+ (E+ +	F4FFc                 b   d}	 t        |d      5 }t        j                         }t        t	        |j
                  d      d      D ]  }|j                  |        	 ddd       j                         }|S # 1 sw Y   xY w# t        $ r"}| j                  d| d|        Y d}~|S d}~ww xY w)	zHCompute JAR id.

        Returns sha1 hash of a given JAR file.
        r   rb)modei   r;   NzCould not compute JAR id for r   )
rP   hashlibr   iterr   readupdate	hexdigestrB   rD   )r+   r5   r6   rE   digestbufrF   s          r9   r'   zJars.get_jar_id   s    
 	NhT* 'd 		4 8#> 'CMM#&'' %%'F ' '
  	NNN:8*BseLMM	Ns/   B AA7B 7B <B 	B.B))B.N)__name__
__module____qualname__
short_descplugin_nameprofilesr   stroption_listr   r   r:   r$   r&   r'    r;   r9   r   r      s`    DJKH$b3E	G'-	/KM!IF">r;   r   )ra   r(   r!   rL   r>   	functoolsr   sos.report.pluginsr   r   r   r   rp   r;   r9   <module>rs      s/      	 	   > >~6< ~r;   