Ë
    ¥,jÿ  ã                  ó  — d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	m
Z
 ddlmZ ddlmZmZ ddlmZ  ej$                  e«      Z e«       Z ed	d
¬«      Zej/                  d«      dd„«       Zej/                  d«      dd„«       Zej5                  d«      dd„«       Z	 	 	 	 	 	 	 	 dd„Zej/                  de¬«      	 	 	 d	 	 	 	 	 	 	 dd„«       Zej/                  de¬«      dd„«       Zej/                  de¬«      dd„«       Zy) aL  eBay Marketplace Account Deletion / Closure notification endpoint,
plus OAuth2 callback and privacy policy routes.

Implements the challenge-response handshake (GET) and deletion notification
receiver (POST) required by eBay's Marketplace Account Deletion policy.

Reference: https://developer.ebay.com/marketplace-account-deletion
é    )ÚannotationsN)ÚAny)ÚFastAPIÚRequestÚResponse©ÚHTMLResponse)ÚEbayTokenStoreÚexchange_code_for_tokens)ÚComplianceSettingszeBay Agent Samochodowy APIz1.1.0)ÚtitleÚversionz/healthc               ƒ  ó   K  — ddiS ­w)NÚstatusÚok© r   ó    úQ/var/www/html/agent.samochodowy/src/agent_samochodowy/compliance/ebay_deletion.pyÚhealthr   $   s   è ø€ à�dÐÐùs   ‚z/ebay/deletionsc              ƒ  ó€   K  — t        | t        j                  t        j                  «      }t	        d|› d�dd¬«      S ­w)zRespond to eBay's challenge-response verification.

    hash = SHA-256(challenge_code + verification_token + endpoint_url)
    z{"challengeResponse":"z"}zapplication/jsonéÈ   )ÚcontentÚ
media_typeÚstatus_code)Úcompute_challenge_hashÚsettingsÚebay_verification_tokenÚebay_deletion_endpoint_urlr   )Úchallenge_codeÚdigests     r   Ú	challenger!   -   sH   è ø€ ô $ØÜ×(Ñ(Ü×+Ñ+ó€Fô
 Ø)¨&¨°Ð5Ø%Øôð ùs   ‚<>c              ƒ  óÜ   K  — | j                  «       ƒ d{  –—† }|j                  di «      j                  dd«      }|j                  dd«      }t        j                  d||«       ddiS 7 ŒS­w)	zCReceive and acknowledge an account-deletion notification from eBay.NÚmetadataÚnotificationIdÚunknownÚuserIdz@eBay deletion notification received: notificationId=%s userId=%sr   Úacknowledged)ÚjsonÚgetÚloggerÚinfo)ÚrequestÚbodyÚnotification_idÚuser_ids       r   Údeletion_notificationr0   ?   sk   è ø€ ð ")§¡£×/€DØ—h‘h˜z¨2Ó.×2Ñ2Ð3CÀYÓO€OØ�h‰h�x Ó+€GÜ
‡K�KØJØØôð
 �nÐ%Ð%ð 0ús   ‚A,–A*—AA,c                óv   — | |z   |z   }t        j                  |j                  d«      «      j                  «       S )zESHA-256 hex digest of the concatenation challenge_code + token + url.zutf-8)ÚhashlibÚsha256ÚencodeÚ	hexdigest)r   Úverification_tokenÚendpoint_urlÚpayloads       r   r   r   M   s5   € ð Ð1Ñ1°LÑ@€GÜ�>‰>˜'Ÿ.™.¨Ó1Ó2×<Ñ<Ó>Ð>r   z/ebay/oauth/callback)Úresponse_classc              ƒ  óÎ  K  — |r/t         j                  d||«       t        d|› d|xs d› d�d¬«      S | st        dd¬«      S 	 t        | t        j
                  t        j                  t        j                  ¬	«      }t        t        j                  «      }|j                  |«       t        d
d¬«      S # t        $ r% t         j                  d«       t        dd¬«      cY S w xY w­w)z8Exchange authorization code for access + refresh tokens.u   eBay OAuth error: %s â€” %sz+<html><body><h1>&#10060; eBay OAuth error: z</h1><p>u   Brak szczegÃ³Å‚Ã³w.uY   </p><p>SprÃ³buj ponownie: <code>python scripts/ebay_authorize.py</code></p></body></html>i�  ©r   r   zo<html><body><h1>&#10060; Brak kodu autoryzacji</h1><p>Brak parametru <code>code</code> w URL.</p></body></html>)ÚcodeÚ	client_idÚclient_secretÚredirect_uriu¡   <html><body><h1>&#9989; Autoryzacja eBay OK</h1><p>Tokeny zapisane. Refresh token aktywny &mdash; access token bÄ™dzie odnawiany automatycznie.</p></body></html>r   zeBay OAuth callback failedul   <html><body><h1>&#10060; Autoryzacja eBay nie powiodÅ‚a siÄ™</h1><p>SprawdÅº logi serwisu.</p></body></html>iô  )r*   Úwarningr	   r   r   Úebay_client_idÚebay_client_secretÚebay_redirect_urir
   Úebay_token_pathÚsaveÚ	ExceptionÚ	exception)r<   ÚerrorÚerror_descriptionÚ
token_dataÚstores        r   Úebay_oauth_callbackrL   [   s	  è ø€ ñ Ü�‰Ð4°eÐ=NÔOÜð2Ø27°ð 9Ø'Ò@Ð+@ÐAð B!ð!ð ô	
ð 		
ñ Üð!ð
 ô
ð 	
ð
Ü-ØÜ×-Ñ-Ü"×5Ñ5Ü!×3Ñ3ô	
ˆ
ô œx×7Ñ7Ó8ˆØ�
‰
�:Ôäð!ð ô	
ð 		
øô ò 

Ü×ÑÐ5Ô6Üð!ð
 ô
ò 	
ð

üs+   ‚AC%ÁA/B4 Â3C%Â4+C"ÃC%Ã!C"Ã"C%z/ebay/oauth/declinedc               ƒ  ó$   K  — t        dd¬«      S ­w)z%User declined the eBay OAuth consent.uÂ   <html><body><h1>Autoryzacja odrzucona</h1><p>Nie udzielono zgody na dostÄ™p do konta eBay. MoÅ¼esz ponowiÄ‡ prÃ³bÄ™ uruchamiajÄ…c <code>python scripts/ebay_authorize.py</code>.</p></body></html>r   r;   r   r   r   r   Úebay_oauth_declinedrN   ™   s   è ø€ ô ðð ô	ð 	ùó   ‚z/privacyc               ƒ  ó$   K  — t        dd¬«      S ­w)zDStatic privacy policy page required by eBay for RuName registration.u  <html><head><title>Polityka PrywatnoÅ›ci - Agent Samochodowy</title></head><body><h1>Polityka PrywatnoÅ›ci</h1><p>Serwis Agent Samochodowy (api.agent.dgx.dev) przetwarza dane wyÅ‚Ä…cznie w zakresie niezbÄ™dnym do Å›wiadczenia usÅ‚ug integracji z platformÄ… eBay:</p><ul><li>Tokeny OAuth (access_token, refresh_token) &mdash; przechowywane lokalnie na serwerze z ograniczonymi uprawnieniami (chmod 600), uÅ¼ywane wyÅ‚Ä…cznie do komunikacji z API eBay.</li><li>Identyfikatory ofert i dane produktowe &mdash; pobierane z konta sprzedawcy w celu budowy katalogu czÄ™Å›ci.</li></ul><p>Dane nie sÄ… udostÄ™pniane podmiotom trzecim. Dane konta eBay mogÄ… zostaÄ‡ usuniÄ™te na Å¼Ä…danie (zgodnie z eBay Marketplace Account Deletion policy).</p><p>Kontakt: admin@dgx.dev</p></body></html>r   r;   r   r   r   r   Úprivacy_policyrQ   ¬   s   è ø€ ô ðð" ô'ð ùrO   )Úreturnúdict[str, str])r   ÚstrrR   r   )r,   r   rR   rS   )r   rT   r6   rT   r7   rT   rR   rT   )NNN)r<   ú
str | NonerH   rU   rI   rU   rR   r	   )rR   r	   ) Ú__doc__Ú
__future__r   r2   ÚloggingÚtypingr   Úfastapir   r   r   Úfastapi.responsesr	   Ú'agent_samochodowy.compliance.ebay_oauthr
   r   Ú%agent_samochodowy.compliance.settingsr   Ú	getLoggerÚ__name__r*   r   Úappr)   r   r!   Úpostr0   r   rL   rN   rQ   r   r   r   ú<module>rb      sh  ðñõ #ã Û Ý ç .Ñ .Ý *÷õ Eà	ˆ×	Ñ	˜8Ó	$€áÓ€áÐ0¸'ÔB€ð ‡�ˆÓòó ðð ‡�Ð	Óòó ðð" ‡�Ð
Óò
&ó ð
&ð?Øð?àð?ð ð?ð 	ó	?ð ‡�Ð	°€Ó=àØØ$(ð:
Ø
ð:
àð:
ð "ð:
ð ò	:
ó >ð:
ðz ‡�Ð	°€Ó=òó >ðð$ ‡�ˆ L€Ó1òó 2ñr   