§
    ‚NjÈ  ã                   ó¬   — d Z ddlmZmZmZ ddlmZmZmZm	Z	 ddl
Z
ddlZddlmZ  e¦   «         Zdad„ Zdee         fd„Zd	„ Zddeeef         fd
„ZdS )z[
Route Info API - Exports endpoint permissions for testing by analyzing FastAPI app routes
é    )Ú	APIRouterÚDependsÚHTTPException)ÚDictÚListÚSetÚOptionalN)ÚPathc                 ó
   — | a dS )zSet the FastAPI app referenceN)Ú_app)Úapps    ú/app/app/api/route_info.pyÚset_appr      s   € ð €D€D€Dó    Úreturnc                  ó´  — t          ¦   «         } t          d¦  «        }|                     ¦   «         s,t          t          ¦  «        j        j        j        dz  dz  dz  }|                     ¦   «         rà	 t          |dd¬¦  «        5 }|                     ¦   «         }ddd¦  «         n# 1 swxY w Y   t          j        d	¦  «        }| 	                    |¦  «        }|rA| 
                    d
¦  «        }t          d„ |                     d¦  «        D ¦   «         ¦  «        } | s"g d¢}|D ]}||v r|                      |¦  «         Œn# t          $ r Y nw xY w| sh d£} | S )z.Extract user roles from the backend user modelz/app/backend/app/models/user.pyr   Úmodelszuser.pyÚrzutf-8)ÚencodingNzvalues=\[([^\]]+)\]é   c              3   ód   K  — | ]+}|                      ¦   «                               d ¦  «        V — Œ,dS )z"'N)Ústrip)Ú.0Úroles     r   ú	<genexpr>z!get_user_roles.<locals>.<genexpr>(   s8   è è € ÐWÐW¸$˜DŸJšJ™LœL×.Ò.¨uÑ5Ô5ÐWÐWÐWÐWÐWÐWr   Ú,)ÚadminÚcreatorÚviewerÚ	moderatorÚ
subscriber>   r   r   r   )Úsetr
   ÚexistsÚ__file__ÚparentÚopenÚreadÚreÚcompileÚsearchÚgroupÚsplitÚaddÚ	Exception)	ÚrolesÚuser_model_pathÚfÚcontentÚenum_patternÚmatchÚ	roles_strÚcommon_rolesr   s	            r   Úget_user_rolesr7      s¿  € å‰EŒE€Eõ Ð<Ñ=Ô=€OØ×!Ò!Ñ#Ô#ð ]Ý�x™.œ.Ô/Ô6Ô=ÀÑEÈÑPÐS\Ñ\ˆà×ÒÑÔð ð	Ý�o s°WÐ=Ñ=Ô=ð #ÀØŸ&š&™(œ(�ð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #õ
 œ:Ð&<Ñ=Ô=ˆLØ ×'Ò'¨Ñ0Ô0ˆEØð XØ!ŸKšK¨™NœN�	ÝÐWÐWÀ)Ç/Â/ÐRUÑBVÔBVÐWÑWÔWÑWÔW�ð ð (ØXÐXÐX�Ø(ð (ð (�DØ˜w��ØŸ	š	 $™œ˜øøøÝð 	ð 	ð 	ØˆDð	øøøð ð /Ø.Ð.Ð.ˆà€Ls7   Á3E ÂB&ÂE Â&B*Â*E Â-B*Â.BE Å
EÅEc                 óf  — t          ¦   «         }d}d}t          | d¦  «        r;| j        D ]3}t          |¦  «        }d|v r|                     d¦  «         d}Œ-d|v rd}Œ4t          | d¦  «        r’| j        }t          j        |¦  «        }|j         	                    ¦   «         D ]]\  }}	t          |	¦  «        }
d|
 
                    ¦   «         v r|                     d¦  «         d}d|
 
                    ¦   «         v sd	|
v rd}Œ^|r|                     d¦  «         n|r|                     d
dg¦  «         |S )z6Analyze route dependencies to determine required rolesFÚdependenciesÚget_current_admin_userr   TÚget_current_userÚendpointÚcurrent_userzuser:r   r   )r"   Úhasattrr9   Ústrr-   r<   ÚinspectÚ	signatureÚ
parametersÚitemsÚlowerÚupdate)ÚrouteÚrequired_rolesÚ	has_adminÚhas_userÚdepÚdep_strÚfuncÚsigÚ
param_nameÚparamÚ	param_strs              r   Úanalyze_route_dependenciesrQ   9   sr  € å‘U”U€Nð €IØ€Håˆu�nÑ%Ô%ð  ØÔ%ð 	 ð 	 ˆCÝ˜#‘h”hˆGØ'¨7Ð2Ð2Ø×"Ò" 7Ñ+Ô+Ð+Ø �	�	Ø# wÐ.Ð.Ø�øõ ˆu�jÑ!Ô!ð 
 ØŒ~ˆåÔ Ñ%Ô%ˆØ!$¤×!5Ò!5Ñ!7Ô!7ð 	 ð 	 ÑˆJ˜Ý˜E™
œ
ˆIØ˜)Ÿ/š/Ñ+Ô+Ð+Ð+Ø×"Ò" 7Ñ+Ô+Ð+Ø �	Ø §¢Ñ!2Ô!2Ð2Ð2°gÀÐ6JÐ6JØ�øð ð 5Ø×Ò˜7Ñ#Ô#Ð#Ð#Ø	ð 5ð 	×Ò˜y¨(Ð3Ñ4Ô4Ð4àÐr   c           
      ód  — i }| �| nt           }|€|S t          ¦   «         }|j        D �]‡}t          |d¦  «        rt          |d¦  «        sŒ$t          |d¦  «        r|j        sŒ<|j        r|j        ndg}t          |¦  «        }t          |¦  «        dk    }|r|r|nt          |¦  «        }nt          |¦  «        }|D ]ð}	|	dk    rŒ	|	› d|j	        › �}
|j	        }| 
                    d	¦  «        rd
|v rd}nŒd|v rd}n…d}n‚| 
                    d¦  «        rd}nj| 
                    d¦  «        rd}nR| 
                    d¦  «        r
d|v rd}n6d}n3| 
                    d¦  «        r
d|v rd}nd}n|dk    rd}n|dk    rd}nd}|t          |¦  «        |t          |¦  «        |j	        |	|d œ||
<   Œñ�Œ‰|S )!zžGet all endpoint permissions by analyzing FastAPI app routes

    Args:
        app_override: Optional FastAPI app instance to use instead of global _app
    NÚmethodsÚpathÚinclude_in_schemaÚGETr   ÚHEADú:z/api/streamsz/chatzapi/streams/{stream_id}/chatz	/commentsz api/streams/{stream_id}/commentszapi/streamsz
/api/usersz	api/usersz	/api/tagszapi/tagsz	/api/authz/twitchzapi/auth/twitchzapi/authz
/api/adminz/backupzapi/admin/backupz	api/adminz/api/healthz
api/healthz/api/settingszapi/settingsÚapi)Úrequires_authrG   Úaccessible_rolesÚavailable_rolesrT   ÚmethodÚcategory)r   r7   Úroutesr>   rU   rS   rQ   ÚlenÚlistrT   Ú
startswith)Úapp_overrideÚpermissionsÚ
target_appr\   rF   rS   rG   rZ   r[   r]   Úkeyr^   s               r   Úget_endpoint_permissionsrg   a   s‚  € ð €Kð ".Ð!9��½t€JàÐØÐõ %Ñ&Ô&€OàÔ"ð Dñ Dˆå�u˜iÑ(Ô(ð 	µ¸¸vÑ0FÔ0Fð 	Øõ �5Ð-Ñ.Ô.ð 	°uÔ7Nð 	Øð $)¤=Ð=�%”-�-°u°gˆõ 4°EÑ:Ô:ˆõ ˜NÑ+Ô+¨aÒ/ˆð ð 	5Ø1?ÐZ˜~˜~ÅTÈ/ÑEZÔEZÐÐå# OÑ4Ô4Ðð ð +	ð +	ˆFØ˜ÒÐØàÐ*Ð*˜eœjÐ*Ð*ˆCà”zˆHØ×"Ò" >Ñ2Ô2ð !Ø˜hÐ&Ð&Ø=�H�HØ  HÐ,Ð,ØA�H�Hà,�H�HØ×$Ò$ \Ñ2Ô2ð !Ø&��Ø×$Ò$ [Ñ1Ô1ð !Ø%��Ø×$Ò$ [Ñ1Ô1ð !Ø Ð(Ð(Ø0�H�Hà)�H�HØ×$Ò$ \Ñ2Ô2ð 
!Ø Ð(Ð(Ø1�H�Hà*�H�HØ˜]Ò*Ð*Ø'��Ø˜_Ò,Ð,Ø)��à �ð "/Ý"& ~Ñ"6Ô"6Ø$4Ý#'¨Ñ#8Ô#8Øœ
Ø Ø$ð ð  ˆK˜ÑÐñG+	ðZ Ðr   )N)Ú__doc__Úfastapir   r   r   Útypingr   r   r   r	   r@   r(   Úpathlibr
   Úrouterr   r   r?   r7   rQ   rg   © r   r   ú<module>rn      s  ððð ð 6Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð à	ˆ‰Œ€ð €ðð ð ð
#˜˜Cœð #ð #ð #ð #ðJ&ð &ð &ðPWð W°4¸¸T¸	´?ð Wð Wð Wð Wð Wð Wr   