HEX
Server: Apache
System: Linux 185.122.168.184.host.secureserver.net 5.14.0-570.52.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Oct 15 06:39:08 EDT 2025 x86_64
User: barbeatleanalyti (1024)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //usr/lib/python3.9/site-packages/cockpit/__pycache__/packages.cpython-39.opt-1.pyc
a

�/�h�T�@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlm
Z
ddlmZmZmZmZmZmZmZmZmZmZmZmZddlmZddlmZddlm Z ddl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,e�-e.�Z/e�0�e1ee1d	�d
d��Z2e1e1d�d
d�Z3e�0�e1d�dd��Z4ede#e$�Z5e5e5d�dd�Z6Gdd�de�Z7Gdd�d�Z8Gdd�de9e#�Z:Gdd�d�Z;Gdd�de9e#�Z<Gd d!�d!�Z=Gd"d#�d#�Z>Gd$d%�d%ej?d&d'�Z@dS)(�N)�Path)�BinaryIO�Callable�ClassVar�Dict�Iterable�List�
NamedTuple�Optional�Pattern�Sequence�Tuple�TypeVar)�bus�)�config)�__version__)�	JsonError�
JsonObject�	JsonValue�get_bool�get_dict�get_int�get_objv�get_str�get_strv�json_merge_patch�typechecked)�accept_language�returnc
	Cst�d|�g}|�d�D]�}|����}t�d|�|�d�\}}}zt|pPd�}WntylYqYn0|rt�d||�|�||f�|�	d�\}}}qnq|j
dd	�d
d�t�d|�g}|D]&\}}	|d
kr�q�||vr�|�|�q�t�d|�t|�S)aLParse the Accept-Language header, if it exists.

    Returns an ordered list of languages, with fallbacks inserted, and
    truncated to the position where 'en' would have otherwise appeared, if
    applicable.

    https://tools.ietf.org/html/rfc7231#section-5.3.5
    https://datatracker.ietf.org/doc/html/rfc4647#section-3.4
    zparse_accept_language(%r)�,z
  entry %rz;q=g�?z    adding %r q=%r�-cSs|dS)Nr�)Zpairr"r"�4/usr/lib/python3.9/site-packages/cockpit/packages.py�<lambda>c�z'parse_accept_language.<locals>.<lambda>T��key�reversez  sorted list is %r�enz  results list is %r)�logger�debug�split�strip�lower�	partition�float�
ValueError�append�
rpartition�sort�tuple)
rZlocales_with_q�entry�locale�_Zqstr�qZ_region�resultsZ_qr"r"r#�parse_accept_languageEs0
r;)�versionrcCsd�dd�|�d�D��S)z7Convert a version string to a form that can be compared�.css|]}|�d�VqdS)�N)�zfill)�.0�partr"r"r#�	<genexpr>yr%z"sortify_version.<locals>.<genexpr>)�joinr,)r<r"r"r#�sortify_versionvsrD�rcCs6dD]"}tj�tj�|d��r|Sqt�d�dS)zkDetect libexecdir on current machine

    This only works for systems which have cockpit-ws installed.
    )z/usr/local/libexecz/usr/libexecz/usr/local/lib/cockpitz/usr/lib/cockpit�cockpit-askpasszCould not detect libexecdirz/nonexistent/libexecN)�os�path�existsrCr*�warning)�	candidater"r"r#�get_libexecdir|s


rL�J)�objrcCszt|t�r>d|vr0t�d�}|dur0|�d|�S|�dt��St|t�rZdd�|��D�St|t�rrdd�|D�S|SdS)Nz${libexecdir}/cockpit-askpassrFz
${libexecdir}cSsi|]\}}|t|��qSr"��patch_libexecdir)r@r'�valuer"r"r#�
<dictcomp>�r%z$patch_libexecdir.<locals>.<dictcomp>cSsg|]}t|��qSr"rO)r@�itemr"r"r#�
<listcomp>�r%z$patch_libexecdir.<locals>.<listcomp>)	�
isinstance�str�shutil�which�replacerL�dict�items�list)rNZabs_askpassr"r"r#rP�s



rPc@s>eZdZUeed<eed<dZeeed<dZeeed<dS)�Document�data�content_typeN�content_encoding�content_security_policy)	�__name__�
__module__�__qualname__r�__annotations__rVr`r
rar"r"r"r#r]�s
r]c@seZdZdd�dd�ZdS)�PackagesListenerNrEcCsdS)z+Called when the packages have been reloadedNr"��selfr"r"r#�packages_loaded�sz PackagesListener.packages_loaded)rbrcrdrir"r"r"r#rf�srfcs"eZdZed��fdd�Z�ZS)�BridgeConfig�rQcs�t��|�t|dd�|_t|ddd�|_t|di�|_|jsN|jsNt|d��t	|dd�|_
t	|d	�|_|jsxt|d
��|jp�|jd|_dS)N�label�
privilegedF)�default�matchz&must have match rules or be privileged�environr"�spawnzspawn vector must be non-emptyr)
�super�__init__rrlrrmrrorrrprq�name)rhrQ��	__class__r"r#rs�s

zBridgeConfig.__init__)rbrcrdrrs�
__classcell__r"r"rur#rj�srjc@seZdZed�dd�ZdS)�	Conditionrkc
CsLz|��\\|_|_Wn0tyF}zt|d�|�WYd}~n
d}~00dS)Nz'must contain exactly one key/value pair)r[rtrQr1r)rhrQ�excr"r"r#rs�szCondition.__init__N)rbrcrdrrsr"r"r"r#rx�srxcs0eZdZeoee�Zeed��fdd�Z�Z	S)�Manifest)rHrQcs�t��|�||_t|d|jj�|_t|dt�|_t|dd�|_	t|dd�|_
t|dt�|_|j
dur�t|di�}|��D]@\}}|d	kr�t|d
��tt|t��|j
krzt|d|�d���qzdS)
Nrt�bridges�priorityrzcontent-security-policy��
conditions�requiresZcockpitznon-cockpit requirement listedzrequired cockpit version (z	) not met)rrrsrHrrtrrjr{rr|�csprxr~�COCKPIT_VERSIONrr[rrDrrV)rhrHrQrrtr<rur"r#rs�s

zManifest.__init__)
rbrcrdrrDr�rrrsrwr"r"rur#rz�srzc@s�eZdZUe�d�Zeeed<e	ed<e
ed<eed<eed<dZ
eee
ee
e
ffed<dZeee
e
fed	<e	d
�dd�Zdd
�dd�Ze
d
�dd�Ze
ed�dd�Ze
ee
ed�dd�Ze
eed�dd�ZdS)�Packagez%(po|po\.manifest)\.([^.]+)\.js(\.gz)?�PO_JS_RE�manifestrtrHr|N�translations�files�r�cCs"||_|j|_|j|_|j|_dS�N)r�rtrHr|)rhr�r"r"r#rs�szPackage.__init__rEcCs|jdurdSi|_iid�|_|j�d�D]�}t|�|j��}|dvrJq,tj�|�}|r�|�	d�}|�	d�}|�
��dd�}t�
d	|||�||j|�d
�|<q,t�dd|�}t�
d
||�||j|<|j�|�dd�|�q,|jds�|jd|jd<dS)z�Ensure that the package has been scanned.

        This allows us to defer scanning the files of the package until we know
        that we'll actually use it.
        N)�po.js�po.manifest.js�*)r=z..z
manifest.jsonr�r8r!zAdding translation %r %r -> %rz.jsz.gz$r}zAdding content %r -> %rz.min.r=r�r�)r�r�rH�rglobrV�relative_tor�r��	fullmatch�groupr.rYr*r+�re�sub�
setdefault)rh�filertZpo_match�basenamer7Zlower_localer"r"r#�ensure_scanned�s*




zPackage.ensure_scannedcCsldddddddd�}|jj�d�D],}|��}|r"|���d�\}}}|||<q"d�dd�|��D��d	S)
Nz'self'z'none'z'self' data:)zdefault-srczconnect-srczform-actionzbase-uriz
object-srczfont-srczimg-src�;� css"|]\}}|�d|�d�VqdS)r�r�Nr")r@�k�vr"r"r#rB3r%z6Package.get_content_security_policy.<locals>.<genexpr>z block-all-mixed-content)r�r�r,r-r/rCr[)rhZpolicyrSr'r8rQr"r"r#�get_content_security_policy"s�

z#Package.get_content_security_policy)�filenamercCs\t�|�\}}d}|dur d}n|�d�r2|��}|j|}t�d|�t|�d�|||�S)Nz
text/plainz	text/htmlz  loading data from %s�rb)	�	mimetypesZ
guess_type�
startswithr�rHr*r+r]�open)rhr�r_r`rarHr"r"r#�	load_file5s

zPackage.load_file)rH�localesrc	Csb|��|D]F}t�t��(|�|j||�Wd�S1sH0Yqtt��d�S)N�text/javascript)	r��
contextlib�suppress�KeyErrorr�r�r]�io�BytesIO)rhrHr�r7r"r"r#�load_translationCs
8zPackage.load_translation�rH�headersrcCsB|��||jvr.tt|dd��}|�||�S|�|j|�SdS)N�Accept-Languager})r�r�r;rr�r�r�)rhrHr�r�r"r"r#�	load_pathPs

zPackage.load_path)rbrcrdr��compiler�rrrerzrVr�intr�r
rr�rsr�r�r]r�rr�rr�r"r"r"r#r��s
 -
r�c@s�eZdZUejjdd�d�Zeee	e
e	geffed<e
ee	d�dd��Ze
eeed�d	d
��Ze
eed�dd��Ze	eed
�dd�Zeed�dd�Zeee	efd�dd�ZdS)�PackagesLoadercCstj�|�Sr�)rGrHrI)�pr"r"r#r$_r%zPackagesLoader.<lambda>)zpath-existszpath-not-exists�
CONDITIONSrEccsnztjdVWn ty0tj�d�VYn0ztjd�d�EdHWntyhdEdHYn0dS)NZ
XDG_DATA_HOMEz~/.local/shareZ
XDG_DATA_DIRS�:)z/usr/local/sharez
/usr/share)rGrpr�rH�
expanduserr,)�clsr"r"r#�get_xdg_data_dirsbsz PackagesLoader.get_xdg_data_dirs)r��parentrcCs�|dt�|j�d��tj|j�d�g}|D]�}zt�|���}WnHtyZYq.Yn4tjy�}zt	�
d||�WYd}~n
d}~00t|t�s�t	�
d|�q.t
||�}q.t|�S)Nz
override.jsonz.override.json�%s: %sz%%s: override file is not a dictionary)rZ
lookup_configrtZDOT_CONFIG_COCKPIT�json�loads�
read_bytes�FileNotFoundError�JSONDecodeErrorr*rJrUrZrrP)r�r�r�Zoverride_filesZ
override_file�overrideryr"r"r#�patch_manifestns �$
zPackagesLoader.patch_manifestccs|��D]�}t�d|�t|��d�D]�}t�d|�zt�|���}Wn@tjy�}z&t�	d||�WYd}~q&WYd}~n
d}~00t
|t�s�t�	d|�q&|j}|�
||�}zt||�VWq&ty�}zt�d||�WYd}~q&d}~00q&qdS)Nz$Scanning for manifest files under %szcockpit/*/manifest.jsonzConsidering file %sr�z!%s: json document isn't an objectz%s %s)r�r*r+r�globr�r��	read_textr��errorrUrZr�r�rzrrJ)r�Zdatadirr�r�ryr�r"r"r#�load_manifests�s$"
zPackagesLoader.load_manifests)�	conditionrQrcCs |j|}t|t�sdS||�S�NF)r�rUrV)rhr�rQZcheck_fnr"r"r#�check_condition�s

zPackagesLoader.check_condition)r�rc	Csh|jD]\}z|�|j|j�}Wn(tyFt�d|j|j�YqYn0|st�d|j|�dSqdS)Nz0  %s: ignoring unknown predicate in manifest: %sz2  hiding package %s as its %s condition is not metFT)	r~r�rtrQr�r*rJrHr+)rhr�r�Zokayr"r"r#�check_conditions�s

zPackagesLoader.check_conditionsc
cs�t�d�t�t�}|��D]"}t�d|j�||j�|�qt�d�t�d�|�	�D]�\}}t
|dd�dd�D]f}z2|�|�r�t�d	||j�|t|�fVWq\Wn t
y�t�d
|j�Yn0t�d|j�qvq\t�d�dS)Nz)Scanning for available package manifests:z  %s/manifest.jsonzdone.zSelecting packages to serve:cSs|jSr��r|r�r"r"r#r$�r%z.PackagesLoader.load_packages.<locals>.<lambda>Tr&z  creating package %s -> %sz1  %s: ignoring package with invalid manifest filez  ignoring %s: unmet conditions)r*r+�collections�defaultdictr\r�rHrtr2r[�sortedr�r�rrJ)rh�namesr�rtZ
candidatesrKr"r"r#�
load_packages�s$





zPackagesLoader.load_packagesN)rbrcrdrGrHrIr�rrrVr�boolre�classmethodrr�rrr�rzr��objectr�r�r
r�r�r"r"r"r#r�\s
�$	r�c@s�eZdZUeed<eeed<eee	fed<e
ed<d eeeed�dd�Zdd	�d
d�Zdd
�Z
eed	�dd�Zejjddd�Zej��dd��Zej��dd��Zee
ed�dd�Zed	�dd�Ze�d�Zeeed�dd�ZdS)!�Packages�loader�listener�packages�saw_first_reload_hintN)r�r�cCs$||_|pt�|_|��d|_dSr�)r�r�r��loadr�)rhr�r�r"r"r#rs�szPackages.__init__rEcCsBt|j���|_t�dd�|j��D��|_t�	dt
|j��dS)NcSsi|]\}}|t|j��qSr")rZr�)r@rt�packager"r"r#rR�r%z!Packages.load.<locals>.<dictcomp>zPackages loaded: %s)rZr�r�r�r��dumpsr[�	manifestsr*r+r\rgr"r"r#r��sz
Packages.loadc
Cs�t|j�D]�}|j|}g}t�|j�di���|j�di����D]<}t�t	��|�
|d�Wd�qD1sv0YqDt|d�dd�|�d�d|j
���q
dS)NZmenuZtoolsrlZ20r�z, Z40)r�r��	itertools�chainr��get�valuesr�r�r�r2�printrCrH)rhrtr�Z	menuitemsr6r"r"r#�show�s
�.z
Packages.showcs�fdd�}t|��S)Nc3s.t�j��dd�d�D]}|jjEdHqdS)NcSs|jSr�r��r�r"r"r#r$�r%zDPackages.get_bridge_configs.<locals>.yield_configs.<locals>.<lambda>)r')r�r�r�r�r{r�rgr"r#�
yield_configs�sz2Packages.get_bridge_configs.<locals>.yield_configs)r5)rhr�r"rgr#�get_bridge_configs�szPackages.get_bridge_configs�sz{}rkcCs |��|jdur|j��dSr�)r�r�rirgr"r"r#�reload�s
zPackages.reloadcCs|jr|��d|_dS)NT)r�r�rgr"r"r#�reload_hintszPackages.reload_hint)r��i18nrc		Cs�t�d�g}|r�tt|dd��}|j��D]t\}}|dvr>q,|�d|�}|j�6|jdkrnt	�
|j���}n
|j��}Wd�n1s�0Y|�|�q,|�d|j
��d�tt�d	�|��d
�S)NzServing /manifests.jsr�r})ZstaticZbase1r��gzipsh
            (function (root, data) {
                if (typeof define === 'function' && define.amd) {
                    define(data);
                }

                if (typeof cockpit === 'object') {
                    cockpit.manifests = data;
                } else {
                    root.manifests = data;
                }
            }(this, s))�
r�)r*r+r;rr�r[r�r^r`r��
decompress�readr2r��encoder]r�r�rC)	rhr�r��chunksr�rtr��translationr^r"r"r#�load_manifests_jss&

(��
zPackages.load_manifests_jscCs t�d�tt�|j���d�S)NzServing /manifests.jsonzapplication/json)r*r+r]r�r�r�r�rgr"r"r#�load_manifests_json,s
zPackages.load_manifests_jsonz /(?:([^/]+)/)?((?:[^/]+/)*[^/]+)r�cCs�t�d|�|j�|�}|dur.td|����|��\}}|durT|j|�||�S|dkrj|j|dd�S|dkr�|j|dd�S|dkr�|�	�St
�dS)	Nzpackages: serving %szInvalid HTTP path zmanifests.jsF)r�zmanifests-i18n.jsTzmanifests.json)r*r+�PATH_REr�r1�groupsr�r�r�r�r�)rhrHr�roZpackagenamer�r"r"r#r�6szPackages.load_path)NN) rbrcrdr�rer
rfrrVr�r�rsr�r�rrjr�rZ	InterfaceZPropertyr�ZMethodr�r�rr]r�r�r�r�r�r�r"r"r"r#r��s&



%�r�zcockpit.Packages)Z	interface)Ar�r��	functoolsr�r�r�r�Zloggingr�rGr�rW�pathlibr�typingrrrrrrr	r
rrr
rZcockpit._vendor.systemd_ctypesrr}r�_versionrZjsonutilrrrrrrrrrrrZ	getLoggerrbr*�	lru_cacherVr;rDrLrMrPr]rfrZrjrxrzr�r�ZObjectr�r"r"r"r#�<module>sB84
0{s