
    Ōj-                       U d Z ddlmZ 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 ddlmZmZ ddlmZ ddlmZmZmZ dd	lmZmZmZ dd
lmZmZ ddlmZmZmZ dZ de!d<   ejD                  ejF                  z  ejH                  z  ejJ                  z  Z&de!d<    edd       G d d             Z' edd       G d d             Z(d.dZ)d/dZ*d0dZ+d1dZ,d2dZ-	 	 	 	 	 	 d3dZ.d4dZ/dZ0de!d<   dZ1de!d <    ed!e2      Z3 G d" d#e      Z4 edd       G d$ d%             Z5d5d&Z6d6d'Z7d7d(Z8d8d)Z9d9d*Z:d:d+Z;d;d,Z<d<d-Z=y)=z0Caller-held dedicated authority-root capability.    )annotationsN)	Generator)contextmanager)	dataclassreplace)Path)ClassVarFinalNewType)	BaseModel
ConfigDictValidationError)#WeeklyOperationsAuthorityCompromiseWeeklyOperationsCorruption)LAYOUT_DIGESTMARKER_NAMEROOT_INVENTORY_DIGESTz0nutricoach-weekly-operations-parent-authority-v2r
   PARENT_SCHEMA_DIRECTORY_FLAGST)frozenslotsc                  T    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<   y
)WeeklyOperationsParentBindingstrschema_versionintdeviceinodemodeownerlinksbinding_digestN__name__
__module____qualname____annotations__     /home/cube/projects/richard/traning coach/task-12-independent-verification-r9/build/hermes-full/dualcoach/profile/checkin_cli/weekly_operations_parent.pyr   r      s'    KJ
IJJr)   r   c                  d    e Zd ZU dZded<   ded<   ded<   edd       Zdd	Zedd
       Z	ddZ
y)WeeklyOperationsParentAuthorityzEPinned descriptor for the pre-existing dedicated authority directory.r   
descriptorr   bindingr   acquisition_pathc                    | j                   S N)r/   selfs    r*   observed_pathz-WeeklyOperationsParentAuthority.observed_path,   s    $$$r)   c                8   t        | j                         t        j                  | j                        }|j
                  |j                  t        j                  |j                        |j                  |j                  f}| j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                   f}t        j"                  |j                        r||k7  rt%        d      y )Nzauthority root identity drift)validate_parent_bindingr.   osfstatr-   st_devst_inostatS_IMODEst_modest_uidst_nlinkr   r   r   r    r!   S_ISDIRr   )r3   infoobservedexpecteds       r*   verifyz&WeeklyOperationsParentAuthority.verify0   s    -xx(;;T\\$,,-GVZVcVcc<<&&(:(:DLL<M<Mt||OaOacgcococucuu||DLL)X-A56UVV .Br)   c              #  4  K   t        j                  | j                  t         j                         	 d  t        j                  | j                  t         j                         y # t        j                  | j                  t         j                         w xY wwr1   )fcntlflockr-   LOCK_EXLOCK_UNr2   s    r*   lockedz&WeeklyOperationsParentAuthority.locked8   sP     DOOU]]3	8KK7EKK7s   /BA% /B%0BBc                B    t        j                  | j                         y r1   )r7   closer-   r2   s    r*   rL   z%WeeklyOperationsParentAuthority.close@   s    
!r)   N)returnr   )rM   None)rM   zGenerator[None])r$   r%   r&   __doc__r'   propertyr4   rD   r   rJ   rL   r(   r)   r*   r,   r,   $   sG    OO**% %W 8 8"r)   r,   c                    | j                   D ci c]  }|dk7  s	|t        | |       }}t        j                  |dd      j	                         S c c}w Nr"   T,:	sort_keys
separators__dataclass_fields__getattrjsondumpsencoder.   fieldvalues      r*   _binding_payloadrb   D   U    9@9U9Us9UY^brYrUGGU++9UEs::et
CJJLL t
   
AAc                4   t        j                  t        |             j                         }| j                  t
        k7  sN| j                  |k7  s?| j                  dk7  s0| j                  t        j                         k7  s| j                  dk7  rt        d      y )N     z(authority root caller binding is invalid)hashlibsha256rb   	hexdigestr   r   r"   r   r    r7   geteuidr!   r   )r.   rC   s     r*   r6   r6   I   s    ~~.w78BBDH.'2H2HH2TX_XdXdhmXmqxq~q~  CE  CM  CM  CO  rO  SZ  S`  S`  de  Se()STT Ser)   c                h   | j                         }t        j                  |j                  t              }	 |j
                  dd  D ]5  }t        j                  |t        |      }t        j                  |       |}7 	 ||fS # t        $ r&}t        j                  |       t        d      |d }~ww xY w)N   dir_fdz"authority bootstrap path is unsafe)	absoluter7   openanchorr   partsrL   OSErrorr   )pathrp   r-   	componentchilderrors         r*   _open_directoryry   O   s    }}H*:;Jc!+IGGI'7
KEHHZ J , x  c
12VW]bbcs   AB 	B1!B,,B1c           	     $   t        t        | j                  | j                  t	        j
                  | j                        | j                  | j                  d      }t        |t        j                  t        |            j                               S N )r"   )r   r   r9   r:   r;   r<   r=   r>   r?   r   rh   ri   rb   rj   )rA   provisionals     r*   _bindingr~   ]   s    /t{{DKKY]YeYefjfrfrYsuy  vA  vA  CG  CP  CP  RT  UK;w~~>N{>[/\/f/f/hiir)   c                   t        |       \  }}	 t        j                  |t        j                         	 t	        j
                  |      }t        |      }t        |       t        |||      t        j                  |t        j                         S # t        j                  |t        j                         w xY w# t        $ r t	        j                  |        w xY w)zGAcquire a pre-existing dedicated authority directory by no-follow path.)ry   rF   rG   rH   r7   r8   r~   r6   r,   rI   r   rL   )authority_pathr-   r/   rA   r.   s        r*   acquire_parent_authorityr   b   s    #2>#B J J.	388J'DtnG#G,2:wHXYKK
EMM2EKK
EMM2% 
s"   $B: 7B ,$B: &B77B: : Cc                   t        j                  |       }	 t        j                  |t        j                         	 t        t        j                  |            }t        |       t        |||      t        j                  |t        j                         S # t        j                  |t        j                         w xY w# t        $ r t        j                  |        w xY w)zEAcquire an independently owned capability from a pinned directory fd.)r7   duprF   rG   rH   r~   r8   r6   r,   rI   r   rL   )r-   r/   ownedr.   s       r*   #acquire_parent_authority_descriptorr   s   s     FF:E
E5==)	.rxx/G#G,25'CSTKKu}}-EKKu}}-% 
s"   $B? 5B 1$B? &B<<B? ? Cc                (   t        |       t        |       \  }}	 t        j                  |      }|j                  |j
                  t        j                  |j                        |j                  |j                  f}|j                  |j                  |j                  |j                  |j                  f}t        j                   |j                        r||k7  rt#        d      t%        |||      S # t&        $ r t        j(                  |        w xY w)z:Reacquire only the caller-bound dedicated authority inode.z$authority bootstrap binding mismatch)r6   ry   r7   r8   r9   r:   r;   r<   r=   r>   r?   r   r   r   r    r!   r@   r   r,   r   rL   )r   rC   r-   r/   rA   rB   wanteds          r*   reacquire_parent_authorityr      s    H%#2>#B J 	xx
#;;T\\$,,-GVZVcVcc(..(--QYQ_Q__||DLL)X-?56\]].z8EUVV% 
s   CC1 1 Dz)nutricoach-weekly-operations-authority-v2AUTHORITY_SCHEMAz1nutricoach-weekly-operations-authority-binding-v3BINDING_SCHEMAAuthorityIdc                      e Zd ZU  eddd      Zded<   ded<   ded<   d	ed
<   d	ed<   d	ed<   d	ed<   d	ed<   ded<   ded<   ded<   y)AuthorityMarkerTforbid)r   extrastrictzClassVar[ConfigDict]model_configr   authority_idr   r   registry_deviceregistry_inoderegistry_moderegistry_ownerregistry_linksregistry_digestroot_inventory_digestlayout_digestN)r$   r%   r&   r   r   r'   r(   r)   r*   r   r      sS    )34xX\)]L&]r)   r   c                      e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   y) WeeklyOperationsAuthorityBindingr   r   r   r   r   root_device
root_inode	root_mode
root_owner
root_linksmarker_devicemarker_inodemarker_modemarker_ownermarker_linksmarker_digestr   r   r   r   r   r   r   r   r"   Nr#   r(   r)   r*   r   r      s    ONOOr)   r   c                    | j                   D ci c]  }|dk7  s	|t        | |       }}t        j                  |dd      j	                         S c c}w rR   rY   r_   s      r*   _authority_binding_payloadr      rc   rd   c                   t        j                  t        |             j                         }| j                  dk(  xr | j
                  t        j                         k(  xr | j                  dk(  xr | j                  dk(  xr | j                  t        j                         k(  xr | j                  dk(  xru | j                  dk(  xrd | j                  t        j                         k(  xrA | j                  dk(  xr0 | j                  t        j                  d      j                         k(  }| j                   t"        k7  s7| j$                  |k7  s(| j&                  t(        k7  s| j*                  t,        k7  s|st/        d      y )Nrf   rg     rm   r)   z#authority caller binding is invalid)rh   ri   r   rj   r   r   r7   rk   r   r   r   r   r   r   r   r   r   r   r"   r   r   r   r   r   )r.   rC   safes      r*   validate_authority_bindingr      sB   ~~8ABLLNH%  ~'*<*<

*L  ~QXQcQcghQh  ~mt  nA  nA  EJ  nJ  ~  OV  Oc  Oc  gi  gq  gq  gs  Os  ~  x  xL  xL  PQ  xQ  ~  V]  Vk  Vk  ot  Vt  ~  y@  yO  yO  SU  S]  S]  S_  y_  ~  dk  dz  dz  ~  d  ~  DK  D[  D[  _f  _m  _m  nq  _r  _|  _|  _~  D~D/73I3IX3UY`YvYv  {P  ZP  T[  Ti  Ti  mz  Tz  BF()NOO BFr)   c                f   t        t        | |j                  |j                  t	        j
                  |j                        |j                  |j                  |j                  |j                  t	        j
                  |j                        |j                  |j                  ||j                  |j                  t	        j
                  |j                        |j                  |j                  |t        t        d      }t        |t        j                  t        |            j                               S r{   )r   r   r9   r:   r;   r<   r=   r>   r?   r   r   r   rh   ri   r   rj   )r   rootmarkerr   registryr   r}   s          r*   construct_authority_bindingr      s    2dkk4;;T\\@Z\`\g\gimivivv}}dll6>>&BFMMSYSbSbdq$,,x7G7G*H(//[c[l[ln}}b	K ;w~~>XYd>e/f/p/p/rssr)   c                t    t        j                  | j                  d      dd      dz   j                         S )Nr\   )r   TrS   rV   
)r\   r]   
model_dumpr^   )r   s    r*   _marker_bytesr      s3    JJv((f(5R\]`ddllnnr)   c                &   t        | t        |j                  |j                  t	        j
                  |j                        |j                  |j                  t        j                  d      j                         t        t        
      }t        |      S )Nr)   )
r   r   r   r   r   r   r   r   r   r   )r   r   r9   r:   r;   r<   r=   r>   r?   rh   ri   rj   r   r   r   )r   r   r   s      r*   authority_marker_bytesr      sf    !2B ll8#3#34X__(('..:M:W:W:Y3=F   r)   c                   	 t         j                  |       }t	        |j
                        }|j                  t        k(  xr t        |      dk(  xr t        d |D               xr |j                  dk(  xr |j                  t        j                         k(  xr{ |j                  dk(  xrj |j                  t!        j"                  d      j%                         k(  xr8 |j&                  t(        k(  xr# |j*                  t,        k(  xr | t/        |      k(  }|st        d      |S # t        $ r}t        d      |d }~ww xY w)Nz$authority schema marker is malformed@   c              3  $   K   | ]  }|d v 
 yw)0123456789abcdefNr(   ).0	characters     r*   	<genexpr>z*_parse_authority_marker.<locals>.<genexpr>   s     VII%77s   r   rm   r)   z!authority schema marker disagrees)r   model_validate_jsonr   r   r   r   r   r   lenanyr   r   r7   rk   r   r   rh   ri   rj   r   r   r   r   r   )datara   rx   r   valids        r*   _parse_authority_markerr      sT   \33D9 u112L 00 	R#	RVVVV	R 5(	R .3-A-ARZZ\-Q	R   A%		R +0*?*?7>>RUCVC`C`Cb*b		R
 ''+@@	R =0	R 6:]5=Q5Q 
 ()LMML  \()OPV[[\s   D$ $	D>-D99D>c                :    	 t        |       }y# t        $ r Y yw xY w)NFT)r   r   )r   _s     r*   canonical_authority_markerr      s*    #D)  & s    	c                .   	 t        j                  t        t         j                  t         j                  z  t         j
                  z  t         j                  z  |       }	 t        j                  |      }t        j                  t        | d      }g }t        j                  |d      x}r*|j                  |       t        j                  |d      x}r*dj                  |      }t        j                  |j                        xrV |j                   t        j"                         k(  xr3 |j$                  dk(  xr" t        j&                  |j                        dk(  }|r1|j(                  |j*                  f|j(                  |j*                  fk7  rt        d	      	 t        j,                  |       t/        |      t1        j2                  |      j5                         |fS # t        $ r}t        d      |d }~ww xY w# t        j,                  |       w xY w)
Nrn   z,authority schema marker is missing or unsafeF)ro   follow_symlinksi   r)   rm   r   z&authority schema marker identity drift)r7   rq   r   O_RDONLY
O_NOFOLLOW	O_CLOEXEC
O_NONBLOCKrt   r   r8   r;   readappendjoinS_ISREGr=   r>   rk   r?   r<   r9   r:   rL   r   rh   ri   rj   )	r-   r   rx   rA   namedchunkschunkr   r   s	            r*   read_authority_markerr     s   dbkkBMM&ABLL&PSUS`S`&`istxxJN wwvt,,e,MM%  wwvt,,e,xx||DLL)  IdkkRZZ\.I  Idmm_`N`  Ieieqeqrvr~r~e  DI  fIT[[1ellELL5QQ,-UVV R 	"4('..*>*H*H*JDPP  d()WX^ccd 	s,   AG   A4G= CG=  	G:)G55G:=H)r.   r   rM   bytes)r.   r   rM   rN   )ru   r   rM   ztuple[int, Path])rA   os.stat_resultrM   r   )r   r   rM   r,   )r-   r   r/   r   rM   r,   )r   r   rC   r   rM   r,   )r.   r   rM   r   )r.   r   rM   rN   )r   r   r   r   r   r   r   r   r   r   r   r   rM   r   )r   r   rM   r   )r   r   r   r   rM   r   )r   r   rM   r   )r   r   rM   bool)r-   r   rM   z+tuple[AuthorityMarker, str, os.stat_result])>rO   
__future__r   rF   rh   r\   r7   r;   collections.abcr   
contextlibr   dataclassesr   r   pathlibr   typingr	   r
   r   pydanticr   r   r   checkin_cli.weekly_operationsr   r   $checkin_cli.weekly_operations_layoutr   r   r   r   r'   r   O_DIRECTORYr   r   r   r   r,   rb   r6   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r(   r)   r*   <module>r      sj   6 "    	  % % *  + + ; ; i b bIu I++6FU % U $d#  $ $d#" " $">M
U j
"'+$$  F % EK KmS)i  $d#  $2M
Pto!(Qr)   