관리-도구
편집 파일: packages.cpython-39.pyc
a ������g�T����������������������@���s���d�dl�Z�d�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dl Z d�dl Z d�dlZd�dlm Z �d�dlmZmZmZmZmZmZmZmZmZmZmZmZ�d�dlmZ�ddlmZ�ddlm 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��e1ee1�d �d d��Z2e1e1d�d d�Z3e�0��e1d�dd��Z4ede#e$�Z5e5e5d�dd�Z6G�dd��de�Z7G�dd��d�Z8G�dd��de9e#�Z:G�dd��d�Z;G�dd��de9e#�Z<G�d d!��d!�Z=G�d"d#��d#�Z>G�d$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����������� ��� ���C���s��t��d|���g�}|��d�D�]�}|������}t��d|��|�d�\}}}zt|pPd�}W�n�tyl���Y�qY�n0�|rt��d||��|�||f��|� d�\}}}qnq|j dd ��d d��t��d|��g�}|D�]&\}} |d kr��q�||vr�|�|��q�t��d|��t|�S�)aL��Parse 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�-c�����������������S���s���|�d�S�)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) r���Zlocales_with_q�entry�locale�_Zqstr�qZ_region�resultsZ_qr"���r"���r#����parse_accept_languageE���s0���� r;���)�versionr���c�����������������C���s���d��dd��|��d�D���S�)z7Convert a version string to a form that can be compared�.c�����������������s���s���|�]}|��d��V��qdS�)����N)�zfill)�.0�partr"���r"���r#���� <genexpr>y���r%���z"sortify_version.<locals>.<genexpr>)�joinr,���)r<���r"���r"���r#����sortify_versionv���s����rD����r���c������������������C���s6���dD�]"}�t�j�t�j�|�d��r|���S�qt�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�existsrC���r*����warning)� candidater"���r"���r#����get_libexecdir|���s ���� rL����J)�objr���c�����������������C���sz���t�|�t�r>d|�v�r0t�d�}|d�ur0|��d|�S�|��dt���S�t�|�t�rZdd��|����D��S�t�|�t�rrdd��|�D��S�|�S�d�S�)Nz${libexecdir}/cockpit-askpassrF���z ${libexecdir}c�����������������S���s���i�|�]\}}|t�|��qS�r"�����patch_libexecdir)r@���r'����valuer"���r"���r#���� <dictcomp>����r%���z$patch_libexecdir.<locals>.<dictcomp>c�����������������S���s���g�|�]}t�|��qS�r"���rO���)r@����itemr"���r"���r#���� <listcomp>����r%���z$patch_libexecdir.<locals>.<listcomp>) � isinstance�str�shutil�which�replacerL����dict�items�list)rN���Zabs_askpassr"���r"���r#���rP�������s���� rP���c�������������������@���s>���e�Zd�ZU�eed<�eed<�dZee�ed<�dZee�ed<�dS�)�Document�data�content_typeN�content_encoding�content_security_policy) �__name__� __module__�__qualname__r����__annotations__rV���r`���r ���ra���r"���r"���r"���r#���r]�������s��� r]���c�������������������@���s���e�Zd�Zdd�dd�ZdS�)�PackagesListenerNrE���c�����������������C���s���dS�)z+Called when the packages have been reloadedNr"�����selfr"���r"���r#����packages_loaded����s����z PackagesListener.packages_loaded)rb���rc���rd���ri���r"���r"���r"���r#���rf�������s���rf���c�����������������������s"���e�Zd�Zed���fdd�Z���ZS�)�BridgeConfig�rQ���c��������������������s����t����|��t|�dd��|�_t|�ddd�|�_t|�di��|�_|�jsN|�jsNt|d��t |�dd�|�_ t |�d �|�_|�jsxt|d ��|�jp�|�jd�|�_d�S�)N�label� privilegedF)�default�matchz&must have match rules or be privileged�environr"����spawnzspawn vector must be non-emptyr���) �super�__init__r���rl���r���rm���r���ro���r���r���rp���rq����name)rh���rQ����� __class__r"���r#���rs�������s���� zBridgeConfig.__init__)rb���rc���rd���r���rs���� __classcell__r"���r"���ru���r#���rj�������s���rj���c�������������������@���s���e�Zd�Zed�dd�ZdS�)� Conditionrk���c�������������� ���C���sL���z|����\\|�_|�_W�n0�tyF�}�zt|d�|�W�Y�d�}~n d�}~0�0�d�S�)Nz'must contain exactly one key/value pair)r[���rt���rQ���r1���r���)rh���rQ����excr"���r"���r#���rs�������s����zCondition.__init__N)rb���rc���rd���r���rs���r"���r"���r"���r#���rx�������s���rx���c�����������������������s0���e�Zd�Zeoee�Zeed���fdd�Z���Z S�)�Manifest)rH���rQ���c��������������������s����t����|��||�_t|�d|�jj�|�_t|�dt�|�_t|�dd�|�_ t|�dd�|�_ t|�dt�|�_|�j d�ur�t|�di��}|���D�]@\}}|d kr�t|d ��tt|t��|�j krzt|d|��d���qzd�S�) Nrt����bridges�priorityr���zcontent-security-policy��� conditions�requiresZcockpitznon-cockpit requirement listedzrequired cockpit version (z ) not met)rr���rs���rH���r���rt���r���rj���r{���r���r|����csprx���r~����COCKPIT_VERSIONr���r[���r���rD���r���rV���)rh���rH���rQ���r���rt���r<���ru���r"���r#���rs�������s���� zManifest.__init__) rb���rc���rd���r���rD���r����r���r���rs���rw���r"���r"���ru���r#���rz�������s���rz���c�������������������@���s����e�Zd�ZU�e�d�Zee�ed<�e ed<�e ed<�eed<�eed<�dZ eee ee e f�f��ed<�dZeee e f��ed <�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�manifestrt���rH���r|���N�translations�files�r����c�����������������C���s"���||�_�|j|�_|j|�_|j|�_d�S��N)r����rt���rH���r|���)rh���r����r"���r"���r#���rs�������s����zPackage.__init__rE���c�����������������C���s���|�j�durdS�i�|�_�i�i�d�|�_|�j�d�D�]�}t|�|�j��}|dv�rJq,tj�|�}|r�|� d�}|� d�}|� ���dd�}t� d |||��||�j|��d ��|<�q,t�dd|�}t� d ||��||�j�|<�|�j��|�dd�|��q,|�jd�s�|�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�������r8���r!���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.���rY���r*���r+����re�sub� setdefault)rh����filert���Zpo_match�basenamer7���Zlower_localer"���r"���r#����ensure_scanned����s*���� zPackage.ensure_scannedc�����������������C���sl���dddddddd�}|�j�j�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�;� c�����������������s���s"���|�]\}}|��d�|��d�V��qdS�)r����r����Nr"���)r@����k�vr"���r"���r#���rB���3��r%���z6Package.get_content_security_policy.<locals>.<genexpr>z block-all-mixed-content)r����r����r,���r-���r/���rC���r[���)rh���ZpolicyrS���r'���r8���rQ���r"���r"���r#����get_content_security_policy"��s����� z#Package.get_content_security_policy)�filenamer���c�����������������C���s\���t��|�\}}d�}|d�u�r d}n|�d�r2|����}|�j|�}t�d|��t|�d�|||�S�)Nz text/plainz text/htmlz loading data from %s�rb) � mimetypesZ guess_type� startswithr����rH���r*���r+���r]����open)rh���r����r_���r`���ra���rH���r"���r"���r#���� load_file5��s���� zPackage.load_file)rH����localesr���c�������������� ���C���sp���|������|�jd�usJ��|D�]F}t�t��(�|��|�j|�|��W��d�������S�1�sV0����Y��qtt���d�S�)N�text/javascript) r����r����� contextlib�suppress�KeyErrorr����r]����io�BytesIO)rh���rH���r����r7���r"���r"���r#����load_translationC��s����8zPackage.load_translation�rH����headersr���c�����������������C���s^���|������|�jd�usJ��|�jd�us$J��||�jv�rJtt|dd��}|��||�S�|��|�j|��S�d�S�)N�Accept-Languager}���)r����r����r����r;���r���r����r����)rh���rH���r����r����r"���r"���r#���� load_pathP��s���� zPackage.load_path)rb���rc���rd���r�����compiler����r���r���re���rz���rV���r����intr����r ���r���r����rs���r����r����r]���r����r���r����r���r����r"���r"���r"���r#���r��������s��� - r����c�������������������@���s����e�Zd�ZU�ejjdd��d�Zeee e e gef�f��ed<�e ee �d�dd��Ze eeed�d d ��Ze ee�d�dd��Ze eed �dd�Zeed�dd�Zeee ef��d�dd�ZdS�)�PackagesLoaderc�����������������C���s���t�j�|���S�r����)rG���rH���rI���)�pr"���r"���r#���r$���_��r%���zPackagesLoader.<lambda>)zpath-existszpath-not-exists� CONDITIONSrE���c�����������������c���sn���zt�jd�V��W�n �ty0���t�j�d�V��Y�n0�zt�jd��d�E�d�H��W�n�tyh���dE�d�H��Y�n0�d�S�)NZ XDG_DATA_HOMEz~/.local/shareZ XDG_DATA_DIRS�:)z/usr/local/sharez /usr/share)rG���rp���r����rH���� expanduserr,���)�clsr"���r"���r#����get_xdg_data_dirsb��s����z PackagesLoader.get_xdg_data_dirs)r�����parentr���c�����������������C���s����|d�t��|j��d��t�j|j��d��g}|D�]�}zt�|����}W�nH�tyZ���Y�q.Y�n4�tjy��}�zt � d||��W�Y�d�}~n d�}~0�0�t|t�s�t � d|��q.t ||�}q.t|�S�)Nz override.jsonz.override.json�%s: %sz%%s: override file is not a dictionary)r���Z lookup_configrt���ZDOT_CONFIG_COCKPIT�json�loads� read_bytes�FileNotFoundError�JSONDecodeErrorr*���rJ���rU���rZ���r���rP���)r����r����r����Zoverride_filesZ override_file�overridery���r"���r"���r#����patch_manifestn��s �����$ zPackagesLoader.patch_manifestc�����������������c���s���|�����D�]�}t�d|��t|��d�D�]�}t�d|��zt�|����}W�n@�tjy��}�z&t� d||��W�Y�d�}~q&W�Y�d�}~n d�}~0�0�t |t�s�t� d|��q&|j}|�� ||�}zt||�V��W�q&�ty��}�zt�d||��W�Y�d�}~q&d�}~0�0�q&qd�S�)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�����errorrU���rZ���r����r����rz���r���rJ���)r����Zdatadirr����r����ry���r����r"���r"���r#����load_manifests���s$����" zPackagesLoader.load_manifests)� conditionrQ���r���c�����������������C���s ���|�j�|�}t|t�sdS�||�S��NF)r����rU���rV���)rh���r����rQ���Zcheck_fnr"���r"���r#����check_condition���s���� zPackagesLoader.check_condition)r����r���c�������������� ���C���sh���|j�D�]\}z|��|j|j�}W�n(�tyF���t�d|j|j��Y�qY�n0�|st�d|j|���dS�qdS�)Nz0 %s: ignoring unknown predicate in manifest: %sz2 hiding package %s as its %s condition is not metFT) r~���r����rt���rQ���r����r*���rJ���rH���r+���)rh���r����r����Zokayr"���r"���r#����check_conditions���s���� zPackagesLoader.check_conditionsc�������������� ���c���s����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|�fV��W��q\W�n �t y����t��d |j��Y�n0�t��d|j��qvq\t��d��d�S�)Nz)Scanning for available package manifests:z %s/manifest.jsonzdone.zSelecting packages to serve:c�����������������S���s���|�j�S�r�����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����rH���rt���r2���r[����sortedr����r����r���rJ���)rh����namesr����rt���Z candidatesrK���r"���r"���r#���� load_packages���s$���� zPackagesLoader.load_packagesN)rb���rc���rd���rG���rH���rI���r����r���r���rV���r����boolre����classmethodr���r����r���r���r����rz���r�����objectr����r����r ���r����r����r"���r"���r"���r#���r����\��s��� �$ r����c�������������������@���s����e�Zd�ZU�eed<�ee�ed<�eee f�ed<�e ed<�d ee�ee�d�dd�Zdd �d d�Zdd ��Z ee�d �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����c�����������������C���s$���||�_�|pt��|�_|�����d|�_d�S�r����)r����r����r�����loadr����)rh���r����r����r"���r"���r#���rs������s����zPackages.__init__rE���c�����������������C���sB���t�|�j����|�_t�dd��|�j���D���|�_t� dt |�j���d�S�)Nc�����������������S���s���i�|�]\}}|t�|j��qS�r"���)rZ���r����)r@���rt����packager"���r"���r#���rR������r%���z!Packages.load.<locals>.<dictcomp>zPackages loaded: %s)rZ���r����r����r����r�����dumpsr[���� manifestsr*���r+���r\���rg���r"���r"���r#���r�������s����z Packages.loadc�������������� ���C���s����t�|�j�D�]�}|�j|�}g�}t�|j�di�����|j�di������D�]<}t�t ���|� |d���W�d�����qD1�sv0����Y��qDt|d�dd�|�d�d|j �����q d�S�)NZmenuZtoolsrl���Z20r����z, Z40)r����r����� itertools�chainr�����get�valuesr����r����r����r2����printrC���rH���)rh���rt���r����Z menuitemsr6���r"���r"���r#����show���s���� �.z Packages.showc��������������������s�����fdd�}t�|���S�)Nc������������������3���s.���t���j���dd��d�D�]}�|�jjE�d�H��qd�S�)Nc�����������������S���s���|�j��S�r����r�����r����r"���r"���r#���r$������r%���zDPackages.get_bridge_configs.<locals>.yield_configs.<locals>.<lambda>)r'���)r����r����r����r����r{���r����rg���r"���r#���� yield_configs���s����z2Packages.get_bridge_configs.<locals>.yield_configs)r5���)rh���r����r"���rg���r#����get_bridge_configs���s����zPackages.get_bridge_configs�sz{}rk���c�����������������C���s ���|������|�jd�ur|�j����d�S�r����)r����r����ri���rg���r"���r"���r#����reload���s���� zPackages.reloadc�����������������C���s���|�j�r|�����d|�_�d�S�)NT)r����r����rg���r"���r"���r#����reload_hint��s����zPackages.reload_hint)r�����i18nr���c���������� ��� ���C���s����t��d��g�}|r�tt|dd��}|�j���D�]t\}}|dv�r>q,|�d|�}|j�6�|jdkrnt � |j����}n |j���}W�d�����n1�s�0����Y��|�|��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;���r���r����r[���r����r^���r`���r����� decompress�readr2���r�����encoder]���r����r����rC���) rh���r����r�����chunksr����rt���r�����translationr^���r"���r"���r#����load_manifests_js��s&���� (�� zPackages.load_manifests_jsc�����������������C���s ���t��d��tt�|�j����d�S�)NzServing /manifests.jsonzapplication/json)r*���r+���r]���r����r����r����r����rg���r"���r"���r#����load_manifests_json,��s���� zPackages.load_manifests_jsonz /(?:([^/]+)/)?((?:[^/]+/)*[^/]+)r����c�����������������C���s����t��d|��|�j�|�}|d�u�r.td|�����|���\}}|d�urT|�j|��||�S�|dkrj|�j|dd�S�|dkr�|�j|dd�S�|dkr�|�� ��S�t �d�S�) Nzpackages: serving %szInvalid HTTP path zmanifests.jsF)r����zmanifests-i18n.jsTzmanifests.json)r*���r+����PATH_REr����r1����groupsr����r����r����r����r����)rh���rH���r����ro���Zpackagenamer����r"���r"���r#���r����6��s����zPackages.load_path)NN) rb���rc���rd���r����re���r ���rf���r���rV���r����r����rs���r����r����r���rj���r����r���Z InterfaceZPropertyr����ZMethodr����r����r���r]���r����r����r����r����r����r����r"���r"���r"���r#���r�������s&��� %�r����zcockpit.Packages)Z interface)Ar����r����� functoolsr����r����r����r����Zloggingr����rG���r����rW����pathlibr����typingr���r���r���r���r���r���r ���r ���r���r���r ���r���Zcockpit._vendor.systemd_ctypesr���r}���r����_versionr���Zjsonutilr���r���r���r���r���r���r���r���r���r���r���Z getLoggerrb���r*���� lru_cacherV���r;���rD���rL���rM���rP���r]���rf���rZ���rj���rx���rz���r����r����ZObjectr����r"���r"���r"���r#����<module>���sB���84 0{s