o
    tBh                     @   s   d dl Z d dlZd dlZd dlmZ zd dlZW n ey%   d dlZY nw 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 deZG d	d
 d
eZdS )    N)sha256)contextmanager)urllib)	ApiAccess)
ApiVersionReleaseUnstablec                   @   s   e Zd ZdS )ValidationExceptionN)__name__
__module____qualname__ r   r   f/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/shopify/session.pyr	      s    r	   c                   @   s   e Zd ZdZdZdZdZdZedd Z	ee
dd Zd!dd	Zd"d
dZdd Zedd Zedd Zedd Zedd Zejdd Zedd Zedd Zedd Zedd Zedd  ZdS )#SessionNhttpszmyshopify.comc                 K   s$   t |D ]
\}}t| || qd S N)six	iteritemssetattr)clskwargskvr   r   r   setup   s   zSession.setupc           
      c   sl    dd l }|jj}|j d}|j p|}||||}t|||}	|j|	 d V  |j| d S )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sessionr   r   r   temp"   s   zSession.tempc                 C   s(   |  || _|| _t|| _|| _d S r   )_Session__prepare_urlr   r#   r   coerce_to_versionr"   access_scopes)selfshop_urlr"   r#   r,   r   r   r   __init__1   s
   zSession.__init__c                 C   s8   t | jd||d}|r||d< d| jtj|f S )N,)	client_idscoperedirect_uristatez#https://%s/admin/oauth/authorize?%s)dictapi_keyjoinr   r   parse	urlencode)r-   r2   r3   r4   query_paramsr   r   r   create_permission_url8   s   zSession.create_permission_urlc                 C   s   | j r| j S | |std|d }d| j }t| j| j|d}tj	|tj
|d}tj|}|jdkrQt| d}|d | _ |d | _| j S t|j)	Nz&Invalid HMAC: Possibly malicious logincodez$https://%s/admin/oauth/access_token?)r1   client_secretr<   utf-8   access_tokenr2   )r#   validate_paramsr	   r   r5   r6   secretr   requestRequestr8   r9   encodeurlopenr<   jsonloadsreaddecoder,   	Exceptionmsg)r-   paramsr<   r   r:   rC   responsejson_payloadr   r   r   request_token>   s   





zSession.request_tokenc                 C      | j S r   )r"   r-   r   r   r   api_versionU      zSession.api_versionc                 C   s   | j d| j| jf S )Nz%s://%s)r"   api_pathprotocolr   rR   r   r   r   siteY   s   zSession.sitec                 C   s   | j d uo	| jd uS r   )r   r#   rR   r   r   r   valid]   s   zSession.validc                 C   rQ   r   )_access_scopesrR   r   r   r   r,   a   rT   zSession.access_scopesc                 C   s,   |d u s
t |tkr|| _d S t|| _d S r   )typer   rY   )r-   scopesr   r   r   r,   e   s   
c                 C   s   |r|  dkr
d S tdd|}tjd| j}|d u r d S |d}|dkr/|d| }t|dkr7d S |d| j	 7 }| j
rJ|dt| j
 7 }|S )N z
^https?://zhttps://.r   :)stripresubr   r8   urlparsehostnamefindlenmyshopify_domainportstr)r   r   shopidxr   r   r   __prepare_urll   s   
zSession.__prepare_urlc                 C   s.   d}t |ddt | k rdS | |S )NiQ 	timestampr   F)intr   timevalidate_hmac)r   rM   one_dayr   r   r   rA   ~   s   
zSession.validate_paramsc                 C   sT   d|vrdS |  |d}|d d}zt||W S  ty)   ||k Y S w )NhmacFr>   )calculate_hmacrE   rr   compare_digestAttributeError)r   rM   hmac_calculatedhmac_to_verifyr   r   r   rp      s   zSession.validate_hmacc                 C   s&   |  |}t| j | t 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_signaturerr   newrB   rE   r   	hexdigest)r   rM   encoded_paramsr   r   r   rs      s   
zSession.calculate_hmacc                 C   s   dd }d t||S )z
        Sort and combine query parameters into a single string, excluding those that should be removed and joining with '&'
        c                 s   s    t | D ]<\}}|dkrq|dr#|d}tttt|}t|	dd	dd}t|	dd}d
||	dd	V  qd S )
Nrr   z[]%z%25=z%3Dz{0}={1}&z%26)r   r   endswithrstriprG   dumpslistmapri   replaceformat)rM   r   r   r   r   r   encoded_pairs   s   

z=Session.__encoded_params_for_signature.<locals>.encoded_pairsr~   )r7   sorted)r   rM   r   r   r   r   __encoded_params_for_signature   s   z&Session.__encoded_params_for_signature)NNNr   )r
   r   r   r6   rB   rV   rg   rh   classmethodr   r   r)   r/   r;   rP   propertyrS   rW   rX   r,   setterr*   rA   rp   rs   rx   r   r   r   r   r      sD    









	

	r   )ro   rr   rG   hashlibr   
simplejsonImportErrorra   
contextlibr   	six.movesr   shopify.api_accessr   shopify.api_versionr   r   r   r   rK   r	   objectr   r   r   r   r   <module>   s"    