Hcf( ddlZddlZddlZddlmZddlmZmZmZddlm Z m Z m Z m Z m Z mZddlmZe j"Zej&ej(eZGddZGdd ZGd d eZGd d Zy)N)datetime)AnyDictOptional)defaults event_logger exceptionssecret_managersystemutil)PublicMachineTokenDataceZdZejdfdededefdZedefdZ edefdZ ed Z d efd Z de efd Zd Zy)UAFileTname directoryprivatec||_||_||_tjj |j|j|_yN) _directory _file_name _is_privateospathjoin_path)selfrrrs 6/usr/lib/python3/dist-packages/uaclient/files/files.py__init__zUAFile.__init__s8 $"WW\\$//4??C returnc|jSr)rrs rrz UAFile.path!s zzrc|jSr)rr"s r is_privatezUAFile.is_private%srcTtjj|jSr)rrexistsr"s r is_presentzUAFile.is_present)sww~~dii((rcontentc|jrtjntj} tj j |jtjk(r"t j|jdnt j|jtj|j ||y#t$rY-wxYw)Ni)mode) r$rROOT_READABLE_MODEWORLD_READABLE_MODErrbasenamerPRIVATE_SUBDIRmakedirsOSErrorr write_file)rr( file_modes rwritez UAFile.write-s  ' '--   ww0H4K4KK DOO%8 DOO, $))Wi8   sA;C CCcd} tj|j}|S#t$r$tj d|jY|SwxYw)Nz(Tried to load %s but file does not exist)r load_filerFileNotFoundErrorLOGdebugrr(s rreadz UAFile.read>sS M&&tyy1G! M II@$)) L Ms%)AAcBtj|jyr)r ensure_file_absentrr"s rdeletez UAFile.deleteFs!!$)),rN)__name__ __module__ __qualname__rDEFAULT_DATA_DIRstrboolrpropertyrr$r'r3rr:r=rrrrs"22 D D D Dc D  ))9S9"hsm-rrc`eZdZdefdZdeeeffdZde eeeffdZ dZ e dZ y ) ProJSONFilepro_filec||_yrrH)rrHs rrzProJSONFile.__init__Ks ! rr(c|jjtj|tj y)Ncls)r()rHr3jsondumpsr DatetimeAwareJSONEncoderr9s rr3zProJSONFile.writeQs- JJwD,I,IJ  rr c,|jj}|r& tj|tj Sy#tj $r<}tj|jjdt|zd}~wwxYw)NrL )sourceout) rHr:rNloadsr DatetimeAwareJSONDecoderJSONDecodeErrorr InvalidJsonrrB)rr(es rr:zProJSONFile.readVsz--$$&  zz't/L/LMM  ''  ,,==--4#a&= s$AB7BBc6|jjSr)rHr=r"s rr=zProJSONFile.deletecs}}##%%rc.|jjSr)rHr'r"s rr'zProJSONFile.is_presentfs}}'''rN)r>r?r@rrrrBrr3rr:r=rDr'rErrrGrGJsU!!  T#s(^ htCH~. &((rrGc$eZdZdeffd ZxZS) UserCacheFilercNt||tjdy)NF)rr)superrr get_user_cache_dir)rr __class__s rrzUserCacheFile.__init__ls%  F557  r)r>r?r@rBr __classcell__)ras@rr]r]ks S  rr]cpeZdZejdfdedeefdZdeee ffdZ dZ dee fd Z ed Zed Zd Zedee fd ZedZedefdZedeefdZedZedeefdZeddZeddZeddZedZedZy)MachineTokenFileNrmachine_token_overlay_pathc "tj}tt|tj j |tj|_tt||d|_ ||_ d|_ d|_ d|_ y)NrJF)rMACHINE_TOKEN_FILErGrrrrr. private_file public_filere_machine_token _entitlements_contract_expiry_datetime)rrre file_names rrzMachineTokenFile.__init__ss| // '277<< 83J3JK  'Iy%8 +E'"!)-&rprivate_contentc4tjrq|jj|t j |j d}|jj|d|_d|_ d|_ ytj)z8Update the machine_token file for both pub/private filesF) keep_noneN) r we_are_currently_rootrhr3r from_dictto_dictrirjrkrlr NonRootUserError)rrnpublic_contents rr3zMachineTokenFile.writes  % % '    # #O 44==gg&     " "> 2"&D !%D -1D *--/ /rctjrJ|jj|jjd|_d|_d|_ytj)z!Delete both pub and private filesN) r rqrir=rhrjrkrlr rtr"s rr=zMachineTokenFile.deletesY  % % '    # # %    $ $ &"&D !%D -1D *--/ /rr cntjr |j}n |j}|j }|rut j j|jdd|jdgD]1}t j j|jdd3|S)N machineTokenresourceTokenstoken) r rqrhrir:r secrets add_secretget)r file_handlerr(r{s rr:zMachineTokenFile.reads  % % ',,L++L##%   " " - -gkk.".M N %5r: J&&11%))GR2HI Jrctjr.|jjxr|jjS|jjSr)r rqrir'rhr"s rr'zMachineTokenFile.is_presentsC  % % '##..O43D3D3O3O O##.. .rc|jsY|j}|r@|jr4|j|j}|rt j ||||_|jS)zAReturn the machine-token if cached in the machine token response.) base_dict overlay_dict)rjr:reparse_machine_token_overlayr depth_first_merge_overlay_dict)rr(machine_token_overlays r machine_tokenzMachineTokenFile.machine_tokensl""iikG4::(,(H(H33)%)77")%:#*D """rcvtj|}tj|tj S)NrL)r r5rNrUr rV)rremachine_token_overlay_contents rrz,MachineTokenFile.parse_machine_token_overlays5(.(8(8 &) %zz )--  rcRt|jr|jddSy)NmachineTokenInfo accountInforCrr"s raccountzMachineTokenFile.accounts* "" #%%&89-H Hrc|jr |jS|jsiS|j|j|_|jS)z9Return configured entitlements keyed by entitlement named)rkrget_entitlements_from_tokenr"s r entitlementszMachineTokenFile.entitlementssQ   %% %!!I!==    !!!rrcZddlm}|siSi}|jdijd}|siStd|jdgD}td|jdgD}|j D]"\}}d |i}||vr|||d <|||||<$|S) zReturn a dictionary of entitlements keyed by entitlement name. Return an empty dict if no entitlements are present. r)apply_contract_overridesr contractInfoc3`K|]&}|jd|jdf(yw)typer{Nr~.0rYs r z?MachineTokenFile.get_entitlements_from_token..s- UU6]AEE'N + s,.rzc3BK|]}|jd|fyw)rNrrs rrz?MachineTokenFile.get_entitlements_from_token..s% UU6]A  sresourceEntitlements entitlement resourceToken)uaclient.contractrr~dictitems) rrrrtokens_by_name ent_by_nameentitlement_name ent_valueentitlement_cfgs rrz,MachineTokenFile.get_entitlements_from_tokens ?I $(();R@DD  I "&&'7<   !%%& = ' i,i8O>13A$40 %_ 5-^R(]D)  * ---rc,t|jS)z^R(T  rcT|jr|jjdgSy)Nrzrr"s rresource_tokensz MachineTokenFile.resource_tokensFs(   %%))*:B? ?r)r z Optional[str])r z Optional[int]) r>r?r@rrArBrrrrr3r=rr:rDr'rrrr staticmethodrrrrintrrrrrrrErrrdrdrs"2248..%-SM.&0T#s(^0$ 0 htn // ##" $  " "!4!!F .(8*< . .(( #   rrd)rNloggingrrtypingrrruaclientrrr r r r uaclient.contract_data_typesr get_event_loggerevent getLoggerreplace_top_level_logger_namer>r7rrGr]rdrErrrs  &&@% %%'g:::8DE2-2-j((B F YYr