ó
    h™ªj#  ã                   óB   • S SK Jr  1 SkrS rS rS rS rS rS rS	 r	g
)é    )Úurlsplit>   ÚGETÚHEADÚOPTIONSc                 ó  • [        U 5      oR                  R                  5       o!R                  =(       d    SR                  5       o1R                  nUc  US:X  a  SO	US:X  a  SOS nU SU 3US US:X  a  SOS4;  a  SU 3-   $ S-   $ )NÚ Úhttpsi»  ÚhttpéP   z://Ú:)r   ÚschemeÚlowerÚhostnameÚport)ÚurlÚpr   Úhostr   s        Ú‚/mnt/data/work_sec006_macroc/PO083_SEC-006/F2-L4/SEC-006_ACCEPTED_CANDIDATE_QUERY2/lab/SEC006-LAB1/learner/src/browser_boundary.pyÚnormalized_originr      s‰   € Üˆsƒm€AŸH™HŸN™NÓ,�V·J±J×4DÀ"×3KÑ3KÓ3M¨d×TZÑTZÈtØ�| ¨£™#¸FÀF»N±bÐPT�TØˆX�S˜˜Ð°¸dÈ&ÐRYË/Á3Ð_aÐ=bÓ1b Q t f :ÑkÐkÐhjÑkÐkó    c                 ó°   • [        U 5      [        U5      pCX4:X  a  gUR                  U5      (       a%  UR                  U5      UR                  U5      :X  a  gg)Nzsame-originzsame-site-different-originz
cross-site)r   Úget)ÚaÚbÚsite_mapÚoaÚobs        r   Úrelationr   	   sI   € Ü
˜AÓ
Ô0°Ó3€rØ	ƒv�mØ‡|�|�B×Ñ˜HŸL™L¨Ó,¨h¯l©l¸2Ó.>Ó>ÐGcØr   c                 óŒ  • U R                  SS5      R                  5       nU R                  S5      (       d  gU[        ;   a  gU R                  S5      (       d  gU R                  S5      US	   ;  a  g
U R                  S5      (       a<  UR                  SS5      (       a%  U R                  S5      UR                  S5      :w  a  gg)NÚmethodr   Ústate_changeÚ"CSRF_NOT_REQUIRED_FOR_FIXTURE_FLOWÚDENY_STATE_CHANGE_SAFE_METHODÚbusiness_authorizedÚDENY_AUTHORIZATIONÚcaller_originÚtrusted_state_originsÚDENY_ORIGINÚambient_credentialsÚ&csrf_required_for_ambient_state_changeFÚcsrf_signalÚexpected_csrf_signalÚDENY_MISSING_CSRFÚALLOW_STATE_CHANGE)r   ÚupperÚSAFE_METHODS)ÚreqÚpolicyr    s      r   Úevaluate_csrfr3      s¨   € Ø�7‰7�8˜EÓ"×(Ñ(Ó*€FØ�7‰7�>×"Ñ"Ø3Ø”ÓØ.Ø�7‰7Ð(×)Ñ)Ø#Ø
‡w�wˆÓ vÐ.EÑ'FÓFØØ
‡w�wÐ$×%Ñ%¨&¯*©*Ð5]Ð^c×*dÑ*dØ�7‰7�=Ó! V§Z¡ZÐ0FÓ%GÓGØ&Ør   c                 óN  • UR                  S0 5      R                  U R                  S5      5      nUc  SSS.$ U R                  S5      o2R                  S/ 5      n[        U R                  S5      5      nU R                  S	S
5      R                  5       obR                  S/ 5       Vs1 s H  n[        U5      R                  5       iM     nnU(       a
  Xh;  a  SSS.$ X4;   a(  U(       a  UR                  SS5      (       d  SSS.$ SSS.$ SU;   a  U(       d  SSS.$ SSS.$ s  snf )NÚcorsr   ÚCORS_NOT_CONFIGUREDF)ÚstatusÚsharedr&   Úallowed_originsr)   r    r   Úallowed_methodsÚCORS_METHOD_NOT_SHAREDÚallow_credentialsÚCORS_NOT_SHAREDÚCORS_SHAREDTÚ*)r   Úboolr/   Ústr)	r1   r2   ÚrouteÚoriginÚallowedÚcredentialsr    Úxr:   s	            r   Úevaluate_corsrG      s  € Ø
�*‰*�V˜BÓ
×
#Ñ
# C§G¡G¨E£NÓ
3€EØ�}Ð'<ÀeÑLÐLØ�7‰7�?Ó#€F¯Y©YÐ7HÈÓ-L WÔZ^Ð_b×_fÑ_fÐg|Ó_}ÓZ~ÈkØ�7‰7�8˜EÓ"×(Ñ(Ó*€F×U^ÑU^Ð_pÐqsÔUtÓ<uÒUtÐPQ¼SÀ»V¿\¹\¾^ÑUt¨OÐ<uÞ˜6Ó8Ø1¸5ÑAÐAØÓÞ˜uŸy™yÐ)<¸U×CÑCÐVgÐqvÑLwÐEwØ&°Ñ5Ð5Ø
ˆgƒ~žkØ&°Ñ5Ð5Ø&°Ñ6Ð6ùò =vs   Â(#D"c                 óÈ   • SU;   a  [        U 5      [        U5      :X  a  g[        U 5      U Vs1 s H%  o3R                  S5      (       a  M  [        U5      iM'     sn;   $ s  snf )Nz'self'TÚ')r   Ú
startswith)ÚsourceÚpage_originrD   rF   s       r   Ú_source_allowedrM   ,   sW   € Ø�7ÓÔ0°Ó8Ô:KÈKÓ:XÓXÐaeÜ˜VÓ$ÁwÓ(hÂwÀ!×VbÑVbÐcf×VgÓ)=Ô):¸1Ö)=ÁwÑ(hÑhÐhùÒ(hs   ®AÁAc                 ó8  • US   n[        U S   5      [        US   5      :w  a  SSSS.$ US   o0S   nUR                  U S3UR                  S	/ 5      5      n[        U S
   U S   U5      nU R                  SS5      nU(       a  SSSS.$ US:X  a  SSSS.$ SSSS.$ )NÚcsprL   ÚCSP_POLICY_NOT_APPLICABLEF)r7   ÚblockedÚreportedÚ
directivesÚresource_typez-srczdefault-srcÚsource_originÚmodeÚenforceÚCSP_ALLOWEDzreport-onlyÚCSP_REPORTED_NOT_BLOCKEDTÚCSP_BLOCKED)r   r   rM   )Úresourcer2   rO   rS   ÚtypÚ	directiverD   rV   s           r   Úevaluate_cspr^   0   sÃ   € Øˆu‰€CÜ˜ -Ñ0Ó1Ô5FÀsÈ=ÑGYÓ5ZÓZØ4¸uÐPUÑVÐVØ�<Ñ €J¨Ñ&? #Ø�n‰n ˜u D˜\¨*¯.©.¸ÀrÓ*JÓK€IÜ˜H _Ñ5°h¸}Ñ6MÈiÓX€GØ	�‰�f˜YÓ	'€DÞ ¸È%ÑPÐPØˆ]ÓÐ-GÐRWÐcgÑ#hÐhØ"¨T¸TÑBÐBr   c                 óò   • U S   [        U S   U S   U5      [        X5      [        X5      [        U R	                  S5      5      [        U R	                  S5      5      [        U R	                  S5      5      S.$ )NÚidr&   r   r$   r!   r)   )ÚflowÚorigin_site_relationÚcsrfr5   r$   r!   r)   )r   r3   rG   r@   r   )r1   r2   r   s      r   Úevaluate_flowrd   <   sm   € à�‰YÜ% c¨/Ñ&:¸3¸u¹:ÀhÓOÜ˜3Ó&Ü˜3Ó&Ü  §¡Ð)>Ó!?Ó@Ü˜#Ÿ'™' .Ó1Ó2Ü  §¡Ð)>Ó!?Ó@ñð r   N)
Úurllib.parser   r0   r   r   r3   rG   rM   r^   rd   © r   r   Ú<module>rg      s3   ðÝ !Ú%€òlò
ò ò7òiò
Có	r   