+
    èc«jÌ  ã                  óì   € ^ RI Ht ^ RIHt ^ RIHtHtHt ^ RIH	t	 ^ RI
HtHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt ]	! RR7      t0 RmtR R ltR R ltR R ltR R ltR R ltR R ltR# )é    )Úannotations)Ú	Annotated)ÚDependsÚHTTPExceptionÚstatus)ÚOAuth2PasswordBearer)ÚJWTErrorÚjwt)ÚSession)Úsettings)Úget_db)ÚRole)ÚUserz/api/auth/login)ÚtokenUrlc               ó$   € V ^8„  d   QhRRRRRR/# )é   Úuserr   ÚfunctionalityÚstrÚreturnÚbool© )Úformats   "Ú*/var/www/html/proc/backend/app/api/deps.pyÚ__annotate__r      s!   € ÷ 6ñ 6 4ð 6¸ð 6Àñ 6ó    c                óŽ   € V P                   \        P                  8X  d   R # V P                  f
   V\        9   # WP                  9   # )T)Úroler   ÚadminÚfunctionality_accessÚFUNCTIONALITY_KEYS)r   r   s   &&r   Úhas_functionality_accessr"      s<   € Ø‡y�y”D—J‘JÔÙØ× Ñ Ò(ØÔ 2Ñ2Ð2Ø×5Ñ5Ñ5Ð5r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Útokenz&Annotated[str, Depends(oauth2_scheme)]Údbz#Annotated[Session, Depends(get_db)]r   r   r   )r   s   "r   r   r      s$   € ÷ ñ ÐBð ÐHkð Ðptñ r   c                óÈ  € \        \        P                  R RR/R7      p \        P                  ! V \
        P                  \
        P                  .R7      pVP                  R4      pVf   Vh TP                  \        4      P                  \        P                  T8H  4      P                  4       pT'       d   TP                  '       g   ThT#   \         d   pY%hRp?ii ; i)zCould not validate credentialszWWW-AuthenticateÚBearer)Ústatus_codeÚdetailÚheaders)Ú
algorithmsÚsubN)r   r   ÚHTTP_401_UNAUTHORIZEDr
   Údecoder   Ú
SECRET_KEYÚ	ALGORITHMÚgetr	   Úqueryr   ÚfilterÚusernameÚfirstÚ	is_active)r$   r%   Úcredentials_exceptionÚpayloadr4   Úexcr   s   &&     r   Úget_current_userr:      sÀ   € Ü)Ü×0Ñ0Ø/Ø# XÐ.ôÐð
-Ü—*’*˜U¤H×$7Ñ$7ÄX×EWÑEWÐDXÔYˆØ&Ÿ{™{¨5Ó1ˆØÒØ'Ð'ð ð �8‰8”D‹>× Ñ ¤§¡°(Ñ!:Ó;×AÑAÓC€Dß�t—~—~�~Ø#Ð#Ø€Køô ô -Ø#Ð,ûð-ús    AC ÃC!ÃCÃC!c               ó   € V ^8„  d   QhRR/# )r   Úrolesr   r   )r   s   "r   r   r   -   s   € ÷ ñ ˜$ñ r   c                 ó   a € R  V 3R llpV# )c               ó    € V ^8„  d   QhRRRR/# ©r   Úcurrent_userú*Annotated[User, Depends(get_current_user)]r   r   r   )r   s   "r   r   Ú#require_roles.<locals>.__annotate__.   ó   € ÷ ñ ÐHð ÈTñ r   c                óž   <€ V P                   S9  d;   V P                   \        P                  8w  d   \        \        P
                  R R7      hV # )zInsufficient permissions©r(   r)   )r   r   r   r   r   ÚHTTP_403_FORBIDDEN)r@   r<   s   &€r   ÚcheckerÚrequire_roles.<locals>.checker.   s<   ø€ Ø×Ñ EÔ)¨l×.?Ñ.?Ä4Ç:Á:Ô.MÜ¬F×,EÑ,EÐNhÔiÐiØÐr   r   )r<   rG   s   j r   Úrequire_rolesrI   -   ó   ø€ ÷ð ð
 €Nr   c               ó   € V ^8„  d   QhRR/# )r   Úfunctionalitiesr   r   )r   s   "r   r   r   6   s   € ÷ ñ  Sñ r   c                 ó   a € R  V 3R llpV# )c               ó    € V ^8„  d   QhRRRR/# r?   r   )r   s   "r   r   Ú$require_access.<locals>.__annotate__7   rC   r   c                óÀ   <a € \         ;QJ d    V 3R  lS 4       F  '       g   K   RM	  RM! V 3R  lS 4       4      '       g   \        \        P                  RR7      hS # )c              3  ó<   <"  € T F  p\        SV4      x € K  	  R # 5i)N)r"   )Ú.0Úitemr@   s   & €r   Ú	<genexpr>Ú2require_access.<locals>.checker.<locals>.<genexpr>8   s   øé € Ð\ÉOÀDÔ+¨L¸$×?Ð?ËOùs   ƒTFúFunctionality access deniedrE   )Úanyr   r   rF   )r@   rL   s   f€r   rG   Úrequire_access.<locals>.checker7   s>   ù€ ß‹sÔ\ÉOÓ\�s�sŠsÔ\ÉOÓ\×\Ò\Ü¬F×,EÑ,EÐNkÔlÐlØÐr   r   )rL   rG   s   j r   Úrequire_accessrY   6   rJ   r   c               ó    € V ^8„  d   QhRRRR/# )r   Ústager   r   r   )r   s   "r   r   r   ?   s   € ÷ ñ ˜sð  sñ r   c                ó*   € V R 8X  d   R # V R9   d   R# R# )ÚrequisitionsÚprocurementÚ	tendering>   ú	gem-casesú	lpc-casesúe-tender-casesúopen-market-casesúprocurement-casesúglobal-tender-casesúother-procurement-casesr   )r[   s   &r   Ústage_functionalityrg   ?   s"   € Ø�ÔÙØð ô ñ Ùr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r[   r   r@   rA   r   r   r   )r   s   "r   r   r   O   s&   € ÷ ñ Øðà<ðð 
ñr   c                ór   € \        V\        V 4      4      '       g   \        \        P                  R R7      hV# )rV   rE   )r"   rg   r   r   rF   )r[   r@   s   &&r   Úrequire_stage_accessrj   O   s1   € ô $ LÔ2EÀeÓ2L×MÒMÜ¬×(AÑ(AÐJgÔhÐhØÐr   N>   ÚreportsÚ	dashboardr_   r^   r]   Úfinancial_management)Ú
__future__r   Útypingr   Úfastapir   r   r   Úfastapi.securityr   Újoser	   r
   Úsqlalchemy.ormr   Úapp.core.configr   Úapp.db.sessionr   Úapp.models.enumsr   Úapp.models.userr   Úoauth2_schemer!   r"   r:   rI   rY   rg   rj   r   r   r   Ú<module>ry      sU   ðÝ "Ý ç 2Ñ 2Ý 1ß Ý "å $Ý !Ý !Ý  á$Ð.?Ô@€ÚqÐ õ6õõ&õõ÷ r   