Ë
    lÝjv#  ã                   óŽ   — d Z ddlZddlZddlmZmZmZ ddlmZm	Z	m
Z
mZ d„ Z G d„ de«      Zedk(  r ej                  «        yy)	u/  Authentifizierung: Absender nur aus dem Transportfeld, Allowlist, Modusbefehle.

Abgrenzung: IntegritÃ¤t (Digest) beweist keine Berechtigung. Berechtigt ist
nur ein vom Transport verifizierter Absender in der Allowlist, fÃ¼r den die
Policy entscheidet und eine gÃ¼ltige HMAC-Clearance ausgestellt wird.
é    N)ÚGatewayRequestÚHandlingÚRequestError)ÚGROUP_IDÚOTHER_IDÚOWNER_IDÚGatewayTestCasec                  óL   — dt         t         dddddœ}|j                  | «       |S )NÚtelegramÚprivateé   Úhalloz2026-10-24T18:00:00.000Z)Ú	transportÚ	sender_idÚchat_idÚ	chat_typeÚ
message_idÚtextÚts)r   Úupdate)Ú	overridesÚpayloads     ú0/home/aria/aria-v3-dev/python/tests/test_auth.pyÚbridge_payloadr      s-   € Ø&´XÌ(ÐajØ¨Ð7QñS€Gà‡N�N�9ÔØ€Nó    c                   ó„   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚAuthenticationTestsc                 ó¶   — | j                  |j                  d   j                  j                  g «       | j                  | j                  j
                  g «       y )NÚcodex)ÚassertEqualÚadaptersÚrunnerÚcallsÚsinkÚ	delivered©ÚselfÚgateways     r   ÚassertNothingExecutedz)AuthenticationTests.assertNothingExecuted   sC   € Ø×Ñ˜×)Ñ)¨'Ñ2×9Ñ9×?Ñ?ÀÔDØ×Ñ˜Ÿ™×,Ñ,¨bÕ1r   c                 ó  — | j                  «       }|j                  | j                  ddt        › d�t        ¬«      «      }| j                  |j                  |j                  ft        j                  df«       | j                  |«       y )Nr   zsender_id: z
#public hallo©r   ÚNOT_AUTHORIZED)r(   ÚhandleÚrequestr   r   r    ÚhandlingÚcoder   ÚDROPr)   ©r'   r(   Úresults      r   Ú%test_sender_only_from_transport_fieldz9AuthenticationTests.test_sender_only_from_transport_field   si   € Ø—,‘,“.ˆØ—‘ §¡¨Q°+¼h¸ZÀÐ0WÔck Ó lÓmˆØ×Ñ˜&Ÿ/™/¨6¯;©;Ð7¼(¿-¹-ÐIYÐ9ZÔ[Ø×"Ñ" 7Õ+r   c                 ó¾  — | j                  «       }t        j                  t        t        t        ddœ«      }|j	                  | j                  d|t        ¬«      «      }| j                  |j                  t        j                  «       | j                  |«       | j                  |«      d   }| j                  |d   t        «       | j                  |d   d   d	«       y )
NT)r   r   Úuser_idÚtrustedé   r+   éÿÿÿÿr   ÚauthenticationÚreasonÚSENDER_NOT_ALLOWED)r(   ÚjsonÚdumpsr   r-   r.   r   r    r/   r   r1   r)   Úlog_records)r'   r(   r   r3   Úrecords        r   Útest_fake_identity_json_in_textz3AuthenticationTests.test_fake_identity_json_in_text!   s¯   € Ø—,‘,“.ˆÜ�z‰z¬¼XÔRZÐgkÑlÓmˆØ—‘ §¡¨Q°Ä Ó IÓJˆØ×Ñ˜Ÿ™¬(¯-©-Ô8Ø×"Ñ" 7Ô+Ø×!Ñ! 'Ó*¨2Ñ.ˆØ×Ñ˜ Ñ,¬hÔ7Ø×Ñ˜Ð 0Ñ1°(Ñ;Ð=QÕRr   c                 óâ   — | j                  «       }|j                  | j                  ddt        › �«      «       | j	                  |«      d   }| j                  |d   |d   d   ft        df«       y )Né   zich bin r9   r   r:   Ú	principalÚowner)r(   r-   r.   r   Údecision_recordsr    r   )r'   r(   r@   s      r   Ú'test_owner_identity_not_changed_by_textz;AuthenticationTests.test_owner_identity_not_changed_by_text+   sl   € Ø—,‘,“.ˆØ�‰�t—|‘| A¨´(°Ð'<Ó=Ô>Ø×&Ñ& wÓ/°Ñ3ˆØ×Ñ˜& Ñ-¨vÐ6FÑ/GÈÑ/TÐUÔX`ÐbiÐWjÕkr   c                 óF  — dD ]„  }| j                  |¬«      5  | j                  t        «      5 }t        j                  t        di |di¤Ždd¬«       d d d «       d d d «       | j                  j                  j                  d«       Œ† y # 1 sw Y   Œ:xY w# 1 sw Y   Œ>xY w)	N)r6   Úprivacyr7   rD   ÚfromÚallowlisted)ÚfieldÚxé   r   ©Úmax_text_bytesÚmax_attachmentsÚUNKNOWN_FIELD© )	ÚsubTestÚassertRaisesr   r   Úfrom_bridger   r    Ú	exceptionr0   )r'   rL   Úctxs      r   Ú,test_self_declared_fields_rejected_by_bridgez@AuthenticationTests.test_self_declared_fields_rejected_by_bridge1   sœ   € ØZò 	BˆEØ—‘ E�Ó*ñ t¨D×,=Ñ,=¼lÓ,Kð tÈsÜ×*Ñ*¬>Ñ+I¸UÀC¸LÑ+IÐZ_ÐqrÕs÷t÷ tà×Ñ˜SŸ]™]×/Ñ/°ÕAñ	B÷tð tú÷ tð tús"   ˜B®$BÁBÂBÂBÂB 	c                 óî   — t        «       }|d= | j                  t        «      5 }t        j                  |dd¬«       d d d «       | j                  j                  j                  d«       y # 1 sw Y   Œ0xY w)Nr   rN   r   rO   ÚMISSING_FIELD)r   rU   r   r   rV   r    rW   r0   )r'   r   rX   s      r   Útest_missing_transport_identityz3AuthenticationTests.test_missing_transport_identity7   sh   € Ü Ó"ˆØ�KÐ Ø×Ñœ|Ó,ð 	Y°Ü×&Ñ& w¸uÐVWÕX÷	Yà×Ñ˜Ÿ™×+Ñ+¨_Õ=÷	Yð 	Yús   £A+Á+A4c                 óø   — dD ]]  }| j                  |¬«      5  | j                  t        «      5  t        j                  t        |¬«      dd¬«       d d d «       d d d «       Œ_ y # 1 sw Y   ŒxY w# 1 sw Y   ŒvxY w)N)ÚkaisÚ z12 34z-5i90  )Úbadr+   rN   r   rO   )rT   rU   r   r   rV   r   )r'   r`   s     r   Útest_sender_id_format_enforcedz2AuthenticationTests.test_sender_id_format_enforced>   s   € Ø5ò 	sˆCØ—‘ #�Ó&ñ s¨×(9Ñ(9¼,Ó(Gñ sÜ×*Ñ*¬>ÀCÔ+HÐY^ÐpqÕr÷s÷ sð sñ	s÷sð sú÷ sð sús"   ˜A0®#A$ÁA0Á$A-Á)A0Á0A9	c                 ó<  — | j                  «       }|j                  | j                  ddt        ¬«      «      }| j	                  |j
                  t        j                  «       | j	                  | j                  |«      d   d   d   d«       | j                  |«       y )Né   ú#public hallo)r   r9   r:   r;   ÚCHAT_SENDER_MISMATCH)
r(   r-   r.   r   r    r/   r   r1   r?   r)   r2   s      r   Ú!test_private_chat_sender_mismatchz5AuthenticationTests.test_private_chat_sender_mismatchC   s|   € Ø—,‘,“.ˆØ—‘ §¡¨Q°Ì Ó RÓSˆØ×Ñ˜Ÿ™¬(¯-©-Ô8Ø×Ñ˜×)Ñ)¨'Ó2°2Ñ6Ð7GÑHÈÑRÐTjÔkØ×"Ñ" 7Õ+r   c           	      ó4  — | j                  «       }| j                  |j                  | j                  ddt        ¬«      «      j
                  t        j                  «       | j                  |j                  j                  t        «      j                  d«       y )Né   ú/codexr+   Úauto)r(   r    r-   r.   r   r/   r   r1   Ú_modesÚgetÚvaluer&   s     r   Ú&test_unauthorized_mode_command_droppedz:AuthenticationTests.test_unauthorized_mode_command_droppedJ   sg   € Ø—,‘,“.ˆØ×Ñ˜Ÿ™¨¯©°Q¸ÌH¨Ó(UÓV×_Ñ_Ôai×anÑanÔoØ×Ñ˜Ÿ™×+Ñ+¬HÓ5×;Ñ;¸VÕDr   c           	      óv  — | j                  dt        gt        dg dœidœ«      }| j                  ddt	        |«      ii«      }|j                  | j                  ddt        t        d	¬
«      «      }| j                  |j                  |j                  ft        j                  df«       | j                  |j                  j                  t        «      j                  d«       |j                  | j                  ddt        t        d	¬
«      «      }| j                  |j                  d«       | j!                  |«       y )NÚ	allowlistT©ÚrequireMentionÚ	allowFrom©ÚdmPolicyrs   ÚgroupsÚauthÚtelegram_access_fileé   ri   Úgroup©r   r   r   ÚMODE_COMMAND_NOT_ALLOWEDrj   é   z/codex #public x)Úwrite_access_filer   r   r(   Ústrr-   r.   r   r    r/   r0   r   ÚBLOCKEDrk   rl   rm   r)   )r'   Úaccessr(   r3   Úone_shots        r   Ú/test_mode_commands_only_for_authenticated_ownerzCAuthenticationTests.test_mode_commands_only_for_authenticated_ownerO   s  € Ø×'Ñ'°[ÔPXÈzÜ4<ÐQUÐdfÑ>gÐ3hñ)jó kˆà—,‘, Ð)?ÄÀVÃÐ(MÐNÓOˆØ—‘ §¡¨Q°ÄHÔV^Ðjq Ó rÓsˆØ×Ñ˜&Ÿ/™/¨6¯;©;Ð7¼(×:JÑ:JÐLfÐ9gÔhØ×Ñ˜Ÿ™×+Ñ+¬HÓ5×;Ñ;¸VÔDØ—>‘> $§,¡,¨qÐ2DÔPXÔbjØ9@ð #/ó #Bó Cˆà×Ñ˜Ÿ™Ð(BÔCØ×"Ñ" 7Õ+r   c                 óH  — | j                  «       }|j                  | j                  dd«      «      }| j                  |j                  |j
                  ft        j                  df«       | j                  |j                  j                  t        «      j                  d«       y )Né   ri   ÚMODE_SETr   )r(   r-   r.   r    r/   r0   r   ÚREPLYrk   rl   r   rm   r2   s      r   Ú test_owner_mode_command_acceptedz4AuthenticationTests.test_owner_mode_command_accepted[   sq   € Ø—,‘,“.ˆØ—‘ §¡¨Q°Ó 9Ó:ˆØ×Ñ˜&Ÿ/™/¨6¯;©;Ð7¼(¿.¹.È*Ð9UÔVØ×Ñ˜Ÿ™×+Ñ+¬HÓ5×;Ñ;¸WÕEr   c           	      ó¤  — | j                  dt        gi dœ«      }| j                  ddt        |«      ii«      }| j	                  |j                  | j                  dd«      «      j                  t        j                  «       | j	                  |j                  | j                  ddt        ¬«      «      j                  t        j                  «       y )	Nrp   rt   rw   rx   é	   r   é
   r+   )r~   r   r(   r   r    r-   r.   r/   r   ÚFORWARD_TO_CLAUDE_CHANNELr   r1   ©r'   r�   r(   s      r   Útest_access_file_allowlistz.AuthenticationTests.test_access_file_allowlista   sŸ   € Ø×'Ñ'°[ÔPXÈzÐegÑ(hÓiˆØ—,‘, Ð)?ÄÀVÃÐ(MÐNÓOˆØ×Ñ˜Ÿ™¨¯©°Q¸Ó(@ÓA×JÑJÌH×LnÑLnÔoØ×Ñ˜Ÿ™¨¯©°R¸ÌH¨Ó(UÓV×_Ñ_Ôai×anÑanÕor   c           	      ó°  — | j                  dt        gi dœ«      }| j                  dt        |«      t        gdœi«      }| j                  |j                  | j                  dd«      «      j                  t        j                  «       | j                  |j                  | j                  ddt        ¬«      «      j                  t        j                  «       y )	Nrp   rt   rw   )rx   Úallowed_sender_idsé   r   é   r+   )r~   r   r(   r   r   r    r-   r.   r/   r   r1   r�   s      r   Ú*test_access_file_and_static_list_intersectz>AuthenticationTests.test_access_file_and_static_list_intersectg   s    € Ø×'Ñ'°[ÔPXÈzÐegÑ(hÓiˆØ—,‘, ÄÀVÃÔemÐdnÑ(oÐpÓqˆØ×Ñ˜Ÿ™¨¯©°R¸Ó(AÓB×KÑKÌXÏ]É]Ô[Ø×Ñ˜Ÿ™¨¯©°R¸ÌH¨Ó(UÓV×_Ñ_Ôai×anÑanÕor   c                 ó  — | j                  dt        gi dœ«      }| j                  ddt        |«      ii«      }| j	                  |j                  | j                  dd«      «      j                  t        j                  «       y )NÚdisabledrt   rw   rx   é   r   )
r~   r   r(   r   r    r-   r.   r/   r   r1   r�   s      r   Útest_access_file_dm_disabledz0AuthenticationTests.test_access_file_dm_disabledm   sg   € Ø×'Ñ'°ZÌxÈjÐdfÑ(gÓhˆØ—,‘, Ð)?ÄÀVÃÐ(MÐNÓOˆØ×Ñ˜Ÿ™¨¯©°R¸Ó(AÓB×KÑKÌXÏ]É]Õ[r   c                 ó.  — | j                  ddt        | j                  dz  «      ii«      }|j                  | j	                  dd«      «      }| j                  |j                  |j                  ft        j                  df«       | j                  |«       y )Nrw   rx   zmissing.jsoné   r   ÚALLOWLIST_UNAVAILABLE)r(   r   Úrootr-   r.   r    r/   r0   r   ÚERRORr)   r2   s      r   Ú'test_access_file_unreadable_fail_closedz;AuthenticationTests.test_access_file_unreadable_fail_closedr   sx   € Ø—,‘, Ð)?ÄÀTÇYÁYÐQ_ÑE_ÓA`Ð(aÐbÓcˆØ—‘ §¡¨R°Ó 9Ó:ˆØ×Ñ˜&Ÿ/™/¨6¯;©;Ð7¼(¿.¹.ÐJaÐ9bÔcØ×"Ñ" 7Õ+r   c           	      ó¬  — | j                  dt        gt        dg dœidœ«      }| j                  ddt	        |«      ii«      }|j                  | j                  ddt        t        d	¬
«      «      }| j                  |j                  |j                  ft        j                  df«       | j                  |«      d   }| j                  |d   d   d   «       y )Nrp   Trq   rt   rw   rx   é   z#public analyseÚ
supergroupr{   Úclauder9   Úbackend_stater   Úprincipal_restricted)r~   r   r   r(   r   r-   r.   r   r    r/   Úbackendr   rŒ   rF   Ú
assertTrue)r'   r�   r(   r3   r@   s        r   Útest_group_message_claude_onlyz2AuthenticationTests.test_group_message_claude_onlyx   sÓ   € Ø×'Ñ'°[ÔPXÈzÜ4<ÐQUÐdfÑ>gÐ3hñ)jó kˆà—,‘, Ð)?ÄÀVÃÐ(MÐNÓOˆØ—‘ §¡¨RÐ1BÌhÔ`hØ7Cð !-ó !Eó Fˆà×Ñ˜&Ÿ/™/¨6¯>©>Ð:¼X×=_Ñ=_ÐaiÐ<jÔkØ×&Ñ& wÓ/°Ñ3ˆØ�‰˜˜Ñ/°Ñ8Ð9OÑPÕQr   c           	      ó’  — | j                  dt        gt        dt        gdœidœ«      }| j                  ddt	        |«      ii«      }|j                  | j                  ddt        t        d	¬
«      «      }| j                  |j                  t        j                  «       | j                  | j                  |«      d   d   d   d«       y )Nrp   Trq   rt   rw   rx   é   r   rz   r{   r9   r:   r;   ÚSENDER_NOT_ALLOWED_IN_GROUP)r~   r   r   r(   r   r-   r.   r   r    r/   r   r1   r?   )r'   r�   r(   r3   s       r   Útest_group_sender_restrictedz0AuthenticationTests.test_group_sender_restricted‚   s¶   € Ø×'Ñ'°[ÔPXÈzÜ4<ÐQUÔemÐdnÑ>oÐ3pñ)ró sˆà—,‘, Ð)?ÄÀVÃÐ(MÐNÓOˆØ—‘ §¡¨R°ÄHÔV^Ðjq Ó rÓsˆØ×Ñ˜Ÿ™¬(¯-©-Ô8Ø×Ñ˜×)Ñ)¨'Ó2°2Ñ6Ð7GÑHÈÑRÐTqÕrr   c                 óÈ   — | j                  «       }|j                  | j                  ddt        d¬«      «      }| j	                  |j
                  t        j                  «       y )Né   r   rz   )r   r   )r(   r-   r.   r   r    r/   r   r1   r2   s      r   Útest_unconfigured_group_droppedz3AuthenticationTests.test_unconfigured_group_droppedŠ   sE   € Ø—,‘,“.ˆØ—‘ §¡¨R°Ä(ÐV] Ó ^Ó_ˆØ×Ñ˜Ÿ™¬(¯-©-Õ8r   c                 ó$  — | j                  «       }|j                  | j                  ddt        ¬«      «      }| j	                  |j
                  t        j                  «       | j                  | j                  dz  dz  j                  «       «       y )Né   rd   r+   Ústateznonces.json)r(   r-   r.   r   r    r/   r   r1   ÚassertFalser›   Úexistsr2   s      r   Ú#test_integrity_is_not_authorizationz7AuthenticationTests.test_integrity_is_not_authorization�   sg   € Ø—,‘,“.ˆØ—‘ §¡¨R°ÌH Ó UÓVˆØ×Ñ˜Ÿ™¬(¯-©-Ô8Ø×Ñ˜$Ÿ)™) gÑ-°Ñ=×EÑEÓGÕHr   c                 ó   — | j                  «       }t        t        t        dddd¬«      }|j                  |«      }| j	                  |j
                  t        j                  «       | j	                  | j                  |«      d   d   d   d	«       y )
Nr   é   r   Úemail)r   r   r   r   r   r   r9   r:   r;   ÚUNSUPPORTED_TRANSPORT)	r(   r   r   r-   r    r/   r   r1   r?   )r'   r(   r.   r3   s       r   Útest_unsupported_transportz.AuthenticationTests.test_unsupported_transport•   sy   € Ø—,‘,“.ˆÜ ¬8¼XÐQZÐgiØ&-¸ôBˆà—‘ Ó(ˆØ×Ñ˜Ÿ™¬(¯-©-Ô8Ø×Ñ˜×)Ñ)¨'Ó2°2Ñ6Ð7GÑHÈÑRÐTkÕlr   N)Ú__name__Ú
__module__Ú__qualname__r)   r4   rA   rG   rY   r\   ra   rf   rn   rƒ   rˆ   rŽ   r“   r—   r�   r¦   rª   r­   r³   r¸   rS   r   r   r   r      ss   „ ò2ò,òSòlòBò>òsò
,òEò

,òFòpòpò\ò
,òRòsò9ò
Iómr   r   Ú__main__)Ú__doc__r=   ÚunittestÚaria_router.gatewayr   r   r   Útests.helpersr   r   r   r	   r   r   r¹   ÚmainrS   r   r   ú<module>rÂ      sN   ðñó Û ç FÑ Fç GÓ GòôEm˜/ô EmðP ˆzÒØ€H‡M�M…Oð r   