Ë
    ÑÕ¯iÝ  ã                   óÄ   — d dl Z d dlZd dlZd dlmZ 	 d dlZd dlZd dlm	Z	 d dl
mZ d dlmZ d dlmZmZmZ d dlZ G d„ de«      Z G d	„ d
e«      Zy# e$ r d dlZY ŒFw xY w)é    N)Úsha256)Úcontextmanager)Úurllib)Ú	ApiAccess)Ú
ApiVersionÚReleaseÚUnstablec                   ó   — e Zd Zy)ÚValidationExceptionN)Ú__name__Ú
__module__Ú__qualname__© ó    úB/var/www/html/venv/lib/python3.12/site-packages/shopify/session.pyr   r      s   „ Ør   r   c                   ó  — e Zd ZdZdZdZdZdZed„ «       Z	ee
d„ «       «       Zdd„Zdd„Zd„ Zed	„ «       Zed
„ «       Zed„ «       Zed„ «       Zej(                  d„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zy)ÚSessionNÚhttpszmyshopify.comc                 óX   — t        j                  |«      D ]  \  }}t        | ||«       Œ y ©N)ÚsixÚ	iteritemsÚsetattr)ÚclsÚkwargsÚkÚvs       r   ÚsetupzSession.setup   s%   € ä—M‘M &Ö)‰DˆAˆqÜ�C˜˜AÕñ *r   c              #   ó‚  K  — dd l }|j                  j                  }|j                  j                  «       j	                  d«      }|j                  j                  «       xs |}|j                  |||«      }t        |||«      }	|j                  j                  |	«       d –— |j                  j                  |«       y ­w)Nr   zX-Shopify-Access-Token)ÚshopifyÚShopifyResourceÚurlÚget_headersÚgetÚget_versionr   Úactivate_session)
r   ÚdomainÚversionÚtokenr    Úoriginal_domainÚoriginal_tokenÚoriginal_versionÚoriginal_sessionÚsessions
             r   ÚtempzSession.temp"   s¤   è ø€ ó 	à!×1Ñ1×5Ñ5ˆØ ×0Ñ0×<Ñ<Ó>×BÑBÐC[Ó\ˆØ"×2Ñ2×>Ñ>Ó@ÒKÀGÐØ"Ÿ?™?¨?Ð<LÈnÓ]Ðä˜& '¨5Ó1ˆØ×Ñ×0Ñ0°Ô9ÛØ×Ñ×0Ñ0Ð1AÕBùs   ‚B=B?c                 ó€   — | j                  |«      | _        || _        t        j                  |«      | _        || _        y r   )Ú_Session__prepare_urlr"   r)   r   Úcoerce_to_versionr(   Úaccess_scopes)ÚselfÚshop_urlr(   r)   r3   s        r   Ú__init__zSession.__init__1   s8   € Ø×%Ñ% hÓ/ˆŒØˆŒ
Ü!×3Ñ3°GÓ<ˆŒØ*ˆÔØr   c                 ó¼   — t        | j                  dj                  |«      |¬«      }|r||d<   d| j                  ›dt        j
                  j                  |«      ›�S )NÚ,)Ú	client_idÚscopeÚredirect_uriÚstateúhttps://z/admin/oauth/authorize?)ÚdictÚapi_keyÚjoinr"   r   ÚparseÚ	urlencode)r4   r:   r;   r<   Úquery_paramss        r   Úcreate_permission_urlzSession.create_permission_url8   sJ   € Ü d§l¡l¸#¿(¹(À5»/ÐXdÔeˆÙØ$)ˆL˜Ñ!øØ8<¿»Ä&Ç,Á,×BXÑBXÐYeÔBfÐgÐgr   c                 ó˜  — | j                   r| j                   S | j                  |«      st        d«      ‚|d   }d| j                  z  }t	        | j
                  | j                  |¬«      }t        j                  j                  |t        j                  j                  |«      j                  d«      «      }t        j                  j                  |«      }|j                  dk(  rRt        j                   |j#                  «       j%                  d«      «      }|d   | _         |d   | _        | j                   S t)        |j*                  «      ‚)	Nz&Invalid HMAC: Possibly malicious loginÚcodez$https://%s/admin/oauth/access_token?)r9   Úclient_secretrF   úutf-8éÈ   Úaccess_tokenr:   )r)   Úvalidate_paramsr   r"   r>   r?   Úsecretr   ÚrequestÚRequestrA   rB   ÚencodeÚurlopenrF   ÚjsonÚloadsÚreadÚdecoder3   Ú	ExceptionÚmsg)r4   ÚparamsrF   r"   rC   rM   ÚresponseÚjson_payloads           r   Úrequest_tokenzSession.request_token>   sý   € Ø�:Š:Ø—:‘:Ðà×#Ñ# FÔ+Ü%Ð&NÓOÐOà�f‰~ˆà4°t·x±xÑ?ˆÜ d§l¡lÀ$Ç+Á+ÐTXÔYˆÜ—.‘.×(Ñ(¨¬f¯l©l×.DÑ.DÀ\Ó.R×.YÑ.YÐZaÓ.bÓcˆÜ—>‘>×)Ñ)¨'Ó2ˆà�=‰=˜CÒÜŸ:™: h§m¡m£o×&<Ñ&<¸WÓ&EÓFˆLØ% nÑ5ˆDŒJØ!-¨gÑ!6ˆDÔà—:‘:Ðä˜HŸL™LÓ)Ð)r   c                 ó   — | j                   S r   )r(   ©r4   s    r   Úapi_versionzSession.api_versionU   s   € à�|‰|Ðr   c                 ój   — | j                   j                  | j                  ›d| j                  ›�«      S )Nz://)r(   Úapi_pathÚprotocolr"   r\   s    r   ÚsitezSession.siteY   s$   € à�|‰|×$Ñ$°$·-³-ÀÇÂÐ%JÓKÐKr   c                 ó>   — | j                   d uxr | j                  d uS r   )r"   r)   r\   s    r   ÚvalidzSession.valid]   s   € à�x‰x˜tÐ#Ò>¨¯
©
¸$Ð(>Ð>r   c                 ó   — | j                   S r   )Ú_access_scopesr\   s    r   r3   zSession.access_scopesa   s   € à×"Ñ"Ð"r   c                 ó\   — |�t        |«      t        k(  r|| _        y t        |«      | _        y r   )Útyper   re   )r4   Úscopess     r   r3   zSession.access_scopese   s'   € àˆ>œT &›\¬YÒ6Ø"(ˆDÕä"+¨FÓ"3ˆDÕr   c                 ó„  — |r|j                  «       dk(  ry t        j                  dd|«      }t        j                  j                  d|z   «      j                  }|€y |j                  d«      }|dk7  r|d| }t        |«      dk(  ry |d| j                  z   z  }| j                  r|dt        | j                  «      z   z  }|S )NÚ z
^https?://r=   Ú.éÿÿÿÿr   Ú:)ÚstripÚreÚsubr   rA   ÚurlparseÚhostnameÚfindÚlenÚmyshopify_domainÚportÚstr)r   r"   ÚshopÚidxs       r   Ú__prepare_urlzSession.__prepare_urll   s³   € á�s—y‘y“{ bÒ(ØÜ�f‰f�\ 2 sÓ+ˆÜ�|‰|×$Ñ$ Z°#Ñ%5Ó6×?Ñ?ˆØˆ<ØØ�i‰i˜‹nˆØ�"Š9Ø˜˜#�;ˆDÜˆt‹9˜Š>ØØ��c×*Ñ*Ñ*Ñ*ˆØ�8Š8Ø�Cœ#˜cŸh™h›-Ñ'Ñ'ˆDØˆr   c                 ó�   — d}t        |j                  dd«      «      t        j                  «       |z
  k  ry| j                  |«      S )Ni€Q Ú	timestampr   F)Úintr$   ÚtimeÚvalidate_hmac)r   rW   Úone_days      r   rK   zSession.validate_params~   s@   € ð ˆÜˆv�z‰z˜+ qÓ)Ó*¬T¯Y©Y«[¸7Ñ-BÒBØà× Ñ  Ó(Ð(r   c                 óÊ   — d|vry| j                  |«      j                  d«      }|d   j                  d«      }	 t        j                  ||«      S # t        $ r ||k(  cY S w xY w)NÚhmacFrH   )Úcalculate_hmacrO   r‚   Úcompare_digestÚAttributeError)r   rW   Úhmac_calculatedÚhmac_to_verifys       r   r   zSession.validate_hmacˆ   sn   € à˜ÑØà×,Ñ,¨VÓ4×;Ñ;¸GÓDˆØ ™×.Ñ.¨wÓ7ˆð	5Ü×&Ñ& ¸ÓGÐGøÜò 	5Ø" nÑ4Ò4ð	5ús   »A ÁA"Á!A"c                 óÂ   — | j                  |«      }t        j                  | j                  j	                  «       |j	                  «       t
        «      j                  «       S )z¾
        Calculate the HMAC of the given parameters in line with Shopify's rules for OAuth authentication.
        See http://docs.shopify.com/api/authentication/oauth#verification.
        )Ú&_Session__encoded_params_for_signaturer‚   ÚnewrL   rO   r   Ú	hexdigest)r   rW   Úencoded_paramss      r   rƒ   zSession.calculate_hmac—   sF   € ð ×;Ñ;¸FÓCˆä�x‰x˜Ÿ
™
×)Ñ)Ó+¨^×-BÑ-BÓ-DÄfÓM×WÑWÓYÐYr   c                 óH   — d„ }dj                  t         ||«      «      «      S )z…
        Sort and combine query parameters into a single string, excluding those that should be removed and joining with '&'
        c           	   3   óÂ  K  — t        j                  | «      D ]Ã  \  }}|dk(  rŒ|j                  d«      r=|j                  d«      }t	        j
                  t        t        t        |«      «      «      }t        |«      j                  dd«      j                  dd«      }t        |«      j                  dd«      }dj                  ||«      j                  dd	«      –— ŒÅ y ­w)
Nr‚   z[]Ú%z%25Ú=z%3Dz{0}={1}Ú&z%26)r   r   ÚendswithÚrstriprQ   ÚdumpsÚlistÚmaprw   ÚreplaceÚformat)rW   r   r   s      r   Úencoded_pairsz=Session.__encoded_params_for_signature.<locals>.encoded_pairs§   s°   è ø€ ÜŸ™ fÖ-‘��1Ø˜’;Øà—:‘:˜dÔ#àŸ™ ›�AÜŸ
™
¤4¬¬C°«Ó#4Ó5�Aô ˜“F—N‘N 3¨Ó.×6Ñ6°s¸EÓB�Ü˜“F—N‘N 3¨Ó.�Ø×&Ñ& q¨!Ó,×4Ñ4°S¸%Ó@Ó@ñ .ùs   ‚CCr‘   )r@   Úsorted)r   rW   r™   s      r   Ú__encoded_params_for_signaturez&Session.__encoded_params_for_signature¡   s#   € ò	Að �x‰xœ™}¨VÓ4Ó5Ó6Ð6r   )NNNr   )r   r   r   r?   rL   r`   ru   rv   Úclassmethodr   r   r/   r6   rD   rZ   Úpropertyr]   ra   rc   r3   Úsetterr1   rK   r   rƒ   r‰   r   r   r   r   r      s.  „ Ø€GØ€FØ€HØ&ÐØ€Dàñó ðð ØñCó ó ðCóóhò*ð. ñó ðð ñLó ðLð ñ?ó ð?ð ñ#ó ð#ð ×Ññ4ó ð4ð ñó ðð" ñ)ó ð)ð ñ5ó ð5ð ñZó ðZð ñ7ó ñ7r   r   )r~   r‚   rQ   Úhashlibr   Ú
simplejsonÚImportErrorro   Ú
contextlibr   Ú	six.movesr   Úshopify.api_accessr   Úshopify.api_versionr   r   r	   r   rU   r   Úobjectr   r   r   r   Ú<module>r§      s^   ðÛ Û Û Ý ðÛó 
Ý %Ý Ý (ß =Ñ =Û 
ô	˜)ô 	ô`7ˆfõ `7øð ò Ýðús   ”A Á	AÁA